RFID電子標簽卡的防碰撞模塊設計
RFID(RadioFrequency IdentifiCation,射頻識別)電子標簽是一種把天線和IC封裝到塑料基片上的新型無源電子卡片;具有數據存儲量大、無線無源、小巧輕便、使用壽命長、防水、防磁和安全防偽等特點;是近幾年發展起來的新型產品,是未來幾年代替條形碼走進“物聯網”時代的關鍵技術之一。閱讀器(即PCE,機)和電子標簽(即PICC卡)之間通過電磁場感應進行能量、時序和數據的無線傳輸,如圖l所示。在PCD機天線的可識別范圍內,可能會同時出現多張PICC卡。如何準確識別每張卡,是A型
PICC卡的防碰撞(即anticollision,也叫防沖突)技術要解決的關鍵問題。
1 A型卡防碰撞的工作原理
A型PICC卡采用了ISO/IECl4443系列協議,配合PCD機共同實現防碰撞的快速交互通信。為了從多張PICC卡中快速識別出一張來單獨進行通信,A型卡采用了位碰撞監測協議實現防碰撞過程,即閱讀器對卡返回的唯一識別號(即UID)數據幀中的每一位進行沖突監測。當多張A型PICC卡在同一時刻向PCD機傳送UID數據幀時,一定會在同時返回的某一位上有不同的位值。根據Manchester編碼規則,這一位正負邊沿抵消了,故PCD機無法識別的該數據位即為碰撞位。碰撞位監測到后馬上啟動防碰撞過程。PCD機主動地發出一系列命令數據幀(即下傳),主要是ANTICOLLISION命令和SEELECT命令。PICC卡被動地響應每一條指令(即上傳)完成交互的會話過程。
對于ANTICOLLISION命令,如果PICC卡本身固有的UID CLn和命令中所帶的UID CLn數據位相等,則發送UIDCLn的其余位;否則,不發送響應.根據協議規定,ANTICOLLISION命令(即第l部分:下傳數據)和PICC卡的響應(即第2部分:上傳數據)組合成一個防碰撞幀.而且防碰撞幀的數據位總數為56位。16≤下傳數據位數≤55;l≤上傳數據位數≤40。防碰撞幀舉例如圖2所示。由于56位的防碰撞幀可以在任意位置上分開,因此分兩種情況:在一個完整的數據字節之后分開,則在第1部分的最后一個數據位之后有一個校驗位;在一個數據字節內分開,則在第1部分的最后一個數據位之后不加校驗位。情況1和情況2的不同分開方法如圖2所示。
對于SELECT命令,如果PICC卡內固有的UIDCLn和命令中的UID CLn相等,則發送SAK幀,否則不發送響應。
2 防碰撞模塊的設計
2.1 引腳定義
防碰撞模塊的外部信號引腳定義及其在卡中與其他模塊的連接如圖3所示。
防碰撞模塊外部信號定義的VHDL代碼如下。
entity ANTICOLLICSION_BLOCK is port
(clk:in std_logic;―― 時鐘信號
reset:in steL_logic;――復位信號
rxd:in std_logic;一一外部數據串行輸入
active:in std_logic;――外部數據輸入的狀態
Csn_fb:in std_logic_vector(7 downto 0) ―― 來自ROM的并行數據
Csn_full:in std_logic;――ROM接口中的輸出Latch“滿”
Rd_csn:out std_logic;一一允許讀ROM
Txd:out std_logic;一一數據串行輸出
Txd_active:out std_logic--一數據輸出的狀態
);
end ANTiCOLLlCsIoN_BLOCK;
2.2 模塊劃分
防碰撞模塊主要分為4個部分:數據接收模塊(A)、讀ROM模塊(B)和數據比較(C)發送模塊(D),如圖4所示。A的作用是:接收PCD機發送的命令信號,從rxd引腳串行輸入后對每個字節進行校驗。并進行串并轉換,按字節逐個存入7個Latch中。B的作用是:從ROM接口模塊中讀出卡內固有的UID CLn,按字節存入4個Latch后,計算UIDCLn的4個字節的異或值(即卡的BCC字節),并存入鎖存器。C和D的作用是:比較PCD機命令中的UIDCL.和卡的UIDCLn,并根據比較結果決定是否輸出響應.如果比較結果相同,則根據命令的類型(ANTICOLLISION命令或SELECT命令)從txd引腳串行輸出不同的響應數據。由于篇幅所限,后面主要介紹數據的發送模塊是如何設計實現的。
2.3 發送模塊的設計
數據發送模塊的設計實現如圖5所示。
2.3.1 實現對ANTICOLLISl0N命令的響應
(1)輸出數據txd產生模塊的設計
當來自PCD機的指令數據接收完畢(即Data_input_end=“1”)和讀卡內ROM的UID數據結束(即Csn_input_end=“l”)后,判別器啟動位計數器和字計數器來控制數據比較模塊,逐個比較Latch中的數據.比較結果相等(即Bit_not_match=“0”)時,令位計數器停止計數一個時鐘周期,此時字計數器和位計數器的值仍然分別等于NVB的高4位和低4位。以圖2情況1為例,字計數器值(即Byte_num)為2H,位計數器值(即Bit_num)為5H,輸出信號產生模塊從txd引腳發送起始位“0”;根據字計數器地址,從卡的UID CLn和BCC中選取字節,輸出數據產生模塊在Bit_num為0H~7H時,發送該字節的0~7位。在Bit_num為8H時,計算并發送該字節的奇校驗位;當字計數器值為7H,位計數器值為OH時,表示所有的剩余UID CLn數據位和BCC已全部發送,此時發送結束位。
(2)輸出狀態Txd__active產生模塊的設計
在比較結果相等(即Bit_not_matCh_“l”)時,令輸出狀態信號Txd_active變為“l”,表明發送開始,在Bytenum為7H,Bit_num為lH時,變為“0”,表明發送結束。
2.3.2 實現對SELECT命令的響應
(1)輸出數據txd產生模塊設計
在比較結果相等時,輸出起始位“0”,并且令位計數器停止計數一個時鐘周期,此時Bytc_num為7H,Bit_num為OH。在接下來的8個時鐘周期里,即Bytc_num為7H,Bit_num為O~7H時,串行輸出SAK幀,在Bit_num為8H時,輸出奇校驗位.接著Byte_num變為8H,Bitnum變為OH,此時輸出結束位“O”。
(2)輸出狀態.Txd_active產生模塊設計
令輸出狀態信號Txd_active在比較結果相等時變為“l”,在Byte_num為8H。Bit_num為1H時變為“O”。
3 仿真結果分析
3.1 防碰撞模塊對ANTICOLLISION命令的響應
在數據線rxd上設置一串數據,與圖情況2中下傳數據相同,其中定義幀頭S為“10”和幀尾E為“0l”。啟動Maxplus仿真器,得到輸出信號的波形,如圖6所示。對照圖2情況2可見,在txd線上得到的輸出數據和圖2情況2中上傳數據(即UID CLn的其余位)相同。說明設計的防碰撞模塊對ANTICOLLISION命令的響應是正確的。
3.2 防碰撞模塊對SELECT命令的響應
在輸入數據線rxd上設置如圖7所示的一串數據。由圖8可見,輸出數據線txd上的數據為“S00000000|1|E,這是正確的SAK響應。說明設計的
評論