ARM9的超高頻讀寫(xiě)器基帶編解碼設計
3.2 解碼狀態(tài)機
本文使用S3C2440的外部中斷捕捉比較器的輸出,使用單邊觸發(fā)上升沿檢測。對正確的MILLER2編碼序列進(jìn)行上升沿捕捉時(shí),兩次中斷的時(shí)間間隔有a和b兩種情況,其中a表示兩次中斷的時(shí)間間隔為T(mén)ari,即6.4μs,b表示間隔為1.5Tari,即9.6μs,據此繪制了MILLER2編碼的狀態(tài)以及狀態(tài)轉換圖。狀態(tài)共有22個(gè),其中用于前導碼檢測的狀態(tài)有13個(gè),用于數據檢測的有9個(gè)狀態(tài)。部分前導碼狀態(tài)以及全部數據狀態(tài)如圖7所示。本文引用地址:http://dyxdggzs.com/article/201610/306001.htm
下面描述各個(gè)狀態(tài)的意義。
s0:解碼開(kāi)始,表示收到1個(gè)a間隔;
s1:前導碼狀態(tài)的一種,表示收到2個(gè)a間隔;
s2:表示收到3個(gè)a間隔;
s3:收到4個(gè)a間隔,s3狀態(tài)若連續收到a間隔,則仍舊歸于s3狀態(tài);
s4:表示s3收到b間隔,此時(shí)前導碼中的16個(gè)數據“0”解碼結束,進(jìn)入數據序列“101112”解碼狀態(tài);
s5~sa:前導碼中的數據序列“101112”檢測狀態(tài),依次類(lèi)推,圖7中省略;
sb:前導碼結束狀態(tài);
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位。
以上狀態(tài)中,當狀態(tài)機當前狀態(tài)為d2、d3、d6、d7、d8、d9的一種時(shí),表示收到1位有效數據。狀態(tài)轉換圖如圖8所示,狀態(tài)d2、d7只畫(huà)出了有效輸入時(shí)的轉換圖,在無(wú)效輸入時(shí)結束狀態(tài)機程序返回。
3.3 MILLER2解碼程序設計
進(jìn)行MILLER2解碼主要是把接收到的中斷時(shí)間間隔作為狀態(tài)機的輸入,在狀態(tài)機里進(jìn)行判斷和狀態(tài)轉換,解碼出有效數據。本設計中,使用上面描述的編碼方式碼發(fā)送Query命令,UHF電子標簽收到有效命令之后反向散射采用MILLER2編碼的16位偽隨機數RN16。程序在發(fā)送完畢Query命令之后立即使能外部中斷,在外部中斷處理函數中,把中斷時(shí)間間隔保存在數組中,等接收的中斷間隔超過(guò)b或者中斷次數超過(guò)接收RN16所需要的次數后,關(guān)閉中斷。在外部程序中通過(guò)狀態(tài)機進(jìn)行解碼,解調的同時(shí)對有效位進(jìn)行計數,計數器達到16位后,返回解調出來(lái)的數據,否則返回0。解調程序流程如圖9所示。
在主函數里面循環(huán)發(fā)送Query命令并進(jìn)行MILLER2解碼,如果解碼成功則使用串口工具在上位機上打印出解調出來(lái)的RN16的值,解碼失敗則不打印。在PC上使用串口工具SecureCRT觀(guān)察到以十六進(jìn)制輸出的RN16,如圖10所示,表明MILLER2解碼成功。
結語(yǔ)
本文提出使用ARM9進(jìn)行UHF RFID讀卡器基帶編解碼,并加以實(shí)現。ARM9芯片豐富的外設使該方案擁有較好的擴展性、實(shí)用性,為進(jìn)行系統級別的設計打下了基礎。
評論