一種基于S3C6410的RFID讀卡系統(tǒng)設(shè)計(jì)方案
引言
射頻識(shí)別(RFID)是一種新興的通過射頻載波來發(fā)現(xiàn)目標(biāo)和進(jìn)行無線數(shù)據(jù)交換的識(shí)別與跟蹤技術(shù)。RFID與其他技術(shù)相比,具有識(shí)別速度快、抗干擾能力強(qiáng)、安全性高、非接觸等優(yōu)點(diǎn)。因此該技術(shù)已廣泛應(yīng)用于門禁系統(tǒng)、物流配送、校園卡等多種日常生活,作力物聯(lián)網(wǎng)關(guān)鍵技術(shù),未來的發(fā)展?jié)摿薮?。但是現(xiàn)有的讀卡器普遍存在主頻低、處理速度慢、便攜性差等缺點(diǎn),難以滿足日益發(fā)展的使用需求。針對(duì)這些不足,本文基于高主頻、性能強(qiáng)悍的S3C6410嵌入式微處理器,選用新型的CR95HF射頻芯片,開發(fā)設(shè)計(jì)了一款工作在高頻13.56 MHz的手持式RFID讀卡器,同時(shí)創(chuàng)新性地搭載新興的Android嵌入式系統(tǒng),支持ISO14443、ISO15693等多種協(xié)議,處理速度快且準(zhǔn)確度高。
1 系統(tǒng)結(jié)構(gòu)與工作原理
本文設(shè)計(jì)的嵌入式RFID讀卡系統(tǒng)由微處理器、觸摸屏、電源、射頻、存儲(chǔ)、天線等組成。整體結(jié)構(gòu)如圖1所示。
讀卡器要求處理速度快,能夠?qū)崟r(shí)顯示信息,因而選用性能強(qiáng)悍、功耗極低的S3C6410嵌入式微處理器作為核心,其基于先進(jìn)的ARM11內(nèi)核,燒寫Android嵌入式系統(tǒng)。射頻芯片采用ST公司的新型非接觸芯片CR95HF,與微處理器之間通過串口進(jìn)行通信。工作原理為:讀取標(biāo)簽數(shù)據(jù)時(shí),將標(biāo)簽靠近讀卡器,觸摸屏操控端傳輸讀命令給S3C6410,其操控射頻模塊將該命令發(fā)送給標(biāo)簽,標(biāo)簽收到后將所需數(shù)據(jù)返還給讀卡器顯示;執(zhí)行寫入操作時(shí),S3C6410收到觸摸屏寫命令后操控射頻模塊向標(biāo)簽寫入數(shù)據(jù)。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 微處理器外圍和電源電路設(shè)計(jì)
本設(shè)計(jì)采用三星公司的S3C6410嵌入式微處理器作為主控芯片,其主頻高達(dá)667 MHz,是一款基于ARM11內(nèi)核的高性能RISC處理器。S3C 6410包括電源管理、串口、SPI、I2C總線、USB和I/O等多種硬件接口,具有性能強(qiáng)悍、處理速度快且功耗低等優(yōu)點(diǎn),能滿足系統(tǒng)的設(shè)計(jì)需要。并行使用2片128M DDR芯片K4X1G163PC來實(shí)現(xiàn)256M的RAM電路。主控芯片利用串口和射頻模塊通信,并通過USB接口和上位機(jī)通信。
系統(tǒng)設(shè)計(jì)了5 V直流和3.7 V鋰電池兩種方式供電來滿足讀卡器手持需求,并用跳線帽選擇。鋰電池供電時(shí)讀卡器能手持使用。系統(tǒng)電源需要5 V和3.3 V兩種。3.7 V鋰電池通過升壓芯片轉(zhuǎn)化為5V,之后通過穩(wěn)壓芯片LM1117轉(zhuǎn)換為3.3 V給微處理器、射頻芯片供電。直流電源供電時(shí)通過LM1117就能完成供電。LM1117能支持接近1 A的大電流輸出,其電路如圖2所示。輸入為VCC5,輸出為VCC3.3.C1~C4為去耦電容,用于消除電源引腳自激,保持電源穩(wěn)定。
2.2 射頻電路及匹配網(wǎng)絡(luò)設(shè)計(jì)
本文設(shè)計(jì)的讀卡器射頻芯片采用CR95HF,其是ST公司具有SPI和串口的高頻13.56 MHz新型收發(fā)器芯片,支持ISO14443、ISO15693、ISO 18092等多種協(xié)議,主要用于RFID和NFC近場(chǎng)通信。射頻電路如圖3所示,CR95HF利用串口與微處理器通信,其串口引腳為UART_TX和UART_RX。將SSI_0、SSI_1接地置0來實(shí)現(xiàn)串口模式。上拉電阻R5、R6將電平鉗制在高電平,并起到限流保護(hù)作用。C2、C5為去耦電容。兩個(gè)TX和RX引腳連接匹配網(wǎng)絡(luò)和天線。
匹配網(wǎng)絡(luò)設(shè)計(jì)時(shí)首先通過0 Ω電阻和不焊的接地電容來構(gòu)成低通濾波器抑制高次諧波,之后設(shè)計(jì)匹配電容。采用PCB矩形天線,由于其與匹配網(wǎng)絡(luò)等效電容構(gòu)成13.56 MHz的LC諧振電路,從而可以得到電感參數(shù)進(jìn)行天線設(shè)計(jì)。設(shè)計(jì)PCB時(shí)注意將電源線加寬并與射頻部分隔離,盡量縮短射頻電路之間的連線長(zhǎng)度,并減少回路面積來防止PCB各線路的信號(hào)串?dāng)_和電磁干擾(EMI),提高制板的穩(wěn)定性。
2.3 觸摸屏與存儲(chǔ)電路
讀卡器采用4.3寸、分辨率為272×480的LCD液晶屏,能夠?qū)崿F(xiàn)良好的界面顯示。屏幕為電阻觸摸屏,利用24條I/O口與微處理器通信來顯示信息。微處理器通過10條控制I/O口和屏幕相連來實(shí)現(xiàn)控制功能。
內(nèi)核代碼、顯示數(shù)據(jù)、應(yīng)用程序和讀取的標(biāo)簽信息均需要存儲(chǔ),因而讀卡器設(shè)計(jì)了FLASH和SD卡。FLASH選用K9G8G08U0A芯片,1GB容量,利用片選信號(hào)CSN2控制,用來存儲(chǔ)內(nèi)核代碼與應(yīng)用軟件。SD卡容量為8GB,和微處理器通過高速M(fèi)MC接口相連,用來存儲(chǔ)顯示數(shù)據(jù)和標(biāo)簽信息,其電路如圖4所示。時(shí)鐘引腳為MMC0_CLK,MMC0_CDN、MMC0_WPN、MMC0_CMD為控制引腳,用來控制SD卡讀寫。R17~R24為上拉電阻,MM C0_DATA0~MMC0_DATA3為數(shù)據(jù)通信引腳,用來傳輸讀寫數(shù)據(jù)。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 嵌入式系統(tǒng)移植
本讀卡器移植嵌入式Android 2.3操作系統(tǒng)并開發(fā)RFID應(yīng)用軟件。Android是谷歌公司推出的基于Linux內(nèi)核的手機(jī)操作系統(tǒng),是一種真正開源且功能強(qiáng)大的嵌入式移動(dòng)系統(tǒng),采用軟件堆層架構(gòu)。嵌入式系統(tǒng)移植如圖5所示。PC機(jī)通過arm-linux-gcc交叉編澤工具構(gòu)建開發(fā)環(huán)境,編譯Uboot生成燒入FLASH引導(dǎo)程序,編譯Linux內(nèi)核生成Android所需的底層映像zImage,并裁減、編譯Android源碼生成根系統(tǒng)rootfs. yaffs2,將以上文件導(dǎo)入SD卡來實(shí)現(xiàn)系統(tǒng)的移植和燒寫。
3.2 讀卡器驅(qū)動(dòng)設(shè)計(jì)
讀卡器軟件主要由底層驅(qū)動(dòng)、數(shù)據(jù)處理及交互界面組成。微處理器和射頻芯片通過串口通信,串口驅(qū)動(dòng)的開發(fā)使用Android NDK將Linux的C函數(shù)通過JNI接口生成相應(yīng)的.so動(dòng)態(tài)鏈接庫(kù)供Java語言開發(fā)的安卓軟件使用。由于數(shù)據(jù)采用十六進(jìn)制傳輸,因而串口通信需要配置為原始數(shù)據(jù)輸入/輸出。為提高通信速率,本文采用高速波特率921 600 b/s,并通過奇偶校驗(yàn)有效降低了誤碼率,修改寄存器實(shí)現(xiàn)了8數(shù)據(jù)位的傳輸,較傳統(tǒng)7數(shù)據(jù)位速率提升1/8,主要C代碼如下:
CR95HF支持ISO14443、693等無線協(xié)議,根據(jù)協(xié)議標(biāo)準(zhǔn)調(diào)用串口函數(shù)和延時(shí)函數(shù)并加載數(shù)據(jù)來實(shí)現(xiàn)射頻驅(qū)動(dòng)。射頻指令格式如圖6所示。
由不同的CMD命令來選擇不同協(xié)議,協(xié)議命令參見表1。
3.3 數(shù)據(jù)處理
讀卡器需具有尋卡、防沖突和讀寫卡等功能。設(shè)置串口波特率和選擇協(xié)議,防沖突來判斷附近存在一張還是多張標(biāo)簽卡。根據(jù)所選CMD及返回結(jié)果對(duì)數(shù)據(jù)處理來實(shí)現(xiàn)讀卡器和標(biāo)簽的無線通信,其處理流程如圖7所示。
尋卡、防沖突后選擇地址進(jìn)行讀寫卡,每地址可存儲(chǔ)32位數(shù)據(jù),默認(rèn)為ISO15693協(xié)議。由于原始數(shù)據(jù)輸入/輸出,因而收到信息后通過函數(shù)ByteArrToHex(byte[])轉(zhuǎn)換為Hex字符串。
搜尋到標(biāo)簽卡后,卡的惟一標(biāo)識(shí)符UID數(shù)據(jù)必須在Android讀卡器軟件里全局通用才能讓讀卡界面和寫卡界面共同來操控該數(shù)據(jù)。
由于各個(gè)Activity界面數(shù)據(jù)均獨(dú)立,而用傳統(tǒng)的Intent類在多個(gè)界面間傳輸同一組數(shù)據(jù)操作繁瑣且易發(fā)生數(shù)據(jù)沖突,本文通過Applicat ion類對(duì)接收到的標(biāo)簽卡信息存入數(shù)組RcvBuffer實(shí)現(xiàn)了全局共享。實(shí)現(xiàn)全局共享Java程序如下:
3.4 人機(jī)交互界面軟件設(shè)計(jì)
Android界面開發(fā)通過XML布局文件和Java程序混合實(shí)現(xiàn)。設(shè)計(jì)時(shí),在AndroidManifest.xml文件中注冊(cè)所需界面并通過網(wǎng)格視圖Grid View來實(shí)現(xiàn)主界面的圖片按鈕顯示。主界面包括設(shè)置、尋卡、讀卡、寫卡等功能按鈕,選擇后會(huì)通過Intent類調(diào)用相應(yīng)的子界面組件Activ ity,其通過setContentView()函數(shù)來啟動(dòng)相應(yīng)的XML。
4 系統(tǒng)測(cè)試
所開發(fā)的讀卡器實(shí)物如圖8所示,左側(cè)為主體,右側(cè)為天線。將RFID軟件下載到讀卡器后的測(cè)試結(jié)果如圖9、圖10所示。圖9為選用4張支持ISO15693協(xié)議的標(biāo)簽放到讀卡器附近時(shí)的尋卡結(jié)果,每個(gè)標(biāo)簽對(duì)應(yīng)唯一的UID標(biāo)識(shí)符,可見讀卡器尋到了附近的所有標(biāo)簽。圖10為讀卡測(cè)試結(jié)果,選擇UID和輸入地址時(shí)能夠成功讀取到該地址的標(biāo)簽數(shù)據(jù)“AA1107FF”??梢娮x卡系統(tǒng)能夠成功地與標(biāo)簽無線通信。
對(duì)讀卡器尋卡和讀寫卡各測(cè)試了400次,只有1次發(fā)生數(shù)據(jù)丟失,表明讀卡器穩(wěn)定性非常高。經(jīng)測(cè)試,無障礙物遮擋時(shí)讀卡器讀寫距離至少為6.4 cm,有木板、書、皮革等障礙物時(shí)讀寫距離至少為5 cm,可見識(shí)別距離能夠滿足需要。同時(shí)對(duì)ISO14443協(xié)議的標(biāo)簽測(cè)試也表明讀卡器可以對(duì)其穩(wěn)定讀寫。
結(jié)語
本文詳細(xì)介紹了基于S3C6410和CR95HF的新型嵌入式RFID讀卡系統(tǒng)解決方案。該讀卡器工作在13.56MHz的高頻頻段并支持多種協(xié)議。經(jīng)測(cè)試,該讀卡器能對(duì)符合協(xié)議的標(biāo)簽進(jìn)行穩(wěn)定的讀寫,具有便攜、性能強(qiáng)悍、功耗低等特點(diǎn)。本設(shè)計(jì)應(yīng)用范圍廣,可用于航空物流行業(yè)等要求便攜性強(qiáng)且處理速度快的場(chǎng)合。