王丹,張紅雨
(電子科技大學(xué) 電子工程學(xué)院,成都611731)
普通的UHF讀寫器主控芯片使用FPGA較多,其優(yōu)點(diǎn)是FPGA對時(shí)序邏輯處理速度快,使用HDL語言很容易實(shí)現(xiàn)協(xié)議的編碼與解碼,但FPGA芯片本身很少具備串口、網(wǎng)口等通信接口模塊,功能擴(kuò)展較麻煩。由于ARM9芯片集成了很多擴(kuò)展接口,同時(shí)進(jìn)行操作系統(tǒng)移植等更高層次的設(shè)計(jì)也變得很容易,但對時(shí)序邏輯處理較難。因而本文提出了基于ARM9的UHF RFID讀寫器基帶編解碼方法,并加以實(shí)現(xiàn)。
UHF RFID國際標(biāo)準(zhǔn)協(xié)議規(guī)定讀寫器到電子標(biāo)簽的通信應(yīng)采用 DSB-ASK、SSB-ASK 或者 PR-ASK 調(diào)制方式。本文使用ARM9芯片S3C2440的PWM(脈寬調(diào)制)控制模塊進(jìn)行PIE編碼,通過編碼信號(hào)控制射頻開關(guān)實(shí)現(xiàn)OOK調(diào)制。電子標(biāo)簽接收到命令后反向散射副載波應(yīng)答,經(jīng)過射頻模塊的天線接收后被解調(diào)電路還原成MILLER2數(shù)據(jù)。構(gòu)造 MILLER2解碼狀態(tài)機(jī),使用S3C2440的外部中斷對MILLER2時(shí)序序列進(jìn)行上升沿捕捉,捕捉到的兩次中斷的時(shí)間間隔作為狀態(tài)機(jī)輸入,進(jìn)而解調(diào)出標(biāo)簽反射回來的數(shù)據(jù)。系統(tǒng)的硬件框圖如圖1所示。
圖1 系統(tǒng)硬件框圖
讀寫器射頻模塊的工作流程為:發(fā)送命令時(shí),PIE編碼電平控制射頻芯片開關(guān),當(dāng)開關(guān)開啟時(shí)輸出射頻載波,關(guān)閉則不輸出,以達(dá)到OOK調(diào)制載波的目的。接收機(jī)采用零中頻接收機(jī)方案,直接對天線接收到的標(biāo)簽反向散射信號(hào)進(jìn)行解調(diào),解調(diào)完畢得到相位相差90°的I、Q兩路信號(hào),通過差分放大器放大處理后,輸出到比較器,經(jīng)過比較后電路輸出MIILER2編碼時(shí)序信號(hào)。
EPC GNE2協(xié)議規(guī)定UHF讀卡器向標(biāo)簽發(fā)送命令時(shí),數(shù)據(jù)應(yīng)采用PIE編碼。PIE碼通過高低電平的時(shí)間長度不同來規(guī)定數(shù)據(jù)是“1”還是“0”。協(xié)議使用Tari代表數(shù)據(jù)“0”,時(shí)間長度在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。
圖2 PIE數(shù)據(jù)“1”和“0”的編碼方式
協(xié)議規(guī)定,完整的PIE碼需在有效數(shù)據(jù)前加上前同步碼或幀同步碼。前同步碼由定界符、Tari、RTcal以及TRcal這4段組成,用在Query命令上。幀同步碼省去了TRcal而直接由前三項(xiàng)組成,用在其他命令上。前同步碼示意如圖3所示。
圖3 PIE前同步碼
S3C2440有5個(gè)16位的定時(shí)器,其中定時(shí)器1~4具有PWM(脈寬調(diào)制)功能,定時(shí)器使用經(jīng)過分頻后的系統(tǒng)時(shí)鐘PCLK作為時(shí)鐘輸入。本設(shè)計(jì)中100MHz的PCLK經(jīng)過2分頻得到50MHz頻率的定時(shí)器輸入時(shí)鐘,定時(shí)器每計(jì)數(shù)一次耗時(shí)0.02μs。定時(shí)器使用兩個(gè)16位的緩沖寄存器TCNTB和TCMPB來實(shí)現(xiàn)PWM功能,TCNTB為一次PWM輸出計(jì)數(shù)次數(shù),采用遞減的方式計(jì)數(shù),當(dāng)計(jì)數(shù)減為TCMPB的時(shí)候,PWM輸出電平反轉(zhuǎn)。以數(shù)據(jù)“0”為例,其脈沖總寬度為6.4μs,低電平持續(xù)時(shí)間3.2μs,則可計(jì)算出 TCNTB=6.4/0.02=320次,TCMTB=3.2/0.02=160次。
為實(shí)現(xiàn)連續(xù)的PWM輸出,需要讓定時(shí)器工作在自動(dòng)重載模式,即當(dāng)定時(shí)器計(jì)數(shù)器減為0的時(shí)候,在定時(shí)器中斷處理函數(shù)里更新TCNTB及TCNMPB,讓定時(shí)器重新開始一次脈寬輸出。定時(shí)器1初始化時(shí)經(jīng)過以下步驟:
①TCNMB以及TCMPB寄存器賦非零初值;
②TCON中人工裝載位配置為1,TCNTB和TCMPB更新到內(nèi)部計(jì)數(shù)器;
③TCON中自動(dòng)重載位配置為1,為實(shí)現(xiàn)連續(xù)的PWM功能;
④TCON中輸出翻轉(zhuǎn)位配置為1,脈沖以高電平開始;
⑤TCON置為啟動(dòng)位;
⑥TCON設(shè)置關(guān)閉人工裝載,定時(shí)器開始啟動(dòng)。
經(jīng)過以上配置后,將定時(shí)器I/O引腳配置為PWM輸出模式就可以進(jìn)行PWM輸出。以一個(gè)Query命令的編碼為例,Query命令是由前同步碼和22位數(shù)據(jù)構(gòu)成,先將這22位數(shù)據(jù)計(jì)算好并保存在全局?jǐn)?shù)組data[]中,發(fā)送Query命令時(shí)開啟定時(shí)器1并允許定時(shí)器1中斷,在中斷處理函數(shù)里面更新TCNTB以及TCMPB的值來決定下一個(gè)脈沖的PWM輸出。編碼程序流程如圖4所示。
圖4 Query命令編碼程序流程
正確的Query命令會(huì)讓標(biāo)簽返回16位偽隨機(jī)數(shù)RN16。為了測試Query命令是否發(fā)送正確,使用示波器觀察比較器輸出,如果有MILLER2編碼的16位數(shù)據(jù)輸出,則表明Query命令正確。使用示波器觀察的結(jié)果如圖5所示,可以看出是MILLER2編碼的序列,詳細(xì)分析其位數(shù)后確認(rèn)是16位,驗(yàn)證了PIE編碼的正確性。
圖5 示波器上觀察比較器RN16輸出
EPC GEN2協(xié)議中規(guī)定標(biāo)簽反向散射的數(shù)據(jù)應(yīng)該采用FM0或者M(jìn)ILLER的編碼方式。MILLER定義在兩個(gè)數(shù)據(jù)“0”之間變換相位,在數(shù)據(jù)“1”中間放置一個(gè)相轉(zhuǎn)化,MILLER2碼則表示每一位數(shù)據(jù)重復(fù)兩個(gè)副載波周期。完整的MILLER2編碼,需要在有效數(shù)據(jù)前加上前同步碼。前同步碼可編程選擇格式,在Query命令中將M和Trext這兩位設(shè)置為1,選擇前同步碼由16個(gè)數(shù)據(jù)“0”加上數(shù)據(jù)序列“101112”構(gòu)成。MILLER2數(shù)據(jù)定義和前同步碼如圖6所示。MILLER2碼每一位數(shù)據(jù)的時(shí)間長度由Tari值決定,本設(shè)計(jì)中為2個(gè)Tari(即12.8μs)。
圖6 MILLER2數(shù)據(jù)定義以及編碼狀態(tài)轉(zhuǎn)換
本文使用S3C2440的外部中斷捕捉比較器的輸出,使用單邊觸發(fā)上升沿檢測。對正確的MILLER2編碼序列進(jìn)行上升沿捕捉時(shí),兩次中斷的時(shí)間間隔有a和b兩種情況,其中a表示兩次中斷的時(shí)間間隔為Tari,即6.4μs,b表示間 隔 為 1.5Tari,即 9.6μs,據(jù) 此 繪 制 了MILLER2編碼的狀態(tài)以及狀態(tài)轉(zhuǎn)換圖。狀態(tài)共有22個(gè),其中用于前導(dǎo)碼檢測的狀態(tài)有13個(gè),用于數(shù)據(jù)檢測的有9個(gè)狀態(tài)。部分前導(dǎo)碼狀態(tài)以及全部數(shù)據(jù)狀態(tài)如圖7所示。
下面描述各個(gè)狀態(tài)的意義。
圖7 部分前導(dǎo)碼狀態(tài)以及數(shù)據(jù)狀態(tài)
s0:解碼開始,表示收到1個(gè)a間隔;
s1:前導(dǎo)碼狀態(tài)的一種,表示收到2個(gè)a間隔;
s2:表示收到3個(gè)a間隔;
s3:收到4個(gè)a間隔,s3狀態(tài)若連續(xù)收到a間隔,則仍舊歸于s3狀態(tài);
s4:表示s3收到b間隔,此時(shí)前導(dǎo)碼中的16個(gè)數(shù)據(jù)“0”解碼結(jié)束,進(jìn)入數(shù)據(jù)序列“101112”解碼狀態(tài);
s5~sa:前導(dǎo)碼中的數(shù)據(jù)序列“101112”檢測狀態(tài),依次類推,圖7中省略;
sb:前導(dǎo)碼結(jié)束狀態(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)中,當(dāng)狀態(tài)機(jī)當(dāng)前狀態(tài)為d2、d3、d6、d7、d8、d9的一種時(shí),表示收到1位有效數(shù)據(jù)。狀態(tài)轉(zhuǎn)換圖如圖8所示,狀態(tài)d2、d7只畫出了有效輸入時(shí)的轉(zhuǎn)換圖,在無效輸入時(shí)結(jié)束狀態(tài)機(jī)程序返回。
圖8 MILLER2解碼狀態(tài)轉(zhuǎn)換圖
進(jìn)行MILLER2解碼主要是把接收到的中斷時(shí)間間隔作為狀態(tài)機(jī)的輸入,在狀態(tài)機(jī)里進(jìn)行判斷和狀態(tài)轉(zhuǎn)換,解碼出有效數(shù)據(jù)。本設(shè)計(jì)中,使用上面描述的編碼方式碼發(fā)送Query命令,UHF電子標(biāo)簽收到有效命令之后反向散射采用MILLER2編碼的16位偽隨機(jī)數(shù)RN16。程序在發(fā)送完畢Query命令之后立即使能外部中斷,在外部中斷處理函數(shù)中,把中斷時(shí)間間隔保存在數(shù)組中,等接收的中斷間隔超過b或者中斷次數(shù)超過接收RN16所需要的次數(shù)后,關(guān)閉中斷。在外部程序中通過狀態(tài)機(jī)進(jìn)行解碼,解調(diào)的同時(shí)對有效位進(jìn)行計(jì)數(shù),計(jì)數(shù)器達(dá)到16位后,返回解調(diào)出來的數(shù)據(jù),否則返回0。解調(diào)程序流程如圖9所示。
圖9 解碼程序流程圖
在主函數(shù)里面循環(huán)發(fā)送Query命令并進(jìn)行MILLER2解碼,如果解碼成功則使用串口工具在上位機(jī)上打印出解調(diào)出來的RN16的值,解碼失敗則不打印。在PC上使用串口工具SecureCRT觀察到以十六進(jìn)制輸出的RN16,如圖10所示,表明MILLER2解碼成功。
圖10 解碼結(jié)果
本文提出使用ARM9進(jìn)行UHF RFID讀卡器基帶編解碼,并加以實(shí)現(xiàn)。ARM9芯片豐富的外設(shè)使該方案擁有較好的擴(kuò)展性、實(shí)用性,為進(jìn)行系統(tǒng)級別的設(shè)計(jì)打下了基礎(chǔ)。
[1]EPC global Inc.EPC Radio-Frequency Identity Protocols Class-l Gen-2UHF RFID Protocol for Communications at 860MHz-960MHz,2004.
[2]于志宏.UHF RFID讀寫器編解碼模塊的FPGA實(shí)現(xiàn)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012(10):12-15.
[3]肖菊蘭.超高頻RFID讀寫器設(shè)計(jì)[J].電子設(shè)計(jì)工程,2010(11):158-161.
[4]王振興.RFID系統(tǒng)中標(biāo)簽芯片數(shù)字部分的設(shè)計(jì)實(shí)現(xiàn)[D].天津:天津大學(xué),2008.
[5]陽璞瓊.超高頻RFID系統(tǒng)編解碼與校驗(yàn)問題的研究[D].長沙:湖南大學(xué),2009.