基于ARM嵌入式系統(tǒng)的RFID驅(qū)動(dòng)程序設(shè)計(jì)
RFID的讀操作將判斷緩沖區(qū)是否為空,如果不為空,就把緩沖區(qū)中的數(shù)據(jù)拷貝至數(shù)據(jù)結(jié)構(gòu)中,并拷至用戶空間中;如果為空,進(jìn)程就會(huì)進(jìn)入休眠,等待緩沖區(qū)接收到數(shù)據(jù)后,進(jìn)入中斷喚醒進(jìn)程。在進(jìn)入ShockBurst RX模式后,本地nRF905會(huì)自動(dòng)監(jiān)測(cè)空中的信息,在nRF905發(fā)現(xiàn)和接收頻率相同的載波時(shí),載波檢測(cè)信號(hào)CD被置高,觸發(fā)中斷,在中斷例程中只是延時(shí)一段時(shí)間,等待nRF905接收到有效的目的地址時(shí),地址匹配信號(hào)置高。當(dāng)nRF905接收到有效的數(shù)據(jù)包后,數(shù)據(jù)準(zhǔn)備就緒信號(hào)DR會(huì)觸發(fā)中斷,進(jìn)入中斷例程,進(jìn)入Standby模式,把接收到的數(shù)據(jù)通過SPI接口讀入緩沖區(qū)內(nèi),而后喚醒進(jìn)程,把緩沖區(qū)中的數(shù)據(jù)拷貝至用戶空間中。當(dāng)所有的數(shù)據(jù)被讀出后,nRF905的AM和DR信號(hào)線會(huì)被置低。nRF905切換到下一狀態(tài)。RFID驅(qū)動(dòng)接收流程如圖3所示。
3 功能測(cè)試
測(cè)試主要分為兩部分,首先對(duì)底層SPI接口部分做調(diào)試,然后在此基礎(chǔ)上,對(duì)RFID驅(qū)動(dòng)進(jìn)行功能測(cè)試。
硬件方面,利用S3C2440開發(fā)板的擴(kuò)展口與nRF905模塊連接,擴(kuò)展口中用到的GPIO資源在驅(qū)動(dòng)程序中設(shè)置。另外,用RS-232串口將開發(fā)板與PC機(jī)相連,利用內(nèi)核的Debug功能[6],通過PC機(jī)對(duì)開發(fā)板進(jìn)行控制,完成驅(qū)動(dòng)加載和應(yīng)用程序的運(yùn)行。
軟件方面,基于S3C2440的嵌入式平臺(tái)需要完整的嵌入式操作系統(tǒng)資源,包括bootloader、kernel、文件系統(tǒng)。在對(duì)內(nèi)核進(jìn)行剪裁后,將bootloader、kernel、文件系統(tǒng)通過JTAG燒入NAND Flash中。操作系統(tǒng)要保證內(nèi)核、文件系統(tǒng)以及硬件設(shè)備正常運(yùn)行。
3.1 SPI驅(qū)動(dòng)功能測(cè)試
SPI驅(qū)動(dòng)測(cè)試主要測(cè)試驅(qū)動(dòng)程序的功能,測(cè)試驅(qū)動(dòng)程序是否能夠控制SPI主從設(shè)備正確傳輸數(shù)據(jù)。資源包括S3C2440開發(fā)平臺(tái)、Linux2.6.12內(nèi)核源碼包、示波器。系統(tǒng)運(yùn)行后,加載SPI驅(qū)動(dòng),運(yùn)行編寫的上層應(yīng)用程序進(jìn)行數(shù)據(jù)收發(fā),并用示波器觀察波形。
3.2 RFID驅(qū)動(dòng)程序測(cè)試
在測(cè)試SPI驅(qū)動(dòng)成功后,重新啟動(dòng)系統(tǒng),待系統(tǒng)成功運(yùn)行后,加載RFID驅(qū)動(dòng)程序,運(yùn)行為其編寫的測(cè)試程序,測(cè)試兩nRF905無(wú)線模塊間的通信。S3C2440的GPIO資源與nRF905信號(hào)線對(duì)應(yīng)關(guān)系如下:
Power down模式: PWR GPJ12
載波檢測(cè)輸出: CD GPG6
地址匹配輸出: AM GPB9
數(shù)據(jù)就緒輸出: DR GPG1
SPI主入從出: MISO GPE11
SPI主出從入: MOSI GPE12
SPI時(shí)鐘: SCK GPE13
SPI使能: CSN GPB10
發(fā)送/接收使能: TRX_CE GPG8
發(fā)送/接收模式: TX_EN GPG0
兩個(gè)平臺(tái)分別為:ARM9嵌入式平臺(tái)和MSP430單片機(jī)平臺(tái)。在ARM平臺(tái)運(yùn)行發(fā)送測(cè)試程序,而單片機(jī)平臺(tái)運(yùn)行接收測(cè)試程序,之后交換。接收端將接收到發(fā)送端發(fā)送的數(shù)據(jù),并將數(shù)據(jù)在PC機(jī)終端顯示。
當(dāng)ARM發(fā)送端的應(yīng)用程序中發(fā)送字符串“aaaaaaaa”時(shí),單片機(jī)端的nRF905模塊接收寄存器中收到轉(zhuǎn)換后的ASCII碼“97”;當(dāng)ARM端作為接收端而單片機(jī)作為發(fā)送端時(shí),ARM端運(yùn)行接收程序后,在用戶空間即顯示終端上顯示了接收到的數(shù)據(jù)“abcd…”。表明此RFID驅(qū)動(dòng)程序成功實(shí)現(xiàn)了控制nRF905無(wú)線收發(fā)器進(jìn)行數(shù)據(jù)接收傳輸?shù)墓δ堋?BR> 本文介紹了一種基于ARM9 S3C2440嵌入式平臺(tái)擴(kuò)展RFID驅(qū)動(dòng)的設(shè)計(jì)方案,設(shè)計(jì)了硬件擴(kuò)展電路和相應(yīng)的驅(qū)動(dòng)程序,通過了并測(cè)試。實(shí)現(xiàn)了嵌入式平臺(tái)間的RFID短距離即時(shí)通信功能。嵌入式RFID驅(qū)動(dòng)將推動(dòng)RFID技術(shù)在應(yīng)用領(lǐng)域中的發(fā)展,將會(huì)支持更多的射頻硬件,根據(jù)此驅(qū)動(dòng)可以開發(fā)更多的應(yīng)用程序,滿足多種需求。
參考文獻(xiàn)
[1] 董麗華.RFID技術(shù)與應(yīng)用[M].北京:電子工業(yè)出版社,2008.
[2] SAMSUNG.S3C2440A user’s manual reltminary[OL]. Revision0,2004.
[3] NORDIC Semiconductor.nRF905_rev1_1[OL].2004:1-36.
[4] 劉淼.嵌入式系統(tǒng)接口設(shè)計(jì)與Linux驅(qū)動(dòng)程序開發(fā)[M]. 北京:北京航空航天大學(xué)出版社,2006.
[5] Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman. Linux device drivers[M].Sebastopol:O’Reilly Media,2005.
[6] BOVERT D P,MARCO C著.深入理解Linux內(nèi)核(第三版)[M].陳莉君,張瓊聲,張宏偉,譯.北京:中國(guó)電力出版社,2007.
評(píng)論