引言
UHF RFID讀寫器具有讀寫距離遠、讀寫速度快等優點,已成功運用于供應鏈管理、航空管理和后勤管理等諸多領域。本設計依據的協議是EPC C1G2(EPCClassl Generation2)。
本文介紹了一種讀寫器的編解碼部分由FPGA來完成的設計方案,由FPGA負責前向鏈路的PIE編碼和后向鏈路的FM0/miller解碼,且解碼模塊可對標簽突發傳來的數據立即檢測并實施解碼,實現了較快的解碼速率。FPGA選用的是Altera公司的EP1C3T100C6芯片。
1、RFID系統介紹
圖1所示為RFID系統,主要由PC機、讀寫器、天線和電子標簽組成。讀寫器與電子標簽之間的數據通過天線進行傳遞。讀寫器作為RFID系統的一部分,既能與標簽通信,又能向PC機傳輸數據并執行上位機所要求的操作,具有發送、接收和處理數據的能力。讀寫器系統按其所處理信號的不同,主要由2個部分組成,即處理數字信號的基帶部分和處理模擬信號的射頻部分。
圖1 RFID系統
2、EPC C1G2協議的相關介紹
EPC C1G2標準具有如下特點:速度快,速率可達40~640 kbps;可以同時讀取標簽的數量多,理論上能讀到1000多個標簽;可在密集的讀寫器環境下工作,能迅速使用變化無常的標簽群;存儲區域多,可延伸使用用戶的內存需求;功能強,具有多種寫保護方式,安全性強;通用性強,符合EPC規則;產品價格低,兼容性好。
2.1 PIE編碼介紹
EPC C1G2協議規定發送鏈路(即讀寫器向標簽發送數據)采用的編碼方式是脈沖間隔編碼(即PIE編碼)。讀寫器每次給標簽發送命令,都以幀同步碼或前同步碼開始所有的通信。幀同步碼格式如圖2所示,幀同步碼由delimiter、數據0和RTcal三部分組成。前同步碼格式如圖3所示,前同步碼由delimiter、數據0、RTcal和TRcal四部分組成,除delimiter外,各部分均以低脈沖PW結尾,且各部分PW的長度必須相同。de limiter的長度固定為12.5μs,協議規定允許有±5%的誤差。delimiter用于給電子標簽校準時鐘。
圖2 PIE編碼的0和1
圖3 PIE前同步碼
前同步碼只用于表明盤存周期開始的Query命令中,其他命令則以幀同步碼開始。當Query命令數據中的DR=1、前同步碼中的TRcal長度為33.3μs時,可設定反向鏈路(即標簽向讀寫器發送數據)頻率最高為640kHz。
2.2 FM0和miller碼介紹
Query命令中M參數值決定了標簽返回數據的編碼方式,即FM0、miller2、miller4、miller8四種。FM0碼在每個數據邊界處和數據0中間反相。miller碼則是在兩個連續的數據0的邊界處和數據1的中間反相。miller編碼序列每位可包含2、4、8個副載波周期,即miller2、mille r4、miller8三種編碼形式。這四種編碼方式都以各自特定的幀頭開始,而具體選擇哪種幀頭,則由Query命令中Trext參數值決定,并且在結尾處都有一位“dummyl”作為數據傳送的結束標志。
2.3 讀寫器與標簽通信流程
EPC C1G2協議規定讀寫器的命令分為選擇、盤存、訪問3類,而標簽的工作狀態分為就緒、仲裁、應答、確認、開放、保護、殺死7個狀態,讀寫器命令類型和標簽狀態如圖4所示。讀寫器依賴3類命令通過改變標簽所處的狀態,實現對標簽群的篩選,以及對單個標簽的識別和訪問過程。讀寫器與標簽的通信過程略一編者注。
圖4 讀寫器命令類型和標簽狀態
3、總體設計
在本讀寫器設計中,ARM與FPGA協同工作。ARM芯片是LPC2148,工作時鐘是20 MHz,主要完成對讀寫器系統的控制。而FPGA則負責編解碼部分的數據流處理,工作時鐘頻率是25 MHz。圖5是FPGA部分的整體設計框圖。
圖5 整體設計框圖
FPGA中的模塊主要包括協議控制及命令產生模塊、PIE編碼模塊、FM0/miller解碼模塊,以及用于與PC機交互的串口控制模塊。
工作過程如下:對讀寫器命令數據及其相應的CRC5/16校驗位進行PIE編碼,編碼完成送到射頻發射端,數字信號通過控制射頻芯片RF2 173的開關引腳實現調制深度為100%的OOK(On-Off Keying)調制,并經由收發分離的定向耦合器,通過天線發射出去。
場內標簽接收到讀寫器發送的信息后,在允許其通信的情況下,會根據讀寫器發送來的命令參數,選擇4種編碼方式中的一種,將要回復讀寫器的數據進行編碼,經調制之后在空間傳輸。
讀寫器天線接收到標簽信息后,經由定向耦合器將標簽信息送到讀寫器的射頻接收模塊,該模塊對標簽信息進行解調,并將解調后得到的數字信號送給FPGA的FM0/miller解碼模塊。解碼模塊根據數據的編碼方式選擇相應的電路解碼,解碼后的數據返回給協議控制及命令產生模塊。該模塊根據上次發送的命令以及接收到的標簽信息作出判斷,產生下一次的操作命令數據,發給PIE編碼模塊,與該標簽進行進一步的信息交互或選擇重新讀取另外的標簽。
同時,為了準確獲取標簽信息,必須將讀寫器與PC機相連。讀寫器通過由FPGA實現的串口模塊與PC機相連,對讀取到的標簽信息做必要的顯示,如標簽返回的RN16、EPC、UII等。
4、FPGA實現電路
為了實現FPGA部分的功能,在Altera公司的EP1C3T100C6芯片上,利用Quartus II軟件進行設計,PIE編碼模塊設計如圖6所示。
圖6 PIE編碼模塊設計框圖
4.1 編碼模塊設計
PIE編碼由pie_encode模塊實現。該模塊接收命令產生模塊并行發來的8位數據,按照協議規定及設置,先給命令數據添加特定的幀頭,并根據數據傳輸速率,對命令數據及其CRC5/16校驗位進行PIE編碼,編碼完成后輸出給射頻發射模塊調制,然后通過天線發送出去。其設計框圖如圖6所示。
PIE編碼模塊由編碼狀態機作為控制模塊。狀態機的狀態由命令幀頭和數據0和1組成,即idle、delimiter、tari、rtcal、trcal、data_ sendl、data_send0 7個狀態,其中idle是空閑狀態,接收到開始信號后跳轉到其他狀態。狀態機的流程按照命令的組成依次進行,每個狀態按照協議要求保持特定的時間,直至命令編碼完成。由于Query命令和其他命令的幀頭不同,query_cmd_flag_in信號用于指示此次發送來的數據是否為Query命令數據,如果是,則在編碼時加入TRcal命令段;否則,跳過TRcal狀態。
在接收部分數據開始發送指示信號rx_cmd_start與要發送的數據rx_cmd、rx_cmd_num保持同步,編碼模塊中的命令數據計數器和命令數據移位寄存器根據rx_cmd_start信號將8位數據并行送入各自的寄存器。
接收完成后,數據寄存器會根據計數器中的值進行相應的移位,將無效數據移出,保證有效數據是從命令寄存器中的最高位開始。同時,每完成一位數據的編碼,計數器自減1,移位寄存器也自動左移一位,將下一個要編碼的數據放入待編碼數據寄存器中,該寄存器由此去控制狀態機的下一個流程。
發送部分主要由一個命令長度計數器組成,該計數器根據命令參數的設置以及所處的狀態進行計數,控制狀態機在某個狀態保持的時間當一位數據編碼完成,計數器清0,并開始對下一位數據計數,同時狀態機也跳轉到下一個狀態,而編碼數據則根據狀態機的狀態以及計數器的值拉高或拉低,并由鎖存器將編碼后的命令鎖存輸出。這樣就實現了邊編碼邊調制的目的,提升了命令發送的速率,也節省了硬件資源。
4.2 解碼模塊設計
解碼部分由data_pre_process、fm_and_miller_decode、data_post_decode 3個模塊組成。data_pre_process是解碼數據預處理模塊,接收射頻模塊解調后的數據。因為射頻發射和接收使用的是同一根天線,發射的數據信息以及其他雜波信號經常會泄露進解碼模塊。該模塊主要是去除信號中的毛刺,并對接收數據的高低電平長度進行判斷,看是否符合編碼規則,如果均在合適的范圍內,則視為成功。同時產生待解碼數據的采樣信號,以及其他指示信號,以便解碼模塊的數據處理;若不符合要求則丟棄這部分數據,重新檢查分析新來的數據信息。
data_post_process是解碼數據確認及串并轉換模塊。解調后的數據經過了解碼預處理模塊的初步判斷,只是符合了一定的編碼規則,在解碼過程中還可能會出現諸如幀頭出錯、結尾數據不為1等其他錯誤。該模塊通過判斷解碼模塊的error和data_success信號,確認此次解碼是否成功,若成功,將接收解碼數據,同時考慮到串行數據傳輸速度較慢,本模塊會對解碼數據進行串并轉換,然后8位并行地將解碼后的數據傳輸給其他模塊。
fm_and_miller_decode是解碼模塊。其組成框圖如圖7所示。
圖7 miller2 解碼結構圖
該解碼模塊主要由解碼狀態機控制。狀態機的狀態由初始態、數據解碼態,以及最后的解碼成功和解碼失敗狀態組成。接收到解碼開始信號時,狀態機由初始態跳轉到數據解碼態開始解碼,在解碼過程中,如果發現輸入的數據違背了編碼規則或不符合命令的設置,則直接跳入失敗狀態。在該狀態下,會有一個解碼失敗信號error產生并輸出。如果解碼順利進行到結束,則跳轉到解碼成功狀態,會有一個解碼成功信號data_success產生并輸出,控制下一個模塊的工作。這樣解碼狀態機一邊接收待解碼數據,進行解碼處理,一邊將前面處理完的數據輸出給CRC5/16校驗模塊,實現了類似于流水線的工作,節省了解碼時間。
解碼模塊接收部分通過采樣信號接收待解碼數據,這樣便只需檢測采樣信號,節省了計數器的消耗。采樣到的數據首先進行幀頭檢測,判斷使用的幀頭類型及編碼形式,若幀頭檢測正確,則實施去幀頭處理,將有效數據通過控制狀態機流程來進行解碼。而其他控制信號,即來自解碼預處理模塊的數據開始傳輸指示data_start,數據傳輸結束指示data_end,數據傳輸錯誤指示data_error則直接控制狀態機狀態的轉換。
解碼完成之后,根據前面發送命令的類型,對解碼后的數據進行CRC5/16校驗,若校驗正確,則去掉校驗位,將有效數據輸出;若錯誤,則返回給狀態機,發出解碼錯誤指示。同時,根據狀態機所處的特定狀態,在每一個解碼數據期間會輸出持續一個周期的數據采樣信號sclk,以及在數據開始解碼時便與解碼數據同步輸出的信號data_out_flag,以便后續模塊進行數據的采樣與控制。
5、軟件仿真與硬件測試
以上各模塊均使用硬件描述語言實現。在Quartus II9.0中全部編譯通過,滿足時序要求,編譯報告顯示本設計共消耗了679個LE資源。調用Modelsim軟件仿真驗證。使用了Quartus II軟件的Signaltap邏輯分析儀,捕捉了讀寫器實際工作時FPGA的編解碼數據。
圖8是讀寫器先后發送不同命令并與標簽交互的部分流程。圖9是讀寫器發送的Query命令的PIE編碼,所發送的命令數據是1000_00110000 0000010101,其中前4位1000為Query命令的命令碼,后面18位則為命令數據。
圖8 命令發送流程及標簽信息的返回
圖9 命令的PIE編碼
圖10是讀寫器接收到標簽返回的miller2編碼信息后的操作。為了便于觀察,將解碼后的數據也作為一路信號顯示,即decode_data。最后一路信號是串口要發送的數據。圖10中的enc_cmd_data_out信號是讀寫器接收到標簽返回來的信息后,發出的ACK命令,發送的命令數據為01_0001111010100111,其中前兩位01為ACK命令的命令碼,后面的16位數據按照協議要求為標簽返回的RN16。
圖10 命令的miller2解碼
圖11 Signaltap的采樣信號
圖11是在讀寫器工作時利用Signaltap邏輯分析儀捕獲到的解碼后的標簽數據及采樣信號。
結語
本文介紹了在EPCC1G2協議下,利用FPGA快速處理大量數據流的優勢,實現UHF RFID讀寫器中編解碼模塊的設計方案,解決了讀寫器讀取標簽速率難以提升的問題。經過軟件仿真與實際硬件測試,讀寫器工作良好,速度、性能均得到顯著提升。
來源:電子科技大學作者:于志宏,張紅雨