基于FPGA的915MHz射頻讀卡器設計
射頻識別(RFID)技術是一種非接觸式的自動識別技術,通過射頻信號自動識別目標對象并獲取相關信息。通常RFID系統(tǒng)主要由應用軟件、射頻卡以及讀卡器三部分構成[1]。相對于低頻段的RFID系統(tǒng),工作在860 MHz~960 MHz的超高頻段(UHF)RFID系統(tǒng)有著讀取距離遠、閱讀速度快等優(yōu)點,是目前國際上RFID技術發(fā)展的熱點[2]。讀卡器的設計是RFID系統(tǒng)設計中的關鍵部分,設計方案有很多種。FPGA[3]具有開發(fā)簡單、靜態(tài)可重復編程和動態(tài)在線編程的特點,已經成為當今應用最廣泛的可編程專用集成電路。目前生產RFID產品的很多公司都使用自己的標準,可供射頻卡使用的幾種標準有ISO/IEC 11784、ISO/IEC 14443、ISO/IEC 15693和ISO/IEC 18000等。其中應用最多的是ISO/IEC 14443、ISO/IEC 15693和ISO/IEC 18000這三個標準[4]。本文基于ISO/IEC 18000-6 Type B協議設計了一款工作頻率為915 MHz的讀卡器。
1 讀卡器的硬件設計
讀卡器的硬件可以分為三大模塊:FPGA數字信號處理模塊、MCU及人機接口模塊和射頻收發(fā)模塊,其結構框圖如圖1所示。FPGA數字信號處理模塊用來實現ISO/IEC 18000-6 Type B 協議中規(guī)定的基帶數據編解碼,MCU及人機接口模塊用來實現指令的跳轉控制和返回數據的顯示等一些操作接口,射頻收發(fā)模塊用來處理前端的超高頻信號。
1.1 FPGA數字信號處理模塊
FPGA數字信號處理模塊包含時鐘分頻模塊、FIFO、曼徹斯特編碼器、CRC生成校驗、FM0解碼器、串并變換電路及對應的幀發(fā)送接收控制器,其結構框圖如圖2所示。
該模塊的內部工作流程如下:
(1)發(fā)送部分
①數據通信接口8 bit并行接收來自MCU的命令數 據,數據在FIFO中緩沖。
②數據做并行到串行的轉換。
③在發(fā)送控制器的控制下,串行數據通過CRC模塊,生成16 bit的CRC校驗值,并附加在原數據的后面。
④根據ISO/IEC 18000-6 Type B協議規(guī)定,把上述的數據進行曼徹斯特編碼。
⑤把已經過曼徹斯特編碼的數據引向一個已預置幀頭的移位寄存器,數據一到便啟動移位寄存器,然后把輸出數據傳送給射頻收發(fā)模塊。
(2)接收部分
①從射頻收發(fā)模塊接收一幀基帶信號,用移位寄存器來檢測幀頭。若檢測到幀頭,則發(fā)一個收到幀頭的信號給接收控制器。
②若接收控制器接收到幀頭的信號,則馬上啟動FM0解碼。
③解碼后的數據傳送給串/并行的轉換電路,轉換后的數據暫存在FIFO。
④同時解碼后的數據也送給CRC模塊進行校驗,若校驗結果錯誤,則清除存于FIFO中的數據,通知MCU其接收的數據錯誤;若校驗結果正確,則把FIFO中的數據傳送給MCU。
1.2 MCU及人機接口模塊
MCU及人機接口模塊以C8051F020單片機[5]為核心,由FPGA接口、LCD、PS/2鍵盤、UART接口以及JTAG接口等外圍電路組成,其結構框圖如圖3所示。
該模塊實現的功能有:(1)C8051F020負責整個讀卡器內各部分的協調工作(包括與計算機的數據通信);(2)在啟動時向FPGA傳送配置數據,初始化FPGA;(3)在讀卡過程中向FPGA傳送讀卡命令,然后通過INT1中斷啟動接收FPGA信號;(4)處理接收回來的射頻卡信息(卡號、密碼等);(5)實現二進制樹形防碰撞功能;(6)驅動LCD,顯示系統(tǒng)的提示信息;(7)擴展一個PS/2鍵盤,可以輸入數據及命令;(8)控制 TR1000芯片,設置OOK發(fā)射方式或ASK接收方式;(9)控制發(fā)射功率大??;(10)擴展EEPROM,存儲讀出的射頻卡的信息。
1.3 射頻收發(fā)模塊
超高頻段射頻收發(fā)模塊的開發(fā)一般可以采用兩種方案:一是采用分立元件搭建射頻電路;二是采用無線射頻收發(fā)模塊以實現基帶信號的調制解調[6]。由于第一種方法的電路調試比較麻煩,而且會占用很長的開發(fā)時間,所以本設計采取第二種方案。
ISO/IEC 18000-6 Type B 協議規(guī)定讀卡器到射頻卡端的射頻調制方式為調制深度為99%的ASK調制,也就是可以近似看作為OOK調制;而射頻卡到讀卡器端的射頻調制方式為反向散射調制,其調制方式與ASK調制類似,所以在解調端可以按照ASK方式解調。射頻收發(fā)模塊的核心芯片采用RFM公司的TR1000芯片。TR1000是一款單片OOK/ASK通用無線射頻收發(fā)器芯片,適合高穩(wěn)定、小尺寸、低功率、低價格的短距離無線數據通信和無線控制應用。
2 讀卡器的軟件系統(tǒng)設計
軟件設計采用模塊化和結構化的編程思想,在初始化的時候由單片機配置FPGA??紤]到C語言可讀性強,移植性好以及MCU的實際情況,本設計采用C語言對C8051F020進行編程。讀卡器的軟件系統(tǒng)大致可以分為:讀寫卡操作程序、防沖突程序和串行通信程序。
2.1 讀寫卡操作程序
讀寫卡操作程序完成基于ISO/IEC 18000-6 Type B協議的基帶信號編解碼,其程序設計流程圖如圖4所示。
具體工作過程如下:(1)上電復位,系統(tǒng)初始化,包括單片機時鐘、端口、LCD、定時器的初始化,配置FPGA和開中斷。(2)等待接收上位機或鍵盤發(fā)送的指令。(3)對指令進行判斷,如果為多卡操作,則進入防沖突子程序;如果為單卡操作,則直接進行讀卡、寫卡、值操作和中止操作。(4)若操作成功,所得數據回傳給上位機,同時驅動LCD顯示操作成功信息;若操作失敗,則驅動LCD顯示操作失敗信息。
2.2 防沖突程序
當讀卡器對射頻卡進行多卡操作時,在其天線覆蓋范圍內的所有射頻卡將被激活,并處于識別狀態(tài),造成了多張射頻卡讀寫沖突。所以解決沖突是多卡操作的關鍵。 ISO/IEC 18000-6 Type B協議詳細規(guī)定了防沖突機制,其程序設計流程圖如圖5所示。該防沖突機制的原理是利用隨機產生的0和1信號實現二進制樹形搜索,并且設定了成功命令,進一步提高了搜索的效率,是一種二進制樹形的防沖突算法[7]。具體實現過程為:首先,射頻卡進入讀卡器的工作范圍,從離場掉電狀態(tài)進入就緒狀態(tài)。讀卡器可以通過GroupSeleet命令和GroupUnseleet命令讓讀卡器工作范圍內處于就緒狀態(tài)的所有或部分的射頻卡參與防沖突過程。針對該模式的防沖突機制,射頻卡應該具有如下兩種硬件電路:一個8 bit的計數器和一個0、1隨機數發(fā)生器。當射頻卡進入識別狀態(tài)(ID狀態(tài))后,將其內部的計數器清0,其中的一部分可以通過接收 GroupUnselect命令重新回到就緒狀態(tài),其他處于識別狀態(tài)的射頻卡則進入了防沖突執(zhí)行的過程中。被選中的射頻卡開始下面的循環(huán):(1)所有處于識別狀態(tài)并且內部計數器為0的射頻卡將發(fā)送其識別碼;(2)如果有一個以上的射頻卡發(fā)送識別碼時,讀卡器將檢測到沖突而發(fā)送Fail命令;(3)所有接收到Fail命令并且內部計數器不等于0的射頻卡將把本身的計數器加1;所有接收到Fail命令并且內部計數器等于0的射頻卡(即剛剛發(fā)送過應答的射頻卡) 將產生一個1或0的隨機數。如果選擇了1,射頻卡將把自己的計數器加1;如果選擇了0,射頻卡將保持計數器為0并且再次發(fā)送它們的識別碼。在接下來的過程中會出現4種可能的情況;(4)情況1:如果有一個以上的射頻卡發(fā)送,將重復步驟(2);(5)情況2:如果所有的射頻卡都隨機選擇了1,讀卡器將接收不到應答,此時,讀卡器將會發(fā)送Success命令,所有的射頻卡的計數器減1,然后計數器等于0的射頻卡開始發(fā)送,接著重復步驟(2);(6)如果只有一個射頻卡發(fā)送并且它的識別碼被讀卡器正確接收,讀卡器將發(fā)送包含識別碼的DataRead命令,射頻卡正確接收該條命令后將進入數據交換狀態(tài),開始發(fā)送它的數據。此后,讀卡器將發(fā)送Success命令,使處于識別狀態(tài)的射頻卡的計數器減1;(7)情況3:如果只有一個射頻卡的計數器等于0并且返回應答,重復步驟(5)讀卡器發(fā)Success命令或重復步驟(6)發(fā)送DataRead命令;如果有一個以上的射頻卡返回應答,重復步驟(2);(8)情況4:如果只有一個射頻卡返回應答,并且它的識別碼未被正確接收,讀卡器將發(fā)送一個Resend命令。如果識別碼被正確接收,重復步驟(5)。如果識別碼被重復幾次的接收(這個次數可以基于系統(tǒng)所希望的錯誤處理標準來設定),就假定有一個以上的射頻卡在響應,重復步驟(2)。
經過如上的防沖突過程,射頻場內的射頻卡將可以逐一被識別并進行數據交換。
2.3 串行通信程序
系統(tǒng)使用PC機作為上位機,讀卡器作為下位機。上位機與下位機之間的通信采用基于RS-232-C的串口通信。RS-232-C是一種串行通信總線標準,是數據終端設備(DTE)和數據通信設備(DCE)之間的接口標準,不同廠家生產的設備,只要它們都具有RS-232-C標準接口,則不需要任何轉換電路,就可以互相插接起來。
串行通信程序是MCU與PC機通信的控制程序。發(fā)送程序采用查詢的方式設計,即把待發(fā)送的數據先送到緩沖區(qū)中,然后查詢串口發(fā)送中斷標志是不是有空,若有空就發(fā)送下一個數據。
接收程序采用中斷的方式設計,即當PC機要發(fā)數據給MCU時,主動向MCU申請中斷,接收中斷標志有效,則PC向MCU傳送數據。
3 驗證方案
3.1 驗證平臺的建立
為了驗證所設計的讀卡器能否完成預期的功能,設計了相應的驗證平臺[8]。驗證平臺由數據解碼通道、數據編碼通道以及指令分析器三部分組成。數據解碼通道是對讀卡器發(fā)送出的數據幀進行解碼,提取指令的原始數據;指令分析器是對收到的指令數據進行判斷,同時返回相應的數據并發(fā)送給數據編碼通道;數據編碼通道則是對發(fā)送來的數據進行編碼,再發(fā)送給讀卡器。
平臺采用Verilog HDL硬件語言搭建,選用Altera公司Cyclone系列的EP1C6Q240C8芯片為目標器件,使用Quartus II進行綜合驗證,其結構框圖和電路原理圖分別如圖6、圖7所示。
3.2 測試結果分析
(1)時序分析
通過運行QuartusII 7.1自帶的時序分析器,可以得到時序分析的一些參數:tsu(輸入建立時間)、tco(時鐘到輸出延時)、th(保持時間)分別為3.530 ns、13.174 ns、0.751 ns?;l時鐘clk最大可以達到89.06 MHz,而ISO/IEC 18000-6 Type B協議規(guī)定的基頻時鐘為40 kHz。從分析本系統(tǒng)的時序結果顯示,完全符合協議要求。具體的時序分析結果如圖8所示。
(2)功能分析
功能分析以GROUP_SELECT_LT命令為例。 GROUP_SELECT_LT命令是多卡操作中的組選命令,射頻卡接到此命令,卡內指定地址的數據與幀中提供的數據進行對比。若卡內數據較小,則返回射頻卡的64 bit序列號,否則不作任何響應。GROUP_SELECT_LT命令的命令號為03,地址設為0F,掩碼設為FF,64 bit數據全設為F,所以從MCU傳給FPGA的命令數據為03_0F_FF_FFFF_FFFF_FFFF_FFFF。原始數據經過FPGA數字信號處理模塊處理后,就成了一幀基帶數據信號。驗證平臺將讀卡器發(fā)來的數據幀進行解碼,然后判斷指令并返回射頻卡的64 bit序列號,經編碼后成一幀數據幀發(fā)送給讀卡器。讀卡器收到此幀后即解碼,并進行CRC校驗,若都沒有錯,則把解碼后的數據傳輸給MCU。
GROUP_SELECT_LT命令仿真波形圖如圖9所示,實驗證明可實現ISO/IEC 18000-6 Type B協議。
隨著RFID相關國際標準的確立(如ISO/IEC 18000)RFID的研發(fā)已成為國際性的課題。在諸多RFID工作頻段中,UHF頻段的RFID技術前景最為看好,也成為現今RFID技術領域研究的熱點。
評論