基于單片機(jī)的射頻卡讀卡器設(shè)計(jì)
摘要:射頻卡成功地將無(wú)線(xiàn)射頻識(shí)別技術(shù)與IC卡技術(shù)結(jié)合起來(lái),有效解決了無(wú)源和免接觸難題。基于單片機(jī)和射頻識(shí)別技術(shù),并以門(mén)禁系統(tǒng)為應(yīng)用實(shí)例,給出了一種新型射頻卡讀卡器的設(shè)計(jì)方案。該方案以單片機(jī)為主控器件,依照卡機(jī)之間的通信協(xié)議控制讀/寫(xiě)模塊,實(shí)現(xiàn)對(duì)射頻卡的讀/寫(xiě)、控制等完備操作。結(jié)合硬件原理圖和軟件流程圖,給出了射頻卡讀卡器的設(shè)計(jì)思想和實(shí)現(xiàn)過(guò)程。實(shí)際使用表明,該設(shè)計(jì)方案可行,讀寫(xiě)器工作穩(wěn)定,操作方便,抗干擾能力強(qiáng)。
關(guān)鍵詞:射頻卡;單片機(jī);門(mén)禁系統(tǒng);讀卡器
射頻卡是繼磁卡之后的新一代數(shù)據(jù)卡,它利用雙向無(wú)線(xiàn)電射頻技術(shù)與讀寫(xiě)設(shè)備進(jìn)行數(shù)據(jù)交換,具有智能讀寫(xiě)和加密通信的功能,與傳統(tǒng)的接觸IC卡、磁卡相比,射頻卡具有非接觸、無(wú)磨損、操作方便,讀寫(xiě)頻率高,使用壽命長(zhǎng),安全防沖突等優(yōu)點(diǎn)。本文以門(mén)禁系統(tǒng)為應(yīng)用實(shí)例,設(shè)計(jì)了一種以TI公司的疏耦合IC卡Tag-itHF-I為識(shí)別對(duì)象,以8031單片機(jī)為微控制器,以TI公司的S6700讀/寫(xiě)模塊為核心部件的射頻卡讀卡器。它能完成對(duì)Tag-it HF-I卡的所有讀/寫(xiě)及控制工作,并且還可以方便地嵌入如考勤、收費(fèi)等其他多種自動(dòng)識(shí)別系統(tǒng),成為系統(tǒng)的一部分。
1 工作原理
射頻卡與讀寫(xiě)器之間通過(guò)耦合元件實(shí)現(xiàn)射頻信號(hào)的空間耦合,在耦合通道內(nèi),根據(jù)時(shí)序關(guān)系實(shí)現(xiàn)能量的傳遞和數(shù)據(jù)的交換,然后由后臺(tái)計(jì)算機(jī)對(duì)讀卡器讀取的數(shù)據(jù)進(jìn)行存儲(chǔ)以及管理分析等操作。具體實(shí)現(xiàn)上,射頻卡內(nèi)含有天線(xiàn)、ASIC、集成LC諧振電路。諧振電路的頻率與讀卡器發(fā)射頻率相同為13.56 MHz,工作時(shí)的能量由讀卡器天線(xiàn)發(fā)射無(wú)線(xiàn)電載波信號(hào)耦合到卡片內(nèi)的天線(xiàn)產(chǎn)生。微控制器8031單片機(jī)依照ISO/
IEC15693-3通信協(xié)議,編寫(xiě)控制程序,以完成對(duì)S6700讀/寫(xiě)模塊的控制。S6700讀/寫(xiě)模塊實(shí)際上是單片機(jī)與射頻卡之間進(jìn)行信息交換的媒介,射頻卡上的數(shù)據(jù)讀寫(xiě)均需通過(guò)S6700讀/寫(xiě)模塊來(lái)傳遞。傳遞不同類(lèi)型的指令給S6700讀/寫(xiě)模塊,就能實(shí)現(xiàn)對(duì)S6700讀/寫(xiě)模塊的控制,進(jìn)而完成對(duì)射頻卡的讀/寫(xiě)、控制等操作。
2 系統(tǒng)組成
射頻卡讀卡器的硬件電路主要包括以下幾個(gè)部分:?jiǎn)纹瑱C(jī)系統(tǒng)、射頻卡讀/寫(xiě)模塊、通信電路、射頻卡、讀寫(xiě)器天線(xiàn)電路和各種指示信號(hào)電路。由于文中射頻卡讀寫(xiě)器是以門(mén)禁系統(tǒng)為應(yīng)用平臺(tái),考慮到門(mén)禁系統(tǒng)需要用到一些手動(dòng)操作來(lái)完成用戶(hù)與機(jī)器的簡(jiǎn)單溝通,所以設(shè)計(jì)中增加了鍵盤(pán)電路和LCD液晶顯示電路。其原理框圖如圖1所示。實(shí)際應(yīng)用中可以依據(jù)不同的自動(dòng)識(shí)別系統(tǒng)根據(jù)需要增刪相應(yīng)的電路。
2.1 讀/寫(xiě)模塊S6700
本文使用的S6700讀/寫(xiě)模塊是射頻卡實(shí)現(xiàn)無(wú)線(xiàn)通信的核心模塊和關(guān)鍵接口芯片,支持13.56 MHz的多種射頻通信協(xié)議,具備閑置、掉電、安全功率三種供電模式,電源電壓為3~5.5 V,發(fā)送電流為80~120 mA,射頻調(diào)制系數(shù)為10%或100%可選,通過(guò)三線(xiàn)制串行接口總線(xiàn)(Din,Dout,Sclock)與單片機(jī)通信。具體工作時(shí),通信端口Sclock口、Din口、Dout口分別與單片機(jī)P2口的低3位P2.O,P2.1,P2.2口相連。在Sclock同步時(shí)鐘作用下,通過(guò)Din引腳接收單片機(jī)信息,按照射頻通信協(xié)議ISO/IEC15693-3編碼后,予以調(diào)制系數(shù)為100%或10%的調(diào)制。接收時(shí),由Rxinput引腳輸入天線(xiàn)獲取的射頻卡信息,經(jīng)整流二極管包絡(luò)檢測(cè),進(jìn)而濾波、放大、解碼后,在Sclock同步時(shí)鐘作用下,通過(guò)Dout引腳送單片機(jī)。
2.2 LCD液晶顯示電路
LCD選用的是金鵬電子有限公司的OCMJB系列液晶顯示器,共有14個(gè)引腳。在接口電路連接上,直接將單片機(jī)的P0口作為數(shù)據(jù)口與LCD的8位數(shù)據(jù)端口相連,P2口的P2.3,P2.4作為控制口分別與LCD的REQ口與BUSY口相連。
2.3 鍵盤(pán)掃描電路
需要10個(gè)數(shù)字輸入鍵,外加一個(gè)確認(rèn)鍵和一個(gè)退格鍵,總共12個(gè)按鍵,做成3×4鍵盤(pán)。鍵盤(pán)掃描通過(guò)系統(tǒng)分配的3條列線(xiàn)和4條行線(xiàn),采用逐行掃描或逐列掃描的辦法。在接口電路連接上,單片機(jī)分配P1口的低四位作為行線(xiàn),P1.4,P1.5,P1.6口作為列線(xiàn),共同實(shí)現(xiàn)對(duì)鍵盤(pán)的掃描。
2.4 外部中斷電路
當(dāng)外界通過(guò)INT0口或INT1口向系統(tǒng)連續(xù)輸入2個(gè)時(shí)鐘周期的低電平時(shí),系統(tǒng)便會(huì)發(fā)出一個(gè)中斷信號(hào)。在設(shè)計(jì)中,通過(guò)兩個(gè)按鍵發(fā)出外部中斷,按鍵的一腳與單片機(jī)的中斷入口(INT0,INT1)相連,另一腳接地。
3 系統(tǒng)軟件設(shè)計(jì)
讀卡器的軟件設(shè)計(jì)是在MCS51調(diào)試環(huán)境中開(kāi)發(fā)的,MCS51調(diào)試環(huán)境支持C語(yǔ)言和匯編語(yǔ)言。整個(gè)軟件設(shè)計(jì)主要包括射頻卡讀寫(xiě)控制程序、鍵盤(pán)控制程序、液晶顯示程序等。考慮到本文讀卡器是以門(mén)禁系統(tǒng)為應(yīng)用實(shí)例,增加了添加用戶(hù)、掛失、更改密碼3個(gè)輔助功能。
3.1 射頻卡讀/寫(xiě)控制程序設(shè)計(jì)
在本次設(shè)計(jì)中選用的射頻卡是TI公司的疏耦合IC卡Tag-it HF-I,遵循ISO/IEC15693-3通信協(xié)議。讀/寫(xiě)控制程序的具體過(guò)程如流程圖2所示。
時(shí)間寄存器主要用來(lái)設(shè)置數(shù)字解碼器的采樣點(diǎn),在對(duì)射頻卡進(jìn)行其他操作前,需先對(duì)時(shí)間寄存器進(jìn)行初始化。卡機(jī)通信需在一定的時(shí)間內(nèi)完成,若在規(guī)定的時(shí)間內(nèi)讀卡器檢測(cè)不到應(yīng)答信號(hào),則認(rèn)為無(wú)卡,具體通過(guò)TIME0定時(shí)器在規(guī)定的時(shí)間內(nèi)檢測(cè)SOF信號(hào)來(lái)實(shí)現(xiàn)。所以,首先要初始化TIME0定時(shí)器,并對(duì)TIME0開(kāi)中斷,將讀命令串寫(xiě)入命令發(fā)送緩沖區(qū),另外需要計(jì)算命令串的CRC驗(yàn)證碼(循環(huán)驗(yàn)證碼),接著存放命令串,最后調(diào)用發(fā)送模塊將其一起發(fā)送。發(fā)送命令時(shí)鐘由單片機(jī)控制,接收時(shí)鐘由讀卡器控制,因此在發(fā)送完命令串后接著要將時(shí)鐘控制權(quán)交還給讀卡器,定時(shí)器TIME0開(kāi)始計(jì)時(shí),檢測(cè)射頻卡發(fā)回的開(kāi)始位信號(hào),如果在規(guī)定時(shí)間內(nèi)檢測(cè)不到信號(hào),定時(shí)器TIMER0便會(huì)發(fā)生溢出信號(hào),CP U相應(yīng)溢出中斷,進(jìn)入TIME0的中斷服務(wù)子程序,將無(wú)卡標(biāo)志位NOCARD置1,程序就會(huì)跳回,重新開(kāi)始定時(shí)檢測(cè)。當(dāng)在計(jì)時(shí)范圍內(nèi)檢測(cè)到SOF信號(hào)時(shí),按照返回?cái)?shù)據(jù)格式,接收數(shù)據(jù)標(biāo)志(Flags)字節(jié)、安全狀態(tài)字節(jié)等相應(yīng)字節(jié)的數(shù)據(jù),最后接收結(jié)束位EOF。若數(shù)據(jù)標(biāo)志的最后一位為1,表明發(fā)送命令有誤,射頻卡會(huì)發(fā)送錯(cuò)誤類(lèi)型標(biāo)識(shí)字節(jié),否則射頻卡會(huì)依次發(fā)送數(shù)據(jù),調(diào)用接收模塊,將接收的數(shù)據(jù)依次存放于接收緩沖區(qū),用于對(duì)用戶(hù)信息的核對(duì)。
在射頻卡讀/寫(xiě)控制程序中,命令發(fā)送模塊和數(shù)據(jù)接收模塊是射頻卡讀/寫(xiě)的關(guān)鍵所在。命令發(fā)送模塊首先必須發(fā)出起始位SOF信號(hào),然后發(fā)送具體的命令串。命令串的發(fā)送分為3部分:命令字發(fā)送;數(shù)據(jù)字發(fā)送;校驗(yàn)字節(jié)發(fā)送。命令字的發(fā)送必須是高位在先,而數(shù)據(jù)字發(fā)送則是低位在先,CRC校驗(yàn)碼放在命令串最后,同命令串一起發(fā)送。命令串的傳送通過(guò)移位實(shí)現(xiàn),再通過(guò)DIN口逐位發(fā)送。在命令發(fā)送結(jié)束后,還要發(fā)送一個(gè)結(jié)束位EOF。接收模塊在接收時(shí)必須先把時(shí)鐘控制權(quán)交給讀/寫(xiě)模塊,接收時(shí)每次按位接收一個(gè)字節(jié)的內(nèi)容,采樣間隔為10μs,必須在規(guī)定的時(shí)間內(nèi)完成接收工作,否則認(rèn)為接收出錯(cuò)。程序通過(guò)定時(shí)器TIMER1實(shí)現(xiàn)計(jì)時(shí),當(dāng)計(jì)時(shí)到時(shí)IMER1發(fā)出溢出中斷信號(hào),CPU響應(yīng)溢出中斷,進(jìn)入TIMER1中斷服務(wù)子程序,將接收錯(cuò)誤標(biāo)志位VICCERROR置1,表示發(fā)生錯(cuò)誤。程序在接收完一個(gè)字節(jié)的內(nèi)容后判斷VICCERROR的狀態(tài),如果發(fā)生錯(cuò)誤,程序跳回,重新發(fā)送讀命令。
3.2 液晶顯示控制程序
LCD是通過(guò)P0口與P2口的P2.3,P2.4共同完成控制的。其中P0口作為數(shù)據(jù)口,P2.3,P2.4口作為控制口。首先通過(guò)P2.3口將REQ清零,準(zhǔn)備向LCD寫(xiě)入數(shù)據(jù),然后通過(guò)P2.4口讀出LCD的BUSY口的狀態(tài)。如果LCD為空閑狀態(tài),便可向LCD寫(xiě)入數(shù)據(jù)。向LCD寫(xiě)入數(shù)據(jù)需先將數(shù)據(jù)送到LCD數(shù)據(jù)線(xiàn),然后給REQ一個(gè)上升沿,將數(shù)據(jù)線(xiàn)上的內(nèi)容寫(xiě)入LCD。
3.3 鍵盤(pán)控制程序
鍵盤(pán)掃描通過(guò)P1口完成,先給第1列加低電平其余位皆為高電平,檢查第1列是否有鍵按下,沒(méi)有則檢查第2列,再?zèng)]有,檢查第3列,第3列仍沒(méi)有,返回重新檢查第1列,依次循環(huán)檢查。當(dāng)有鍵按下時(shí)將鍵碼存下,再重復(fù)檢查若干次,實(shí)現(xiàn)去抖。最后通過(guò)查表得到有效鍵值返回。
3.4 輔助功能程序
射頻卡讀出的信息由2部分組成,首先是一串用戶(hù)識(shí)別碼,可在添加用戶(hù)功能中向射頻卡寫(xiě)入,其次就是一個(gè)字節(jié)的用戶(hù)代號(hào),設(shè)計(jì)用戶(hù)代號(hào)主要是考慮用戶(hù)掛失所用,在對(duì)用戶(hù)信息驗(yàn)證時(shí),先對(duì)用戶(hù)代碼驗(yàn)證,然后對(duì)用戶(hù)識(shí)別碼進(jìn)行驗(yàn)證,其中任何一環(huán)節(jié)出現(xiàn)錯(cuò)誤,則認(rèn)為是非法用戶(hù),無(wú)法開(kāi)啟門(mén)鎖。在具體設(shè)計(jì)上,“添加用戶(hù)”主要通過(guò)向用戶(hù)的新卡中寫(xiě)入合法的用戶(hù)信息識(shí)別碼來(lái)實(shí)現(xiàn)。此項(xiàng)功能屬于用戶(hù)的私人操作,在操作前必須經(jīng)過(guò)密碼驗(yàn)證,密碼驗(yàn)證通過(guò)后,再由用戶(hù)輸入此卡對(duì)應(yīng)的編號(hào)。掛失功能也是本文設(shè)計(jì)中的一個(gè)必備功能,它主要通過(guò)設(shè)置用戶(hù)狀態(tài)標(biāo)志字來(lái)實(shí)現(xiàn),在程序設(shè)計(jì)中給每一個(gè)用戶(hù)分配一個(gè)字節(jié)的用戶(hù)狀態(tài)標(biāo)志字,通過(guò)驗(yàn)證狀態(tài)字來(lái)判斷是處于正常狀態(tài)還是掛失狀態(tài)。同添加用戶(hù)功能一樣,該功能亦屬于用戶(hù)私人操作,也要經(jīng)過(guò)密碼驗(yàn)證。上述2項(xiàng)輔助功能都需經(jīng)過(guò)密碼驗(yàn)證,因此對(duì)密碼的保密性、可更改性都提出了較高的要求,在本文設(shè)計(jì)中同樣設(shè)置了“更改密碼功能”,用戶(hù)更改密碼的前提是輸入正確的用戶(hù)密碼,然后由用戶(hù)連續(xù)兩次輸入格式和數(shù)據(jù)完全相同的密碼,最后將新密碼替換原先的舊密碼。
4 結(jié)語(yǔ)
本文設(shè)計(jì)的射頻卡讀卡器是應(yīng)工程實(shí)際需求而專(zhuān)門(mén)設(shè)計(jì),采用單片機(jī)為主控器件,充分結(jié)合硬件、軟件優(yōu)勢(shì),采用低功耗、體積小、集成度高的元器件,減小了系統(tǒng)體積、重量、功耗,提高了編程靈活性。應(yīng)用實(shí)踐證明:該讀卡器設(shè)計(jì)合理可行,具有工作可靠、操作方便、成本低廉、響應(yīng)速度快、抗干擾能力強(qiáng)等優(yōu)點(diǎn)。另外,該讀卡器可以方便地與包括PC在內(nèi)的串口設(shè)備連接,易于針對(duì)不同的的應(yīng)用對(duì)象嵌入到其他各種射頻識(shí)別應(yīng)用系統(tǒng)中,拓展能力強(qiáng),應(yīng)用前景十分廣闊。