基于ARM的RFID閱讀器設(shè)計(jì)
文章出處:http://www.luckydriving.com 作者:蘆東昕 李強(qiáng) 柳長(zhǎng)安 人氣: 發(fā)表時(shí)間:2011年10月21日
RFID是Radio Frequency Identification的縮寫,即射頻識(shí)別。一種非接觸式的自動(dòng)識(shí)別技術(shù),它通過射頻信號(hào)自動(dòng)識(shí)別目標(biāo)對(duì)象并獲取相關(guān)數(shù)據(jù),識(shí)別的距離可達(dá)幾十厘米至幾米,且根據(jù)讀寫的方式,可以輸入數(shù)千字節(jié)的信息,同時(shí),還具有極高的保密性,識(shí)別工作無(wú)須人工干預(yù),可工作于各種惡劣環(huán)境。
RFID技術(shù)可識(shí)別高速運(yùn)動(dòng)物體并可同時(shí)識(shí)別多個(gè)標(biāo)簽,操作快捷方便。其應(yīng)用范圍十分廣泛,主要有商品零售、商品防偽、交通運(yùn)輸、物流倉(cāng)儲(chǔ)、安全管理、醫(yī)療衛(wèi)生、圖書檔案和國(guó)防軍事等。
RFID系統(tǒng)由三部分組成:1. 標(biāo)簽(Tag,即射頻卡),由耦合元件及芯片組成,標(biāo)簽含有內(nèi)置天線,用于和射頻天線間進(jìn)行通信;2. 閱讀器,讀?。ㄔ谧x寫卡中還可以寫入)標(biāo)簽信息的設(shè)備;3. 天線,在標(biāo)簽和讀取器間傳遞射頻信號(hào)。本文主要介紹基于ARM,工作頻率在13.56MHz的RFID閱讀器設(shè)計(jì)方案。
1系統(tǒng)硬件設(shè)計(jì)
1.1 系統(tǒng)主要芯片介紹
本設(shè)計(jì)方案的兩個(gè)主要芯片是LPC2212和MF RC500。LPC2212功耗低,性能高,接口資源豐富,可以在RFID閱讀器的基礎(chǔ)上進(jìn)行其它功能的擴(kuò)展,實(shí)現(xiàn)一個(gè)多功能應(yīng)用系統(tǒng)。
MF RC500是PHILIPS公司生產(chǎn)的應(yīng)用于13.56MHz非接觸式通信中高集成讀卡IC系列中的一員。MF RC500支持ISO14443A所有的層,內(nèi)部的發(fā)送器部分不需要增加有源電路就能夠直接驅(qū)動(dòng)近操作距離的天線(可達(dá)100mm);接收器部分提供一個(gè)堅(jiān)固而有效的解調(diào)和解碼電路用于ISO14443A兼容的應(yīng)答器信號(hào);數(shù)字部分處理ISO14443A幀和錯(cuò)誤檢測(cè)奇偶CRC,此外它還支持快速CRYPTO1加密算法用于驗(yàn)證MIFARE系列產(chǎn)品。
1.2 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)從功能上主要分為4大模塊:控制模塊、發(fā)送接收數(shù)據(jù)模塊、串行通信模塊和顯示模塊。各模塊組成的系統(tǒng)總框圖如圖1所示。
控制模塊主要由微控制器LPC2212和晶振組成,負(fù)責(zé)整個(gè)系統(tǒng)的控制工作。
發(fā)送接收數(shù)據(jù)模塊主要由MF RC500、晶振和天線組成。MF RC500分為模擬部分和數(shù)字部分。模擬部分負(fù)責(zé)對(duì)射頻卡的發(fā)送接收操作,發(fā)送主要完成驅(qū)動(dòng)天線,提供13.56MHz的能量載波并根據(jù)寄存器的設(shè)置對(duì)發(fā)送數(shù)據(jù)進(jìn)行調(diào)制;接收主要完成對(duì)射頻卡發(fā)送的信號(hào)進(jìn)行檢測(cè)和解調(diào)并根據(jù)寄存器的設(shè)定進(jìn)行處理。數(shù)字部分則通過并口和中斷與微控制器LPC2212通信。MF RC500的能量載波由13.56MHz晶振提供,天線則主要由LC低通濾波器和LC諧振電路組成。
串行通信模塊主要由RS-232-C標(biāo)準(zhǔn)采用的9芯接口和電平轉(zhuǎn)換電路MAX232A組成。本模塊負(fù)責(zé)閱讀器與PC機(jī)通訊,可進(jìn)行程序下載,射頻卡信息修改等。
顯示模塊主要由低復(fù)用率的通用液晶(LCD)驅(qū)動(dòng)器PCF8562和LCD屏組成。PCF8562與微控制器LPC2212可以通過兩線雙向的I2C總線通信,當(dāng)這兩條線連接到器件的輸出級(jí)時(shí)必須通過上拉電阻連接到正電源。顯示模塊負(fù)責(zé)卡片信息顯示。
2 系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)包括三個(gè)模塊:系統(tǒng)初始化模塊、射頻卡與讀寫器通信模塊和LCD顯示模塊。下面詳細(xì)介紹以上模塊。
2.1 系統(tǒng)初始化模塊
為了使系統(tǒng)能夠正常運(yùn)行,必須在系統(tǒng)復(fù)位時(shí)對(duì)系統(tǒng)進(jìn)行初始化工作。其中包括中斷向量表的建立和REMAP(重映射)操作、各種模式堆棧初始化操作、時(shí)鐘初始化操作、串口初始化操作和中斷選擇初始化操作。
ARM7處理器有7種異常模式,其中斷向量位置是固定的(地址0x00000000-0x0000001C),LPC2212采用64字節(jié)存儲(chǔ)中斷向量表。為了實(shí)現(xiàn)LPC2212在不同操作模式下對(duì)中斷的使用,必須對(duì)LPC2212中Flash的Boot Block塊和SRAM空間的一小部分REMAP。另外,需要對(duì)各種模式的堆棧進(jìn)行初始化。
LPC2212振蕩器工作在振蕩模式,外部晶體振蕩頻率為20-25MHz,通過內(nèi)部PLL電路調(diào)整時(shí)鐘,使系統(tǒng)運(yùn)行速度更快。程序首先使能PLL但不連接PLL,然后設(shè)置外設(shè)時(shí)鐘與系統(tǒng)時(shí)鐘的分頻比,接著設(shè)置PLL的乘因子和除因子。設(shè)置完成后,把數(shù)據(jù)正確寫入硬件,并等待PLL跟蹤完成。最后,使能PLL并使PLL連上系統(tǒng)。
串口是讀卡器與PC機(jī)通信端口,在使用前須設(shè)置串口波特率、接收和發(fā)送數(shù)據(jù)字符格式和初始化FIFO(先進(jìn)先出隊(duì)列)。
串口和RC500都是基于IRQ中斷,使用前,須對(duì)LPC2212中斷選擇寄存器進(jìn)行配置,把串口和RC500的中斷請(qǐng)求分配為IRQ模式。
2.2 射頻卡與讀寫器通信模塊
本系統(tǒng)采用M1(MIFARE 1)智能卡,本卡自帶天線,內(nèi)含加密控制邏輯和通訊邏輯電路,M1分為16個(gè)扇區(qū),每個(gè)扇區(qū)為4塊,每塊16個(gè)字節(jié),以塊為存取單位,每個(gè)扇區(qū)有獨(dú)立的一組密碼及訪問控制,可一卡多用。M1射頻卡與讀寫器的通信流程圖如圖2所示。
復(fù)位應(yīng)答(Answer to request):M1射頻卡的通訊協(xié)議和通訊波特率是定義好的,當(dāng)有卡片進(jìn)入讀寫器的操作范圍時(shí),讀寫器以特定的協(xié)議與它通訊,從而確定該卡是否為M1射頻卡,即驗(yàn)證卡片的卡型。
防沖突機(jī)制 (Anti-collision Loop):當(dāng)有多張卡進(jìn)入讀寫器操作范圍時(shí),防沖突機(jī)制會(huì)從其中選擇一張進(jìn)行操作,未選中的則處于空閑模式等待下一次選卡,該過程會(huì)返回被選卡的序列號(hào)。
選擇卡片(Select Tag):選擇被選中的卡的序列號(hào),并同時(shí)返回卡的容量代碼。
三次互相驗(yàn)證(Three Authentication):選定要處理的卡片之后,讀寫器就確定要訪問的扇區(qū)號(hào),并對(duì)該扇區(qū)密碼進(jìn)行密碼校驗(yàn),在三次相互認(rèn)證之后就可以通過加密流進(jìn)行通訊。(在選擇另一扇區(qū)時(shí),則必須進(jìn)行另一扇區(qū)密碼校驗(yàn)。)
對(duì)數(shù)據(jù)塊的操作: 讀 (Read):讀一個(gè)塊;寫 (Write):寫 一個(gè)塊;加(Increment):對(duì)數(shù)值塊進(jìn)行加值;減(Decrement):對(duì)數(shù)值塊進(jìn)行減值;存儲(chǔ)(Restore):將塊中的內(nèi)容存到數(shù)據(jù)寄存器中;傳輸(Transfer):將數(shù)據(jù)寄存器中的內(nèi)容寫入塊中;中止(Halt):將卡置于暫停工作狀態(tài)。
2.3 LCD顯示模塊
顯示模塊完成射頻卡信息在LCD上的顯示功能。用戶可以顯示專用符號(hào)、數(shù)字、漢字和圖形。顯示模塊主要分為兩部分:第一部分是根據(jù)閱讀器從射頻卡讀入的信息確定要顯示的內(nèi)容,顯示圖形時(shí),則要計(jì)算顯示坐標(biāo);第二部分是根據(jù)系統(tǒng)所采用的LCD建立專用符號(hào)庫(kù)、漢字庫(kù),顯示圖形時(shí),則要把第一部分得到的坐標(biāo)轉(zhuǎn)化為L(zhǎng)CD上的顯示坐標(biāo)。
3 改進(jìn)的防沖突算法
根據(jù)ISO14443協(xié)議,M1型卡傳統(tǒng)的防沖突算法是動(dòng)態(tài)二進(jìn)制檢索樹算法。它首先利用MANCH ESTER編碼“沒有變化”的狀態(tài)來檢測(cè)碰撞位,然后把碰撞位設(shè)為二進(jìn)制“1”,用SELECT命令發(fā)送碰撞前接收的部分卡片序列號(hào)和碰撞位,如果卡片開頭部分序列號(hào)與其相同,則做出應(yīng)答,不相同則沒有響應(yīng)。以此來縮小卡片范圍,最終達(dá)到無(wú)碰撞。圖3顯示了兩個(gè)卡片(PICC #1和PICC #2)的防碰撞流程。
但是,傳統(tǒng)的防碰撞方法要求所有應(yīng)答器準(zhǔn)確同步,應(yīng)答器必須準(zhǔn)確地在同一時(shí)刻開始傳輸他們的序列號(hào)。然而,在實(shí)際使用中,應(yīng)答器由用戶控制,可能產(chǎn)生異步發(fā)送數(shù)據(jù),如果仍然采用傳統(tǒng)防沖突算法,有可能導(dǎo)致死循環(huán),如圖4所示。
圖4 尋卡死循環(huán)
為了解決死循環(huán)問題,在傳統(tǒng)算法的基礎(chǔ)上設(shè)置了一個(gè)記錄碰撞位數(shù)的變量,如果第二次碰撞位數(shù)和第一次相等,則把SELECT發(fā)送的部分卡號(hào)增加一位,設(shè)為二進(jìn)制數(shù)“1”發(fā)送出去。如果在規(guī)定時(shí)間內(nèi)沒有收到應(yīng)答,則把增加位設(shè)為“0”發(fā)送出去??梢杂行ьA(yù)防由于應(yīng)答器異步導(dǎo)致的死循環(huán)問題。針對(duì)圖4的改進(jìn)流程如圖5。
圖5 改進(jìn)的防沖突流程
4 結(jié)束語(yǔ)
本文給出了一個(gè)基于ARM的RFID閱讀器軟硬件框架,實(shí)現(xiàn)了對(duì)射頻卡的基本讀寫等功能。閱讀器采用的ARM微處理器,接口資源豐富,還有很多空閑接口,可在閱讀器的基礎(chǔ)上進(jìn)行擴(kuò)展,例如,可利用ARM的其它接口驅(qū)動(dòng)電機(jī),利用射頻卡對(duì)電機(jī)實(shí)現(xiàn)控制,只有卡內(nèi)信息正確,系統(tǒng)才能向電機(jī)發(fā)出控制命令,從而在硬件上增加了安全性。另外,改進(jìn)的防沖突算法也使讀卡器在應(yīng)答器異步發(fā)送數(shù)據(jù)的情況下有效的避免死鎖。本文對(duì)實(shí)現(xiàn)帶有RFID功能的多功能系統(tǒng)有一定的參考價(jià)值和實(shí)用價(jià)值。
參考文獻(xiàn):
[1]游戰(zhàn)清,李蘇劍等.無(wú)限射頻識(shí)別技術(shù)(RFID)理論與應(yīng)用[M].電子工業(yè)出版社,2004.
[2]李駒光,聶雪媛等.ARM應(yīng)用系統(tǒng)開發(fā)詳解—基于S3C14510B系統(tǒng)設(shè)計(jì)[M].清華大學(xué)出版社,2003.
[3]周立功等.ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)[M].北京航空航天大學(xué)出版社,2003.
[4]Bhuptani Manish,Moradpour Shahram.RFID Field Guide Deploying Radio Frequency Identification Systems[M].Prentice Hall PTR,2005.
[5]Klaus Finkenzeller.RFID Handbook:Fundamentals and Applications in Contactless Smart Cards and Identification[M].John Wiley & Sons,2003.