ARM9的超高頻讀寫器基帶編解碼設計
3.2 解碼狀態機
本文使用S3C2440的外部中斷捕捉比較器的輸出,使用單邊觸發上升沿檢測。對正確的MILLER2編碼序列進行上升沿捕捉時,兩次中斷的時間間隔有a和b兩種情況,其中a表示兩次中斷的時間間隔為Tari,即6.4μs,b表示間隔為1.5Tari,即9.6μs,據此繪制了MILLER2編碼的狀態以及狀態轉換圖。狀態共有22個,其中用于前導碼檢測的狀態有13個,用于數據檢測的有9個狀態。部分前導碼狀態以及全部數據狀態如圖7所示。本文引用地址:http://cqxgywz.com/article/201610/306001.htm

下面描述各個狀態的意義。
s0:解碼開始,表示收到1個a間隔;
s1:前導碼狀態的一種,表示收到2個a間隔;
s2:表示收到3個a間隔;
s3:收到4個a間隔,s3狀態若連續收到a間隔,則仍舊歸于s3狀態;
s4:表示s3收到b間隔,此時前導碼中的16個數據“0”解碼結束,進入數據序列“101112”解碼狀態;
s5~sa:前導碼中的數據序列“101112”檢測狀態,依次類推,圖7中省略;
sb:前導碼結束狀態;
d1:收到數據“0”的2/4位;
d2:收到完整數據“0”以及數據“1”的1/4位;
d3:收到完整數據“0”以及數據“0”的1/4位;
d4:收到數據“1”的3/4位;
d5:收到數據“0”的3/4位;
d6:收到完整數據“1”以及數據“0”或者“1”的1/4位;
d7:收到完整數據“0”以及數據“1”的1/4位;
d8:收到完整數據“1”;
d9:收到完整數據“0”以及數據“0”的2/4位。
以上狀態中,當狀態機當前狀態為d2、d3、d6、d7、d8、d9的一種時,表示收到1位有效數據。狀態轉換圖如圖8所示,狀態d2、d7只畫出了有效輸入時的轉換圖,在無效輸入時結束狀態機程序返回。

3.3 MILLER2解碼程序設計
進行MILLER2解碼主要是把接收到的中斷時間間隔作為狀態機的輸入,在狀態機里進行判斷和狀態轉換,解碼出有效數據。本設計中,使用上面描述的編碼方式碼發送Query命令,UHF電子標簽收到有效命令之后反向散射采用MILLER2編碼的16位偽隨機數RN16。程序在發送完畢Query命令之后立即使能外部中斷,在外部中斷處理函數中,把中斷時間間隔保存在數組中,等接收的中斷間隔超過b或者中斷次數超過接收RN16所需要的次數后,關閉中斷。在外部程序中通過狀態機進行解碼,解調的同時對有效位進行計數,計數器達到16位后,返回解調出來的數據,否則返回0。解調程序流程如圖9所示。

在主函數里面循環發送Query命令并進行MILLER2解碼,如果解碼成功則使用串口工具在上位機上打印出解調出來的RN16的值,解碼失敗則不打印。在PC上使用串口工具SecureCRT觀察到以十六進制輸出的RN16,如圖10所示,表明MILLER2解碼成功。

結語
本文提出使用ARM9進行UHF RFID讀卡器基帶編解碼,并加以實現。ARM9芯片豐富的外設使該方案擁有較好的擴展性、實用性,為進行系統級別的設計打下了基礎。







評論