基于TI S6700系列芯片的RFID閱讀器設(shè)計(jì)
射頻識(shí)別技術(shù)是二十世紀(jì)九十年代興起的一項(xiàng)自動(dòng)識(shí)別技術(shù),它利用無線電射頻方式進(jìn)行非接觸式雙向通信。RFID(Radio Frequency Identification)系統(tǒng)中射頻卡(應(yīng)答器)與閱讀器之間無需物理接觸即可完成識(shí)別,可實(shí)現(xiàn)多目標(biāo)識(shí)別和運(yùn)動(dòng)目標(biāo)識(shí)別,應(yīng)用范圍更加廣泛。圖1是閱讀器和應(yīng)答器組成的一個(gè)完整射頻系統(tǒng):
圖1 閱讀器與應(yīng)答器信息傳遞示意圖(略)
從射頻系統(tǒng)中可以看出閱讀器的重要性及它的功能,在整個(gè)通信過程中閱讀器起到橋梁的作用。
硬件設(shè)計(jì)
考慮到閱讀器在系統(tǒng)中要完成的工作主要是從射頻卡讀取數(shù)據(jù),并將數(shù)據(jù)經(jīng)相應(yīng)的處理后送給主機(jī)。在設(shè)計(jì)時(shí)按功能對(duì)閱讀器進(jìn)行模塊化設(shè)計(jì),圖2是閱讀器的內(nèi)部功能框圖。圖中閱讀器分為射頻卡數(shù)據(jù)讀取部分(射頻部分)、控制電路部分、主機(jī)接口電路部分。
圖2 閱讀器內(nèi)部功能框圖(略)
控制部分
圖3是控制器的接口電路圖。
圖3 控制電路部分(略)
此控制部分是為了輔助RI-R6C-001A工作,因?yàn)镽I-R6C-001A芯片要正常工作,完成射頻閱讀器的功能,不但需要有外圍電路,而且還需要有控制器對(duì)其進(jìn)行適當(dāng)?shù)目刂啤T诖嗽O(shè)計(jì)中選用了PIC16F874單片機(jī)作為控制器,由于此單片機(jī)有豐富的位操作指令,有SPI串行口,精簡(jiǎn)的指令集,能夠很容易的模擬RI-R6C-001A傳送數(shù)據(jù)的時(shí)序以及時(shí)鐘切換時(shí)序。由于RI-R6C-001A對(duì)外只提供 四個(gè)引腳DOUT、DIN、SCLOCK、M-ERR,所以控制器的接口電路相對(duì)較簡(jiǎn)單。DOUT、DIN、SCLOCK三個(gè)引腳分別連接到單片機(jī)的SPI串行口SDI、SDO、SCK三根線上,用來實(shí)現(xiàn)數(shù)據(jù)的串行傳輸。M-ERR引腳用來檢測(cè)接收到射頻卡中的數(shù)據(jù)是否發(fā)生錯(cuò)誤,若有錯(cuò)誤此引腳變?yōu)楦唠娖?,因此把該引腳接到單片機(jī)的外部中斷輸入引腳端,用于檢測(cè)接收數(shù)據(jù)是否有錯(cuò)誤,進(jìn)而單片機(jī)對(duì)其做出相應(yīng)的處理。由于RI-R6C-001A在接收射頻卡中的數(shù)據(jù)并把它發(fā)送給控制器時(shí),要求控制器要對(duì)其發(fā)送數(shù)據(jù)是否結(jié)束做出判斷,并且RI-R6C-001A不發(fā)送數(shù)據(jù)時(shí)就不再送時(shí)鐘,所以在此電路設(shè)計(jì)中把RI-R6C-001A的SCLOCK引腳也接到了具有電壓變化中斷功能的RB4引腳,此引腳外接一個(gè)二極管,與軟件結(jié)合起來,要求當(dāng)控制器供應(yīng)時(shí)鐘時(shí),RB4引腳處于高電平輸出狀態(tài),經(jīng)過二極管,RB4引腳不會(huì)輸入時(shí)鐘;當(dāng)RI-R6C-001A供應(yīng)時(shí)鐘時(shí) ,RB4引腳處于輸入狀態(tài),SCLOCK信號(hào)輸入此引腳,從而可以對(duì)發(fā)送數(shù)據(jù)是否結(jié)束作出相應(yīng)的判斷。
射頻部分
RI-R6C-001A芯片是TI公司最新開發(fā)的針對(duì)IC卡讀寫的多協(xié)議收發(fā)器,支持的協(xié)議包括: Tag-it協(xié)議、ISO/IEC 15693-2、ISO/IEC 14443-2(TYPE A)。該收發(fā)器由發(fā)送器,接收器,電源供應(yīng),參考時(shí)鐘和內(nèi)部振蕩器,默認(rèn)的復(fù)位設(shè)置和電源管理,串行通信接口等幾部分組成。該芯片通常是+5V供電,采用SSOP20封裝,內(nèi)部封裝有發(fā)送編碼器,調(diào)制器,接收器和解調(diào)器,典型發(fā)送功率200mW,有IDLE、POWER DOWN、FULL POWER三種電源管理功能。它提供給用戶數(shù)字接口的信號(hào)線為DIN、DOUT、SCLOCK,通過這三根線可完成控制器與RI-R6C-001A芯片之間的數(shù)據(jù)傳輸。當(dāng)RI-R6C-001A要發(fā)送數(shù)據(jù)時(shí),時(shí)鐘由單片機(jī)控制,當(dāng)它要接收數(shù)據(jù)時(shí),時(shí)鐘由該芯片控制。 DOUT除了在接收數(shù)據(jù)期間有把接收到的數(shù)據(jù)輸出給單片機(jī)的功能外,還用來表征RI-R6C-001A內(nèi)部FIFO的情況。DOUT內(nèi)部下拉,平時(shí)為低電平。輸入數(shù)據(jù)過程中,當(dāng)RI-R6C-001A的16位FIFO寄存器滿時(shí),DOUT線會(huì)自動(dòng)跳變?yōu)楦唠娖?,直到FIFO寄存器空,DOUT線又會(huì)跳變?yōu)榈碗娖?。在軟件設(shè)計(jì)時(shí)單片機(jī)每發(fā)一位數(shù)據(jù)都要檢測(cè)DOUT的狀態(tài)。在DOUT為高電平期間,輸入數(shù)據(jù)無效。
射頻電路由三大部分組成(見圖4):RI-R6C-001A應(yīng)用電路,與單片機(jī)相連的接口電路,天線發(fā)送。接收電路:在RI-R6C-001A應(yīng)用電路中,L1、L2、C2組成的T型網(wǎng)絡(luò)以及L3、C9組成的LC網(wǎng)絡(luò)都是起到濾波的效果,使RI-R6C-001A通過天線接收的數(shù)據(jù)不至于流向發(fā)送端TX-OUT,因?yàn)榇诵酒l(fā)送數(shù)據(jù)時(shí)頻率是13.56MHz,而接收的信號(hào)的載波頻率是13.56MHz/28和13.56MHz/32(FM)或者13.56MHz/32(AM),R-MOD端的電阻R2決定發(fā)送信號(hào)的調(diào)制深度;R3、L4、C10、C11組成串聯(lián)諧振電路,匹配阻抗50 ,可調(diào)電容C11用來準(zhǔn)確調(diào)整電路諧振點(diǎn)在13.56MHz。這一設(shè)計(jì)有利于閱讀器正確的收發(fā)信息。
圖4 射頻電路部分(略)
系統(tǒng)工作過程
接收數(shù)據(jù)過程
單片機(jī)與RI-R6C-001A之間通信必須遵循Tag-it協(xié)議或ISO/IEC 15693,其中Tag-it是TI公司最新開發(fā)的RFID Transponder(應(yīng)答器)的注冊(cè)商標(biāo),是一個(gè)產(chǎn)品系列。Tag-it完全和ISO/IEC15693兼容,Tag-it應(yīng)答器與閱讀器之間是半雙工通信,首先閱讀器主動(dòng)發(fā)一個(gè)請(qǐng)求(包含命令和參數(shù)),應(yīng)答器被動(dòng)發(fā)一個(gè)應(yīng)答(包含發(fā)送的數(shù)據(jù)和狀態(tài))。 在軟件設(shè)計(jì)上必須讓單片機(jī)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)滿足RI-R6C-001A的通信要求。由單片機(jī)發(fā)給RI-R6C-001A的命令序列必須符合以下格式:
圖(略)
S1表示傳輸開始,長(zhǎng)度為1位;CMD表示命令字節(jié),長(zhǎng)度為8位或1位,8位用于普通模式,1位用于寄存器模式;ES1表示傳輸停止。命令字節(jié):規(guī)定RI-R6C-001A與應(yīng)答器通信時(shí)的有關(guān)參數(shù),例如:支持的射頻協(xié)議,調(diào)制方式,調(diào)制深度,波特率等。普通模式在每次通信時(shí)命令序列中都要包含使用的有關(guān)參數(shù),而寄存器模式命令序列中并不含這些參數(shù),而是由預(yù)先寫入配置寄存器中的數(shù)值所決定;數(shù)據(jù)位是根據(jù)通信時(shí)的要求定的,數(shù)據(jù)位的順序由ISO15693-3或者Tag-it協(xié)議所規(guī)定,具體采用哪一種射頻協(xié)議使閱讀器與應(yīng)答器通信由CMD中指定, 因此數(shù)據(jù)位是任意的,且長(zhǎng)短根據(jù)要求通信的信息而定。單片機(jī)的SPI口正好能滿足這一要求。由于SPI口沒有開始和停止位,為了滿足RI-R6C-001A開始和停止位的要求,起始位是通過在啟動(dòng)SPI口之前直接用位操作指令先對(duì)DIN置低,然后對(duì)SCLOCK置高,再把DIN置高從而表示開始接收數(shù)據(jù)的起始位,然后啟動(dòng)SPI接口傳輸數(shù)據(jù); 停止位是通過在數(shù)據(jù)傳輸結(jié)束后把SPI口引腳變成通用的I/O引腳,用位操作指令先把DIN、SCLOCK置高,再把DIN置低,表示傳輸數(shù)據(jù)結(jié)束。數(shù)據(jù)位:RI-R6C-001A接收單片機(jī)發(fā)來的數(shù)據(jù)時(shí)是在每個(gè)時(shí)鐘SCLOCK的上升沿鎖存數(shù)據(jù),并且要求數(shù)據(jù)位的值必須被建立且SCLOCK為高電平時(shí)數(shù)據(jù)保持不變,也就是說要求單片機(jī)在時(shí)鐘的下降沿送出數(shù)據(jù),在時(shí)鐘的上升沿?cái)?shù)據(jù)是穩(wěn)定的,可供閱讀器對(duì)輸入的數(shù)據(jù)進(jìn)行鎖存,因此對(duì)控制器SPI口相關(guān)寄存器SSPCON和SSPSTAT進(jìn)行適當(dāng)設(shè)置就可以滿足此要求。
數(shù)據(jù)傳送
單片機(jī)要接收RI-R6C-001A發(fā)過來的數(shù)據(jù),首先在時(shí)序上必須滿足RI-R6C-001A發(fā)送數(shù)據(jù)時(shí)序的要求,見圖5。發(fā)送數(shù)據(jù)時(shí),是在每個(gè)時(shí)鐘的上升沿送出數(shù)據(jù),在每個(gè)時(shí)鐘的下降沿?cái)?shù)據(jù)穩(wěn)定,因此單片機(jī)應(yīng)該在時(shí)鐘的下降沿采樣數(shù)據(jù),這同樣可以通過設(shè)置SSPCON和SSPSTAT寄存器來實(shí)現(xiàn)。
圖 5(略)
時(shí)鐘切換
需要注意的是,當(dāng)單片機(jī)由發(fā)送轉(zhuǎn)換為接收過程中,它同時(shí)由主動(dòng)轉(zhuǎn)化為被動(dòng),由發(fā)送時(shí)鐘轉(zhuǎn)換為接收時(shí)鐘,這里有時(shí)鐘切換問題,應(yīng)滿足圖6所示時(shí)序圖關(guān)系。
圖6 時(shí)序圖(略)
由時(shí)序圖知當(dāng)單片機(jī)傳輸數(shù)據(jù)ES1結(jié)束后(在a時(shí)刻)把SPI用到的引腳設(shè)置為通用I/O引腳,要進(jìn)行時(shí)鐘的切換,在第一個(gè)tran期間,通過位操作指令先把SCLOCK=0,再讓DIN引腳出現(xiàn)一個(gè)正脈沖(b時(shí)刻到c時(shí)刻),單片機(jī)就把時(shí)鐘控制權(quán)交給了RI-R6C-001A,d時(shí)刻表明在RI-R6C-001A控制SCLOCK的時(shí)間內(nèi)DIN引腳為高電平,注意在閱讀器給單片機(jī)送數(shù)據(jù)時(shí),DIN引腳一直保持高電平,一旦它不再送數(shù)據(jù),同時(shí)也不再送時(shí)鐘, 在編程時(shí)可以檢測(cè)單片機(jī)的時(shí)鐘輸入端是否由時(shí)鐘輸入,從而決定閱讀器是否還在給單片機(jī)發(fā)送數(shù)據(jù)。當(dāng)閱讀器控制SCLOCK時(shí),它將發(fā)送一個(gè)S2對(duì)應(yīng)于應(yīng)答器發(fā)送過來的SOF,2bit數(shù)據(jù)和一個(gè)ES2對(duì)應(yīng)于應(yīng)答器發(fā)送過來的EOF。在第二個(gè)tran期間可再次通過位操作指令讓DIN引腳上產(chǎn)生一個(gè)正脈沖,此時(shí)單片機(jī)就收回了控制權(quán),然后按第一次發(fā)數(shù)據(jù)的方式發(fā)數(shù)據(jù)。 在單片機(jī)接收DOUT引腳上數(shù)據(jù)的過程中,通過對(duì)單片機(jī)中與SPI接口有關(guān)的寄存器的設(shè)置,可以讓單片機(jī)在輸入的每位數(shù)據(jù)的有效時(shí)間中間采樣數(shù)據(jù),這一設(shè)置正好與RI-R6C-001A輸出數(shù)據(jù)的時(shí)序相吻合,注意在每次時(shí)鐘切換的過程中,SCLOCK都是為低電平的。
結(jié)束語
通過利用PC機(jī),仿真器以及MPLAB ICE集成開發(fā)環(huán)境完成了軟件的調(diào)試,軟件的主要功能包括:從單片機(jī)發(fā)送符合RI-R6C-001A所要求的命令,數(shù)據(jù)。RI-R6C-001A收到這些數(shù)據(jù)進(jìn)行處理,加上SOF和EOF后,以請(qǐng)求的形式發(fā)送給應(yīng)答器,并接收應(yīng)答器以應(yīng)答的形式發(fā)來的數(shù)據(jù),進(jìn)行處理后再通過輸出引腳DOUT 送給單片機(jī),在編程時(shí)采用了模塊式的結(jié)構(gòu),利用PIC16F87X匯編和C語言進(jìn)行寫的程序。
該系統(tǒng)經(jīng)過測(cè)試,已經(jīng)可以使用,如果硬件和軟件設(shè)計(jì)合理,進(jìn)一步提高其可靠性和安全性,再加上成本低廉、讀寫電路簡(jiǎn)單,應(yīng)用必然會(huì)更加廣泛。