蔡鵬鵬,孫玲玲,汪大卓
(杭州電子科技大學(xué)射頻電路與系統(tǒng)教育部重點(diǎn)實(shí)驗(yàn)室,浙江杭州310018)
日常生活和生產(chǎn)中最常見(jiàn)的RFID技術(shù)是高頻RFID技術(shù)的應(yīng)用,如公交IC卡、二代身份證、數(shù)字門票等均是采用了高頻RFID技術(shù)[1]。但是目前國(guó)內(nèi)外的高頻RFID均必須通過(guò)專門的方法進(jìn)行定制,每一個(gè)應(yīng)用都必須從硬件到軟件進(jìn)行大的改動(dòng)。因此,設(shè)計(jì)一個(gè)用于高頻RFID的讀卡器,并使其具有易二次開(kāi)發(fā)的特性顯得十分有意義。本設(shè)計(jì)給RC522添加以太網(wǎng)作為接口設(shè)備,輔助以無(wú)線網(wǎng)絡(luò)進(jìn)行通信,以達(dá)到通信通路的通用性。并規(guī)范以太網(wǎng)、無(wú)線網(wǎng)絡(luò)的信息包及采用實(shí)時(shí)操作系統(tǒng)使RFID終端具有通用性的特點(diǎn)。上層軟件只需要根據(jù)給定的數(shù)據(jù)協(xié)議即可操作RFID讀卡器,可以將上層軟件的開(kāi)發(fā)和底層硬件開(kāi)發(fā)分離開(kāi)來(lái),開(kāi)發(fā)實(shí)際項(xiàng)目時(shí)能將更多的注意力放在完善應(yīng)用軟件和數(shù)據(jù)庫(kù)上,以此提高開(kāi)發(fā)效率。
為了達(dá)到通用性的目的,本設(shè)計(jì)使用模塊化的電路設(shè)計(jì)方法,即將整體的讀卡設(shè)備分為各個(gè)子功能的小模塊,以便在不同應(yīng)用需求的環(huán)境下進(jìn)行配置變更??傮w可以分為:(1)讀卡模塊;(2)以太網(wǎng)通信模塊;(3)無(wú)線通信模塊;(4)主控單元及LCD顯示屏。系統(tǒng)框圖如圖1所示:
圖1 系統(tǒng)總體框圖
本系統(tǒng)的主控芯片是采用ARM核心Cotex-M 3的STM32F103ZET6。讀卡模塊使用NXP公司生產(chǎn)的符合ISO/IEC 14443A[2]協(xié)議的控制芯片MFRC522。使用該芯片可以在外加極少元件的情況下,得到一個(gè)穩(wěn)定的RFID讀卡模塊,這一讀卡模塊通過(guò)I2C總線與主控單元進(jìn)行通信。無(wú)線模塊采用TI公司的CC1101芯片,該芯片可以工作于315/433/868/915MHz[3],在這個(gè)系統(tǒng)中將其工作頻段配置為433MHz。以太網(wǎng)模塊采用Davicom公司的DM 9000A。DM 9000A是PHY層驅(qū)動(dòng)芯片,符合IEEE 802.3x規(guī)范要求,全雙工工作于10/100M帶寬。以上模塊在必要時(shí),可以將單獨(dú)一個(gè)模塊卸下,更換成另外的模塊,只需要在操作系統(tǒng)中的驅(qū)動(dòng)部分進(jìn)行更改即可。這里簡(jiǎn)要對(duì)核心的RFID讀卡模塊進(jìn)行分析[4],如圖2所示:
圖2 RFID讀卡模塊電路圖
MFRC522通過(guò)TX 1和TX 2管腳提供信號(hào)輸出,并提供能量驅(qū)動(dòng)天線工作。27.12MHz的晶體振蕩器與兩個(gè)15pF的電容構(gòu)成MF RC522的本地振蕩器,經(jīng)過(guò)MF RC522內(nèi)部二分頻以后得到13.56MHz的載波頻率。通過(guò)主控電路對(duì)MFRC522進(jìn)行配置以后,MFRC522將根據(jù)寄存器的配置信息對(duì)發(fā)射數(shù)據(jù)進(jìn)行基帶編碼與調(diào)制,然后使用本地振蕩器進(jìn)行上變頻,進(jìn)而通過(guò)TX1和TX2管腳驅(qū)動(dòng)天線發(fā)射信號(hào)。其中L0、C0、C1組成的串聯(lián)諧振電路的振蕩頻率為:
該頻率即為高頻RFID的工作頻段。RFID標(biāo)簽在收到讀卡模塊的發(fā)射信號(hào)以后,通過(guò)射頻場(chǎng)的負(fù)載調(diào)制進(jìn)行響應(yīng)。天線繞組本身的電感與C2a、C2b構(gòu)成接收的諧振網(wǎng)絡(luò),對(duì)RFID標(biāo)簽的回波進(jìn)行選頻接收。讀卡模塊的天線拾取信號(hào)后,經(jīng)過(guò)C3、R1組成的天線匹配電路送到RX管腳。MF RC522內(nèi)部接收器對(duì)信號(hào)進(jìn)行檢測(cè)和解調(diào)并根據(jù)寄存器的設(shè)定對(duì)信號(hào)進(jìn)行處理。最后數(shù)據(jù)通過(guò)通信接口由微控制器進(jìn)行讀取。
本系統(tǒng)的軟件設(shè)計(jì)要點(diǎn):一個(gè)是采用了實(shí)時(shí)操作系統(tǒng),需要合理劃分設(shè)備驅(qū)動(dòng)層與應(yīng)用層的代碼結(jié)構(gòu),以實(shí)現(xiàn)系統(tǒng)面向應(yīng)用的通用性,而不必由于硬件的更改重寫(xiě)大部分代碼;另一個(gè)則是設(shè)計(jì)一套Socket的通信規(guī)范,實(shí)現(xiàn)板極開(kāi)發(fā)與數(shù)據(jù)庫(kù)開(kāi)發(fā)相分離的通用性設(shè)計(jì)。
RT-Thread是一款國(guó)內(nèi)的開(kāi)源實(shí)時(shí)操作系統(tǒng),由非盈利的專業(yè)人員開(kāi)發(fā)維護(hù)[5]。RT-Thread有STM32系列ARM處理器上的移植分支。對(duì)應(yīng)用開(kāi)發(fā)來(lái)說(shuō),RT-Thread具有一個(gè)穩(wěn)定的全搶占式的實(shí)時(shí)操作系統(tǒng)內(nèi)核;另外RT-Thread的0.3.0版本內(nèi)嵌LwIP協(xié)議,可以直接使用BSP Socket套接字進(jìn)行TCP/IP開(kāi)發(fā)。
采用了RT-Thread之后,系統(tǒng)的軟件功能實(shí)現(xiàn)就可以分層了,這里以以太網(wǎng)Socket客戶端應(yīng)用功能的分層實(shí)現(xiàn)為例簡(jiǎn)單說(shuō)明,分層結(jié)構(gòu)如圖3所示:
圖3 系統(tǒng)的軟件分層結(jié)構(gòu)
這里的最底層是實(shí)時(shí)操作系統(tǒng)的內(nèi)核,已經(jīng)由所選擇的操作系統(tǒng)給定。
設(shè)備驅(qū)動(dòng)層是聯(lián)系硬件與上層標(biāo)準(zhǔn)協(xié)議實(shí)現(xiàn)、應(yīng)用代碼開(kāi)發(fā)的紐帶,這一層用于硬件的代碼封裝,使不同的硬件可以由同樣或者相近的接口進(jìn)行控制與通信。因而改變硬件模塊時(shí),只需要改變這一層內(nèi)相應(yīng)的驅(qū)動(dòng)代碼。協(xié)議實(shí)現(xiàn)層用于系統(tǒng)的標(biāo)準(zhǔn)化編程,即對(duì)于已經(jīng)有規(guī)范的協(xié)議,如TCP/IP協(xié)議族,可以在這一層進(jìn)行代碼封裝,則對(duì)于上一層的應(yīng)用處理層來(lái)說(shuō),能夠直接使用協(xié)議規(guī)定的標(biāo)準(zhǔn)函數(shù)進(jìn)行代碼編寫(xiě)。應(yīng)用處理層則是處理用戶自定義應(yīng)用的分層,所有邏輯判斷,如輸入狀態(tài)判斷和控制狀態(tài)改變等都在這一層實(shí)現(xiàn)。
通用終端Socket通信規(guī)范是指通過(guò)Socket傳輸?shù)臄?shù)據(jù)流所具有的,適應(yīng)通用RFID終端數(shù)據(jù)的一套自定義通信格式。
本系統(tǒng)是一個(gè)通用的高頻RFID終端,傳輸數(shù)據(jù)方向分為出終端與入終端兩種。出終端的數(shù)據(jù)包含RFID標(biāo)簽號(hào)及終端狀態(tài),這里將這兩種信息統(tǒng)稱為讀卡信息(Card Info);入終端的數(shù)據(jù)則可以有多種,主要由應(yīng)用環(huán)境對(duì)應(yīng)的數(shù)據(jù)庫(kù)來(lái)決定,一般為標(biāo)簽號(hào)對(duì)應(yīng)的用戶ID、用戶姓名、通知信息、狀態(tài)改變中的一個(gè)或幾個(gè)的組合,這里將這一部分的信息統(tǒng)稱為返回信息(Back Info)。數(shù)據(jù)幀格式如表1所示:
表1 終端數(shù)據(jù)幀格式
SOF:數(shù)據(jù)幀頭,這里定義其值SOF=0xAA,表示一段數(shù)據(jù)流的開(kāi)始。
LENGTH:幀長(zhǎng)度,其值為數(shù)據(jù)幀中除去最末CRC16的兩個(gè)字節(jié)以外的數(shù)據(jù)幀字節(jié)數(shù)(包括LENGTH自身兩個(gè)字節(jié))。
CMD:控制命令字,根據(jù)應(yīng)用的要求賦予不同值以不同意義。例如,當(dāng)入終端數(shù)據(jù)幀的CMD=0x01時(shí),表示整個(gè)數(shù)據(jù)幀是對(duì)一個(gè)RFID標(biāo)簽號(hào)的數(shù)據(jù)庫(kù)查詢請(qǐng)求的空響應(yīng),該空響應(yīng)表示讀卡終端讀取的RFID標(biāo)簽號(hào)未在數(shù)據(jù)庫(kù)中登記。
Info:信息,當(dāng)數(shù)據(jù)幀為出終端數(shù)據(jù)幀時(shí),Info即為Card Info;當(dāng)數(shù)據(jù)幀為入終端數(shù)據(jù)幀時(shí),Info即為Back Info。這里的Info是某一命令或者響應(yīng)的參數(shù),如上面的例子,一個(gè)錯(cuò)誤響應(yīng)有時(shí)候需要一些提示,如“RFID標(biāo)簽未登記,請(qǐng)?jiān)跀?shù)據(jù)庫(kù)中加入該標(biāo)簽”。這時(shí)候的提示就可以放在Info中進(jìn)行傳輸。
CRC16:16位CRC校驗(yàn)碼,對(duì)以上幾個(gè)部分的數(shù)據(jù)進(jìn)行CRC計(jì)算之后得到的校驗(yàn)碼,便于終端和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)正確性檢測(cè),以應(yīng)對(duì)可能的通信數(shù)據(jù)錯(cuò)誤。
通過(guò)給固定的數(shù)據(jù)段值以固定意義,可以快速地根據(jù)應(yīng)用環(huán)境需要調(diào)整終端的功能。
采用硬件模塊化與軟件分層的方法,設(shè)計(jì)了一種通用高頻RFID終端,該終端支持ISO/IEC 14443A協(xié)議的高頻RFID標(biāo)簽,無(wú)線通信的有效距離為50m,有效讀卡距離達(dá)到5cm,以太網(wǎng)接口速度在netio測(cè)試下達(dá)到平均接收645kByte/s、平均發(fā)送960kByte/s的速度,一個(gè)有線節(jié)點(diǎn)最大可以支持20個(gè)無(wú)線節(jié)點(diǎn)。系統(tǒng)參數(shù)可以滿足大多數(shù)的應(yīng)用要求。使用這種結(jié)構(gòu)的高頻RFID終端,已經(jīng)成功在一個(gè)實(shí)際項(xiàng)目中應(yīng)用。
[1] Klaus Finkenzeller.射頻識(shí)別(RFID)技術(shù)[M].北京:電子工業(yè)出版社,2001:6-10.
[2] International Standard.Identification cards——Contactless integrated circuit(s)cards——Proximity cards——Part 1:Physical characteristics[EB/OL].http://webstore.iec.ch/preview/info_isoiec14443-1%7Bed2.0%7Den.pdf.2010-04-22.
[3] Texas Instruments.CC1101 Datasheet[EB/OL].http://focus.ti.com/lit/ds/sw rs061f/swrs061f.pd f,2010-05-06.
[4] 韓愛(ài)麗,李亞.基站芯片RC522的14443A讀卡器設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2006,(12):35-40.
[5] RT-Thread工作室.RT-Thread實(shí)時(shí)操作系統(tǒng)編程指南版本0.3.0[EB/OL].http://www.rt-thread.org/download/RTThread.pdf,2010-03-18.