基于FPGA的RFID讀寫器設(shè)計(jì)
摘要:設(shè)計(jì)并提出一種高頻射頻識(shí)別系統(tǒng)讀寫器設(shè)計(jì)的新方案。讀寫器采用MF RC500射頻讀寫芯片,以FPGA作為處理器,符合ISO/IECl4-443標(biāo)準(zhǔn),工作頻率為13.56MHz,讀寫距離為10cm左右。給出了讀寫器硬件系統(tǒng)的組成和軟件工作流程,對(duì)同時(shí)讀取多張卡的情況進(jìn)行了分析,實(shí)現(xiàn)了防沖突算法。
關(guān)鍵詞:射頻識(shí)別;改進(jìn)米勒編碼;曼徹斯特解碼;現(xiàn)場(chǎng)可編程門陣列
O 引言
射頻識(shí)別技術(shù)(RFID)是一種非接觸的自動(dòng)識(shí)別技術(shù),通過(guò)無(wú)線射頻的方式進(jìn)行非接觸雙向數(shù)據(jù)通信,對(duì)目標(biāo)加以識(shí)別并獲取相關(guān)數(shù)據(jù),可用來(lái)追蹤和管理幾乎所有物理對(duì)象。與條形碼識(shí)別技術(shù)、光學(xué)符號(hào)識(shí)別技術(shù)、生物識(shí)別技術(shù)、IC卡識(shí)別技術(shù)等自動(dòng)識(shí)別技術(shù)相比,RFID以它特有的無(wú)接觸、抗干擾能力強(qiáng)、可同時(shí)識(shí)別多個(gè)物體等優(yōu)點(diǎn)而逐漸成為自動(dòng)識(shí)別中最優(yōu)秀和應(yīng)用最廣泛的技術(shù)之一。在工業(yè)自動(dòng)化、商業(yè)自動(dòng)化、交通運(yùn)輸控制管理、防偽等眾多領(lǐng)域,甚至軍事用途都具有廣泛的應(yīng)用前景。RFID系統(tǒng)一般包括應(yīng)用系統(tǒng)(PC主機(jī))、讀寫器和電子標(biāo)簽三個(gè)部分。RFID電子標(biāo)簽(Tag)由微芯片與天線組成,每個(gè)標(biāo)簽具有唯一的電子編碼。標(biāo)簽附在物體上以標(biāo)識(shí)目標(biāo)對(duì)象。讀寫器(Reader)控制射頻模塊向標(biāo)簽發(fā)射讀寫信號(hào),接收標(biāo)簽的應(yīng)答,并將信息傳輸?shù)街鳈C(jī)以供處理。用戶可以通過(guò)相關(guān)控制主機(jī)或者本地終端發(fā)布命令以改變或者定制其工作模式以適應(yīng)具體應(yīng)用的需求。本文重點(diǎn)介紹讀寫器的開(kāi)發(fā)。
1 讀寫器硬件結(jié)構(gòu)設(shè)計(jì)
其設(shè)計(jì)以現(xiàn)場(chǎng)可編程門陣列(FPGA)作為處理器,MF RC500收發(fā)芯片作為射頻模塊,通過(guò)RS232串行通信模塊和電平轉(zhuǎn)換接口MAX232與上位機(jī)相連。系統(tǒng)硬件原理見(jiàn)圖1。
1.1 射頻模塊
讀寫器對(duì)標(biāo)簽的讀寫是通過(guò)發(fā)送射頻能量和對(duì)回波的接收實(shí)現(xiàn)的。射頻模塊一方面將數(shù)字模塊送來(lái)的信息完成調(diào)制放大并發(fā)送,另一方面接收回波信號(hào)將其解調(diào)成基帶信號(hào),送到數(shù)字模塊。讀寫器的RF前端子系統(tǒng)主要負(fù)責(zé)對(duì)電子標(biāo)簽數(shù)據(jù)的讀取與寫入。核心芯片MF RC500由飛利浦公司生產(chǎn),主要應(yīng)用于13.56MHz射頻信號(hào)的產(chǎn)生、調(diào)制、解調(diào)等功能。它支持ISO14443A所有的層,適用于各種基于ISO/IEC 14443A標(biāo)準(zhǔn)并且要求低成本、小尺寸、高性能以及單電源的非接觸式通信的應(yīng)用場(chǎng)合。MF RC500負(fù)責(zé)與電子標(biāo)簽的射頻通信,通過(guò)并行數(shù)字接口直接連接到處理器。內(nèi)部的發(fā)送器部分不需要增加有源電路就能直接驅(qū)動(dòng)近距離操作的天線(可達(dá)10cm)。接收器部分提供一個(gè)堅(jiān)固而有效的解調(diào)電路,用于ISOl4443A兼容的應(yīng)答器信號(hào)。
射頻接口MF RC500芯片上帶有A0、A1、A2三根地址線,用于對(duì)內(nèi)部寄存器的尋址,同時(shí)DO~D7八根數(shù)據(jù)線支持地址線、數(shù)據(jù)線復(fù)用。在本設(shè)計(jì)中不采用數(shù)據(jù)線、地址線復(fù)用的接法,采用獨(dú)立的數(shù)據(jù)線、地址線的接法。芯片內(nèi)有64個(gè)寄存器,由處理器向芯片相應(yīng)的寄存器位配置數(shù)據(jù);由處理器讀取寄存器的相應(yīng)狀態(tài)標(biāo)志來(lái)監(jiān)控芯片當(dāng)前所處的狀態(tài),從而決定下一步的操作。由于片內(nèi)的64個(gè)寄存器尋址需要6根地址線,當(dāng)采用獨(dú)立的地址線時(shí),由于地址線只有3根,支持不了64個(gè)寄存器的尋址,為此芯片采用了分頁(yè)機(jī)制。64個(gè)寄存器被分成8頁(yè),每頁(yè)8個(gè),3根地址線恰好可以實(shí)現(xiàn)對(duì)每一頁(yè)內(nèi)的8個(gè)寄存器尋址,而對(duì)于寄存器頁(yè)的選擇,需要配置Page寄存器的0、l、2位。Page寄存器的第7位用來(lái)選擇是否采用獨(dú)立的地址線,芯片復(fù)位后,Page寄存器的默認(rèn)值為80H,即默認(rèn)采用獨(dú)立的地址線尋址方式,Page寄存器的0、l、2位僅
當(dāng)?shù)?位為1時(shí)才有效。芯片上的雙向數(shù)據(jù)線DO~D7同處理器的I/O口直接相連,用來(lái)實(shí)現(xiàn)芯片間數(shù)據(jù)的雙向并行傳輸。
1.2 天線
天線在整個(gè)系統(tǒng)中起著重要的作用,在非接觸式卡與讀寫器之間的能量與數(shù)據(jù)傳遞要通過(guò)天線線圈產(chǎn)生的磁通量實(shí)現(xiàn)??梢赃x擇2種不同的天線連接到讀卡器上:50 Ω匹配的天線或者直接匹配的天線。本方案中采用的是YW-300天線,工作距離可以達(dá)到10cm。
1.3 數(shù)字模塊
數(shù)字模塊由處理器、存儲(chǔ)器組成。處理器的功能有:實(shí)現(xiàn)與PC機(jī)通信,接收PC機(jī)命令并完成解析;將送來(lái)的EPC卡號(hào)加算CRC校驗(yàn)上傳PC機(jī);解決多卡碰撞,實(shí)現(xiàn)多卡讀?。粚?shí)現(xiàn)對(duì)射頻模塊的鎖相環(huán)頻率控制以及功率控制。
FPGA的工作過(guò)程:上電復(fù)位后,接收上位機(jī)初始化配置命令和數(shù)據(jù),進(jìn)行相應(yīng)配置;若有命令傳送過(guò)來(lái),則通過(guò)接口模塊接收上位機(jī)傳送過(guò)來(lái)的命令;命令接收完后,進(jìn)入指令分析狀態(tài),對(duì)接收到的命令進(jìn)行分析判斷。
在主控狀態(tài)機(jī)的控制下,發(fā)送模塊將把命令和內(nèi)容組成數(shù)據(jù)塊,進(jìn)行基帶編碼、循環(huán)冗余校驗(yàn)生成,并打包成符合協(xié)議規(guī)定的數(shù)據(jù)幀,傳送給射頻收發(fā)模塊,由其完成對(duì)信號(hào)的調(diào)制、放大、發(fā)射。電子標(biāo)簽根據(jù)接收的數(shù)據(jù)幀,進(jìn)行指令分析,根據(jù)指令執(zhí)行相應(yīng)的功能。接收模塊檢測(cè)回波數(shù)據(jù),當(dāng)檢測(cè)到回波數(shù)據(jù)的幀頭有效時(shí)接收數(shù)據(jù)。同時(shí)將接收到的數(shù)據(jù)送CRC校驗(yàn)?zāi)K校驗(yàn),校驗(yàn)成功即產(chǎn)生CRC OK=‘1’表示讀卡成功。
1.3.1 發(fā)送編碼模塊
在ISO/IECl4443 Type A協(xié)議中,讀寫器到標(biāo)簽的通信采用改進(jìn)的Miller編碼方式,其標(biāo)準(zhǔn)中定義了三種序列:(A)經(jīng)64個(gè)時(shí)鐘后應(yīng)有一個(gè)凹槽;(B)1個(gè)位內(nèi)(128個(gè)時(shí)鐘)沒(méi)有調(diào)制;(c)1個(gè)位起始時(shí)有一個(gè)凹槽。這三種序列用于進(jìn)一步編碼。邏輯1用序列(A)表示。邏輯0通常用序列(B)表示,但在a.有兩個(gè)或兩個(gè)以上連續(xù)的0時(shí),從第二個(gè)0開(kāi)始要用序列(c)來(lái)表示所有相連的0;b.直接與起始幀相連的所有0用序列(c)表示。通信開(kāi)始用序列(c)表示。通信結(jié)束用邏輯0跟序列(B)表示。無(wú)信息用至少兩個(gè)序列(B)表示。如圖2所示改進(jìn)的Miller編碼波形。
從波形中可以看出,若輸入1,則64個(gè)時(shí)鐘后輸出一個(gè)脈沖,若輸入0,則128個(gè)時(shí)鐘內(nèi)沒(méi)有脈沖輸出,而當(dāng)有兩個(gè)連續(xù)的0輸入時(shí),則在第二個(gè)0起始處輸出一個(gè)脈沖。通過(guò)對(duì)照理論波形,可以看出編碼完全正確,符合設(shè)計(jì)要求。
1.3.2 接收解碼模塊
在射頻收發(fā)模塊中進(jìn)行解調(diào)處理而得到的基帶信號(hào)將被送入FPGA進(jìn)行Manchester解碼、CRC校驗(yàn),并在主控狀態(tài)機(jī)的控制下通過(guò)RS232將數(shù)據(jù)傳送給上位機(jī)。在ISO/IECl4443 Type A協(xié)議中,電子標(biāo)簽到讀寫器的通信采用Manchester編碼方式,其編碼規(guī)則是:某比特位的值由該比特長(zhǎng)度內(nèi)半個(gè)比特周期時(shí)電平的變化來(lái)表示,負(fù)跳變表示‘1’,正跳變表示‘0’。Manchester解碼即對(duì)Manchester編碼信號(hào)位的1/4和3/4處采樣,若采樣結(jié)果為(1,0),則解碼數(shù)據(jù)為1;若采樣結(jié)果為(0,1),則解碼數(shù)據(jù)為0。如圖3所示Manchester解碼波形。輸入數(shù)據(jù)為
l00100l1,解碼所得數(shù)據(jù)為147,用二進(jìn)制表示也即100100ll,可見(jiàn)解碼完全正確,符合設(shè)計(jì)要求。
2 系統(tǒng)軟件設(shè)計(jì)
2.1 主程序
讀寫器上電復(fù)位后,對(duì)各功能模塊進(jìn)行初始化,然后發(fā)出詢卡/應(yīng)答指令尋找有效范圍內(nèi)的電子標(biāo)簽。電子標(biāo)簽在讀寫器的閱讀范圍外為無(wú)電狀態(tài),不能進(jìn)行任何操作。當(dāng)進(jìn)入讀寫器的載波有效范圍內(nèi)時(shí),電子標(biāo)簽上電復(fù)位,進(jìn)入等待接收詢卡/應(yīng)答指令的狀態(tài)。收到詢卡
指令后,電子標(biāo)簽會(huì)發(fā)出自己獨(dú)有的ID碼,讀寫器根據(jù)收到的IDR碼發(fā)出選卡指令,選擇該標(biāo)簽進(jìn)行下一步的通信。
在應(yīng)用中可能會(huì)遇到多個(gè)電子標(biāo)簽同時(shí)在讀寫器的有效工作范圍內(nèi)的情況,這些標(biāo)簽就會(huì)在收到詢卡指令后,同時(shí)發(fā)出自己的ID碼時(shí)發(fā)生互相沖突,因此就要求系統(tǒng)能夠具有防沖突的機(jī)制,才能從多個(gè)標(biāo)簽中選擇出其中一個(gè)。主程序流程見(jiàn)圖4。
2.2 防碰撞算法
A型射頻卡采用了ISO/IECl4443系列協(xié)議,配合讀寫器共同實(shí)現(xiàn)防碰撞的快速交互通信。為了從多張電子標(biāo)簽中快速識(shí)別出一張來(lái)單獨(dú)進(jìn)行通信,A型卡采用了位碰撞監(jiān)測(cè)協(xié)議實(shí)現(xiàn)防碰撞過(guò)程,即閱讀器對(duì)卡返回的唯一識(shí)別號(hào)(即UID)數(shù)據(jù)幀中的每一位進(jìn)行沖突監(jiān)測(cè)。當(dāng)多張A型射頻卡在同一時(shí)刻向讀寫器傳送UID數(shù)據(jù)幀時(shí),一定會(huì)在同時(shí)返回的某一位上有不同的位值。根據(jù)Manchester編碼規(guī)則,這一位正負(fù)邊沿抵消了,故讀寫器無(wú)法識(shí)別的該數(shù)據(jù)位即為碰撞位。碰撞位監(jiān)測(cè)到后馬上啟動(dòng)防碰撞過(guò)程。讀寫器主動(dòng)地發(fā)出一系列命令數(shù)據(jù)幀,主要是ANTICOLLISION命令和SELECT命令。射頻卡被動(dòng)地響應(yīng)每一條指令完成交互的會(huì)話過(guò)程。
3 結(jié)束語(yǔ)
本設(shè)計(jì)在Modelsim SE6.1和Altera Quartus II 7.2中進(jìn)行了功能仿真和綜合,結(jié)果表明能夠滿足設(shè)計(jì)的需求。