引言
普通的UHF讀寫器主控芯片使用FPGA較多,其優(yōu)點是FPGA對時序邏輯處理速度快,使用HDL語言很容易實現(xiàn)協(xié)議的編碼與解碼,但FPGA芯片本身很少具備串口、網(wǎng)口等通信接口模塊,功能擴展較麻煩。由于ARM9芯片集成了很多擴展接口,同時進行操作系統(tǒng)移植等更高層次的設計也變得很容易,但對時序邏輯處理較難。因而本文提出了基于ARM9的UHF RFID讀寫器基帶編解碼方法,并加以實現(xiàn)。
1 基本原理
UHF RFID國際標準協(xié)議規(guī)定讀寫器到電子標簽的通信應采用DSB—ASK、SSB—ASK或者PR—ASK調制方式。本文使用ARM9芯片S3C2440的PWM(脈寬調制)控制模塊進行PIE編碼,通過編碼信號控制射頻開關實現(xiàn)OOK調制。電子標簽接收到命令后反向散射副載波應答,經(jīng)過射頻模塊的天線接收后被解調電路還原成MILLER2數(shù)據(jù)。構造MILLER2解碼狀態(tài)機,使用S3C2440的外部中斷對MILLER2時序序列進行上升沿捕捉,捕捉到的兩次中斷的時間間隔作為狀態(tài)機輸入,進而解調出標簽反射回來的數(shù)據(jù)。系統(tǒng)的硬件框圖如圖1所示。
讀寫器射頻模塊的工作流程為:發(fā)送命令時,PIE編碼電平控制射頻芯片開關,當開關開啟時輸出射頻載波,關閉則不輸出,以達到OOK調制載波的目的。接收機采用零中頻接收機方案,直接對天線接收到的標簽反向散射信號進行解調,解調完畢得到相位相差90°的I、Q兩路信號,通過差分放大器放大處理后,輸出到比較器,經(jīng)過比較后電路輸出MILLER2編碼時序信號。
2 PIE編碼
2.1 PIE碼簡介
EPC GNE2協(xié)議規(guī)定UHF讀卡器向標簽發(fā)送命令時,數(shù)據(jù)應采用PIE編碼。PIE碼通過高低電平的時間長度不同來規(guī)定數(shù)據(jù)是“1”還是“0”。協(xié)議使用Tari代表數(shù)據(jù)“0”,時間長度在6.25~25μs范圍內(nèi),容差為±1%,數(shù)據(jù)“1”的寬度在為1.5Tari~2.5Tari,如圖2所示。本次編碼中,Tari值為6.4μs,數(shù)據(jù)“1”的長度為11.4μs,PW的長度為3.2μs。
協(xié)議規(guī)定,完整的PIE碼需在有效數(shù)據(jù)前加上前同步碼或幀同步碼。前同步碼由定界符、Tari、RTcal以及TRcal這4段組成,用在Query命令上。幀同步碼省去了TRcal而直接由前三項組成,用在其他命令上。前同步碼示意如圖3所示。
2.2 PWM實現(xiàn)PIE編碼
S3C2440有5個16位的定時器,其中定時器1~4具有PWM(脈寬調制)功能,定時器使用經(jīng)過分頻后的系統(tǒng)時鐘PCLK作為時鐘輸入。本設計中100 MHz的PCLK經(jīng)過2分頻得到50 MHz頻率的定時器輸入時鐘,定時器每計數(shù)一次耗時0.02μs。定時器使用兩個16位的緩沖寄存器TCNTB和TCMPB來實現(xiàn)PWM功能,TCNTB為一次PWM輸出計數(shù)次數(shù),采用遞減的方式計數(shù),當計數(shù)減為TCMPB的時候,PWM輸出電平反轉。以數(shù)據(jù)“0”為例,其脈沖總寬度為6.4μs,低電平持續(xù)時間3.2 μs,則可計算出TCNTB=6.4/0.02=320次,TCMTB=3.2/0.02=160次。
為實現(xiàn)連續(xù)的PWM輸出,需要讓定時器工作在自動重載模式,即當定時器計數(shù)器減為0的時候,在定時器中斷處理函數(shù)里更新TCNTB及TCNMPB,讓定時器重新開始一次脈寬輸出。定時器1初始化時經(jīng)過以下步驟:
①TCNMB以及TCMPB寄存器賦非零初值;
②TCON中人工裝載位配置為1,TCNTB和TCMPB更新到內(nèi)部計數(shù)器;
③TCON中自動重載位配置為1,為實現(xiàn)連續(xù)的PWM功能;
④TCON中輸出翻轉位配置為1,脈沖以高電平開始;
⑤TCON置為啟動位;
⑥TCON設置關閉人工裝載,定時器開始啟動。
經(jīng)過以上配置后,將定時器I/O引腳配置為PWM輸出模式就可以進行PWM輸出。以一個Query命令的編碼為例,Query命令是由前同步碼和22位數(shù)據(jù)構成,先將這22位數(shù)據(jù)計算好并保存在全局數(shù)組data[]中,發(fā)送Query命令時開啟定時器1并允許定時器1中斷,在中斷處理函數(shù)里面更新TCNTB以及TCMPB的值來決定下一個脈沖的PWM輸出。編碼程序流程如圖4所示。
正確的Query命令會讓標簽返回16位偽隨機數(shù)RN16。為了測試Query命令是否發(fā)送正確,使用示波器觀察比較器輸出,如果有MILLER2編碼的16位數(shù)據(jù)輸出,則表明Query命令正確。使用示波器觀察的結果如圖5所示,可以看出是MILLER2編碼的序列,詳細分析其位數(shù)后確認是16位,驗證了PIE編碼的正確性。
3 MILLER2解碼
3.1 MILLER2碼介紹
EPC GEN2協(xié)議中規(guī)定標簽反向散射的數(shù)據(jù)應該采用FM0或者MILLER的編碼方式。MILLER定義在兩個數(shù)據(jù)“0”之間變換相位,在數(shù)據(jù)“1”中間放置一個相轉化,MILLER2碼則表示每一位數(shù)據(jù)重復兩個副載波周期。完整的MILLER2編碼,需要在有效數(shù)據(jù)前加上前同步碼。前同步碼可編程選擇格式,在Query命令中將M和Trext這兩位設置為1,選擇前同步碼由16個數(shù)據(jù)“0”加上數(shù)據(jù)序列“101112”構成。MILLER2數(shù)據(jù)定義和前同步碼如圖6所示。MILLER2碼每一位數(shù)據(jù)的時間長度由Tari值決定,本設計中為2個Tari(即1 2.8μs)。
3.2 解碼狀態(tài)機
本文使用S3C2440的外部中斷捕捉比較器的輸出,使用單邊觸發(fā)上升沿檢測。對正確的MILLER2編碼序列進行上升沿捕捉時,兩次中斷的時間間隔有a和b兩種情況,其中a表示兩次中斷的時間間隔為Tari,即6.4μs,b表示間隔為1.5Tari,即9.6μs,據(jù)此繪制了MILLER2編碼的狀態(tài)以及狀態(tài)轉換圖。狀態(tài)共有22個,其中用于前導碼檢測的狀態(tài)有13個,用于數(shù)據(jù)檢測的有9個狀態(tài)。部分前導碼狀態(tài)以及全部數(shù)據(jù)狀態(tài)如圖7所示。
下面描述各個狀態(tài)的意義。
s0:解碼開始,表示收到1個a間隔;
s1:前導碼狀態(tài)的一種,表示收到2個a間隔;
s2:表示收到3個a間隔;
s3:收到4個a間隔,s3狀態(tài)若連續(xù)收到a間隔,則仍舊歸于s3狀態(tài);
s4:表示s3收到b間隔,此時前導碼中的16個數(shù)據(jù)“0”解碼結束,進入數(shù)據(jù)序列“101112”解碼狀態(tài);
s5~sa:前導碼中的數(shù)據(jù)序列“101112”檢測狀態(tài),依次類推,圖7中省略;
sb:前導碼結束狀態(tài);
d1:收到數(shù)據(jù)“0”的2/4位;
d2:收到完整數(shù)據(jù)“0”以及數(shù)據(jù)“1”的1/4位;
d3:收到完整數(shù)據(jù)“0”以及數(shù)據(jù)“0”的1/4位;
d4:收到數(shù)據(jù)“1”的3/4位;
d5:收到數(shù)據(jù)“0”的3/4位;
d6:收到完整數(shù)據(jù)“1”以及數(shù)據(jù)“0”或者“1”的1/4位;
d7:收到完整數(shù)據(jù)“0”以及數(shù)據(jù)“1”的1/4位;
d8:收到完整數(shù)據(jù)“1”;
d9:收到完整數(shù)據(jù)“0”以及數(shù)據(jù)“0”的2/4位。
以上狀態(tài)中,當狀態(tài)機當前狀態(tài)為d2、d3、d6、d7、d8、d9的一種時,表示收到1位有效數(shù)據(jù)。狀態(tài)轉換圖如圖8所示,狀態(tài)d2、d7只畫出了有效輸入時的轉換圖,在無效輸入時結束狀態(tài)機程序返回。
3.3 MILLER2解碼程序設計
進行MILLER2解碼主要是把接收到的中斷時間間隔作為狀態(tài)機的輸入,在狀態(tài)機里進行判斷和狀態(tài)轉換,解碼出有效數(shù)據(jù)。本設計中,使用上面描述的編碼方式碼發(fā)送Query命令,UHF電子標簽收到有效命令之后反向散射采用MILLER2編碼的16位偽隨機數(shù)RN16。程序在發(fā)送完畢Query命令之后立即使能外部中斷,在外部中斷處理函數(shù)中,把中斷時間間隔保存在數(shù)組中,等接收的中斷間隔超過b或者中斷次數(shù)超過接收RN16所需要的次數(shù)后,關閉中斷。在外部程序中通過狀態(tài)機進行解碼,解調的同時對有效位進行計數(shù),計數(shù)器達到16位后,返回解調出來的數(shù)據(jù),否則返回0。解調程序流程如圖9所示。
在主函數(shù)里面循環(huán)發(fā)送Query命令并進行MILLER2解碼,如果解碼成功則使用串口工具在上位機上打印出解調出來的RN16的值,解碼失敗則不打印。在PC上使用串口工具SecureCRT觀察到以十六進制輸出的RN16,如圖10所示,表明MILLER2解碼成功。
結語
本文提出使用ARM9進行UHF RFID讀卡器基帶編解碼,并加以實現(xiàn)。ARM9芯片豐富的外設使該方案擁有較好的擴展性、實用性,為進行系統(tǒng)級別的設計打下了基礎。
編輯:jq
-
FPGA
+關注
關注
1625文章
21636瀏覽量
601315 -
EPC
+關注
關注
1文章
98瀏覽量
30317 -
FM0
+關注
關注
0文章
4瀏覽量
8238
發(fā)布評論請先 登錄
相關推薦
評論