射頻識別(RFID-Radio Frequency Identification)系統有著較大的數據容量和較快的讀寫速度,並且受環境影響小,與接觸式IC卡系統相比,由於沒有機械觸點,不存在觸點腐蝕和汙染的問題,因而一誕生就備受重視,在銀行信用卡、貨物銷售、倉儲管理等方面獲得了廣泛應用。
一個典型的RFID系統由閱讀器(VCD-Vicinity Coupling Device)、電子標籤(VICC-Vicinity Integrated Circuit card)及計算機三個部分組成。電子標籤的功能是儲存有關物體的數據信息,閱讀器的功能則是通過射頻信號自動識別目標對象電子標籤並獲取相關數據。本文所介紹的符合ISO/IEC15693標準的RFID系統,閱讀器和電子標籤之間的載波頻率為13.56MHz,採用半雙工的方式通訊,配合適當的天線其有效作用距離為0~1m,理想情況下可以達到1.5m,具備抗衝突能力。
目前,VICC的數字部分的控制器有兩種:嵌入式CPU和狀態機。嵌入式CPU設計較為靈活,能實現較為複雜的加密算法,但是功耗較大、成本高;而狀態機則功耗低、成本低,因而在注重功耗和成本的RFID市場獲得了廣泛應用,也為本文所採用。
1 VICC數字部分的構成
VICC數字部分的組成模塊如圖1所示。包括脈衝位置解碼模塊、接收CRC校驗模塊、CRC產生模塊、狀態機模塊、編碼和調製模塊、EEPROM和時鐘分頻模塊。脈衝位置解碼模塊接收從VICC模擬接口輸入的來自VCD的數據,並將解碼數據輸出至接收CRC校驗模塊和狀態機模塊。接收CRC校驗模塊對數據進行CRC校驗。狀態機模塊對輸入數據進行處理,如讀寫EEPROM、防衝突控制等,處理完成後則將要發送的數據送至CRC產生模塊產生相應的CRC校驗碼,然後將要發送的數據和校驗碼一起送編碼和調製模塊,經處理後由VICC模擬接口發送至VCD。時鐘分頻模塊則將輸入的13.56MHz的頻率分別進行四分頻和三十二分頻。分頻後的頻率分別交由數字部分其它模塊使用。EEPROM存儲電子標籤的數據信息。
2 VICC狀態機的實現
VICC數字部分的關鍵是狀態機,它是實現VICC功能的核心。VCD命令的處理、EEPROM的讀寫控制、數字部分各個模塊之間的協同工作,都離不開狀態機。
2.1 VICC狀態描述
根據ISO/IEC15693標準,VICC有四種不同的狀態:Power-off、Ready、Quiet和Selected。其中,Selected是可選擇的。每一個VICC在同一時間只能處於一種狀態,不同狀態的VICC對同一命令的響應是不同的。圖2是VICC的狀態轉移圖。
VICC沒有進入VCD的場工作範圍時,VICC處於Power-off狀態;進入VCD的場工作範圍時,VICC通過天線感應能量而啟動,進入Ready狀態;在VCD場工作範圍內,VICC根據VCD發出的命令進行相應的命令響應和狀態轉移;VICC移出VCD場工作範圍時,不論VICC當前處於什麼狀態,由於沒有能量供應,它都將進入Power-off狀態。
2.2 VCD和VICC之間的通訊協議
VCD和VICC之間的通訊遵循VCD先說的原則,也就是VICC並不主動向VCD發送數據,只有當它接收到VCD命令並響應時,它才向VCD發送相應的數據。
VCD向VICC發送命令的格式如圖3所示。SOF表示幀頭;Command為命令碼; Flags為該命令所攜帶的標記位,如Select_flag、Address_flag等;Parameter為該命令的參數;Data為該命令所攜帶的數據;CRC是校驗碼;EOF表示幀尾。
VICC響應VCD命令並向VCD發送數據的格式如圖4所示。SOF表示幀頭,Flags表示該響應處理正確與否的標記位。Parameter為該響應參數,Data為該響應所攜帶的數據,CRC是校驗碼。EOF表示幀尾。
2.3 VICC狀態機實現流程
VICC共有四種狀態,因而其實現程序應對各種狀態分別處理。Power-off狀態表示VICC沒有上電的情況,程序中不需要對此狀態進行處理。根據VCD和VICC之間的通訊協議,VICC在Ready狀態下對VCD命令響應的工作流程如圖5所示。在其它兩種狀態即Quiet和Selected下,對VCD命令的響應也是類似的。圖5中,符號①表示倘若當前狀態不是Ready狀態,則進入Quiet或Selected狀態下對命令進行處理。
2.4 防衝突處理
當有兩個或兩個以上的VICC同時處於VCD場區時,則多個VICC響應VCD命令可能產生衝突。當VICC狀態機給VCD發送相應命令的回覆信息時,數據經編碼和調製模塊處理後便串行發送至VCD。在編碼和調製模塊,VICC對要發送的每一位數據進行曼徹斯特編碼,上跳沿表示數據「1」,下跳沿表示數據「0」。當衝突發生時,即在同一時間段,一個VICC發送數據「1」,另外還有某一個VICC發送數據「0」,這兩個信號在VCD上疊加,使VCD在這一時間段接收不到跳變沿。從而判斷為發生了衝突。這時VCD將發送防衝突命令Inventory。
當VICC收到Inventory命令時,狀態機進入防衝突處理。狀態機先將當前的時間片和Inventory指令中的掩膜值串接,所得到的位再和VICC唯一ID值對應的位相比較,如圖6所示。
倘若時間片和掩膜值串接後的位和VICC唯一ID值對應的位一致,則VICC響應該VCD命令,返回VICC的唯一ID值和數據存儲格式的ID值,反之,則不響應。在防衝突處理期間,若VICC接收到EOF,則將時間片加1,並進行相同的比較處理。若接收到其它命令,狀態機退出防衝突狀態。
2.5 錯誤處理
當VICC接收到CRC校驗錯誤的命令時,VICC狀態機放棄該命令,對該命令不予響應。當VCD向VICC發送的命令格式不正確,或是讀寫的字塊超出了VICC的最大值範圍時,VICC狀態機返回相應的錯誤代碼,通知VCD發生了錯誤。VCD可根據錯誤代碼判斷錯誤類型。
3 系統的仿真波形與FPGA實現
ISE6.1是Xilinx FPGA/CPLD的綜合性集成設計平臺,該平臺集成了設計輸入、仿真、邏輯綜合、布局布線與實現、時序分析、晶片下載與配置、功率分析等幾乎所有設計流程所需的工具。本文在ISE6.1環境下編譯、仿真和下載。
圖7為狀態機接收到一個讀字塊命令後讀EEPROM時的仿真波形。Clk_fc4是狀態機的工作頻率,為了節省功耗,狀態機的工作頻率採用四分頻的載波頻率,也就是3.39MHz;Command_reg是狀態機接收到的命令寄存器信號,20表示讀一個字塊命令;Flag_rec_reg是狀態機接收到的標誌位寄存器信號,20表示Address_flag為「1」,其它標誌位都是「0」;Ee_rw是EEPROM讀寫控制信號,「0」表示讀EEPROM,「1」表示寫EEPROM。Ee_en表示讀寫EEPROM使能信號,高電平有效;Ee_addr是讀寫EEPROM的地址信號。Ee_data是讀寫EEPROM時的數據信號。Ee_rw_end是輸入信號,通知狀態機,讀寫EEPROM結束,高電平有效。由於一個字塊為32個位,即四個字節,所以狀態機在讀一個字塊時,Ee_en信號應四次有效。
程序採用Xilinx Spartan-3系列X3S200晶片進行綜合下載。綜合後共佔用771個slice,34個IOB,系統最快運行速度為79.038MHz,遠高於狀態機的工作頻率3.39MHz,滿足VICC狀態機的時序要求。
本設計應用於符合ISO/IEC15693標準的RFID標籤晶片的數字部分,具有可靠性高、結構簡單等特點。由於其它標準的RFID標籤晶片的數字部分功能與ISO/IEC15693 RFID標籤晶片較為類似,因此,對狀態機部分做適當的修改,可應於其它標準的RFID標籤晶片。
1