<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于ARM嵌入式系統(tǒng)的RFID驅(qū)動程序設(shè)計

          基于ARM嵌入式系統(tǒng)的RFID驅(qū)動程序設(shè)計

          作者: 時間:2011-10-24 來源:網(wǎng)絡(luò) 收藏

          RFID具有讀取速度快、讀取距離遠、儲存信息量大、標(biāo)簽上數(shù)據(jù)可加密、使用壽命長、工作環(huán)境適應(yīng)性強等多種優(yōu)點,已經(jīng)在各領(lǐng)域廣泛應(yīng)用[1]。
          將RFID技術(shù)與相結(jié)合,將射頻識別模塊嵌入到中,在嵌入式Linux下通過設(shè)計驅(qū)動程序?qū)崿F(xiàn)射頻模塊的收發(fā)功能。嵌入式RFID系統(tǒng)增加了RFID技術(shù)的通用性和可移植性,豐富了通信接口外設(shè)功能,提升了嵌入式技術(shù)在無線通信領(lǐng)域的發(fā)展空間。
          當(dāng)前的嵌入式系統(tǒng)中并不支持RFID系統(tǒng),所以要進行硬件和軟件兩方面的擴展。硬件方面主要根據(jù)nRF905無線收發(fā)器的電氣特性進行接口擴展,利用基于9嵌入式平臺的擴展口對nRF905進行控制;軟件方面利用Linux內(nèi)核良好的移植性和擴展性,編寫驅(qū)動程序控制射頻模塊的收發(fā)功能,在底層驅(qū)動以收集和分組數(shù)據(jù)并傳遞給上層應(yīng)用程序,由上層應(yīng)用程序與用戶進行交互。本文所研究的基于嵌入式系統(tǒng)的RFID驅(qū)動,將為嵌入式RFID系統(tǒng)提供底層軟硬件接口程序,為嵌入式內(nèi)核增添RFID管理機制,為上層應(yīng)用程序提供良好服務(wù),降低嵌入式RFID的開發(fā)難度,縮短開發(fā)周期,從而降低其成本,使RFID的應(yīng)用更加普及。
          1 硬件電路的實現(xiàn)
          圖1是nRF905無線收發(fā)器接口擴展的硬件電路原理圖,硬件電路的實現(xiàn)主要基于S3C2440 9微處理器和單片nRF905無線收發(fā)器的互聯(lián),以及根據(jù)nRF905電氣特性所做的一些外接電路。

          基于ARM嵌入式系統(tǒng)的RFID驅(qū)動程序設(shè)計

          S3C2440是一款采用920T內(nèi)核的高性能32 bit處理器,其主頻高達405 MHz,采用5級流水線和哈佛結(jié)構(gòu)。S3C2440包括兩個SPI接口,每個接口分別有兩個8 bit數(shù)據(jù)移位寄存器用于發(fā)送和接收。在SPI發(fā)送期間,數(shù)據(jù)同時發(fā)送(串行移出)和接收(串行移入)[2]。因此,利用處理器的SPI接口,可以很方便地用SPI接口與nRF905無線收發(fā)模塊進行數(shù)據(jù)傳輸。
          單片nRF905無線收發(fā)器工作在433/868/915 MHz的ISM頻段。由一個完全集成的頻率調(diào)制器、一個帶解調(diào)器的接收器、一個功率放大器、一個晶體振蕩器和一個調(diào)節(jié)器組成。其所具有的ShockBurst工作模式可以自動產(chǎn)生前導(dǎo)碼和CRC??梢酝ㄟ^SPI接口進行編程配置。
          nRF905采用Nordic公司的VLSI ShockBurst技術(shù)。ShockBurst技術(shù)使nRF905能夠提供高速的數(shù)據(jù)傳輸而不需要昂貴的高速MCU來進行數(shù)據(jù)處理/時鐘覆蓋。通過將與RF協(xié)議有關(guān)的高速信號處理器放到芯片內(nèi),nRF905提供給微控制器一個SPI接口,速率由專為控制器設(shè)定的接口速度決定。nRF905通過ShockBurst工作模式在RF以最大速率進行連接時,降低數(shù)字應(yīng)用部分的速率來降低在應(yīng)用中的平均電流消耗。在ShockBurst接收模式中,地址匹配(AM)和數(shù)據(jù)準(zhǔn)備就緒(DR)信號通知微處理器一個有效的地址和數(shù)據(jù)包已經(jīng)各自接收完成。在ShockBurst發(fā)送模式中,nRF905自動產(chǎn)生前導(dǎo)碼和CRC校驗碼,數(shù)據(jù)準(zhǔn)備就緒(DR)信號通知微處理器數(shù)據(jù)傳輸已經(jīng)完成[3]。
          2 設(shè)計
          2.1 整體驅(qū)動設(shè)計思想

          的設(shè)計采用自底而上(Down-Top)的方法。優(yōu)先設(shè)計底層部分即SPI接口的驅(qū)動程序,然后再設(shè)計上層RFID驅(qū)動。這種自低而上設(shè)計方法可以把大模塊分散為幾個小模塊,把大設(shè)計分為小設(shè)計,便于開發(fā)驗證,并且符合Linux模塊化的設(shè)計思想,是一種高效的設(shè)計方法。
          nRF905采用SPI接口與外界進行通信,因此底層SPI驅(qū)動主要完成nRF905的SPI和微處理器S3C2440的SPI模塊間的通信。上層RF驅(qū)動程序通過SPI接口向nRF905發(fā)送指令和數(shù)據(jù),最終由nRF905的主機控制器控制射頻收發(fā)器完成數(shù)據(jù)收發(fā),實現(xiàn)射頻模塊間的無線通信。
          2.2 SPI驅(qū)動程序設(shè)計
          在硬件電路中,微處理器S3C2440的SPI0模塊與nRF905中的SPI接口相連接。SPI驅(qū)動的作用即完成主SPI與nRF905中從SPI的數(shù)據(jù)傳輸。為了便于驗證功能,提高項目開發(fā)效率,底層SPI驅(qū)動設(shè)計為獨立的模塊,并且進行調(diào)試,在SPI驅(qū)動設(shè)計的基礎(chǔ)上,完成上層RF驅(qū)動。
          在ARM9嵌入式平臺的內(nèi)核Linux2.6.12中,不包含SPI驅(qū)動程序,而在Linux內(nèi)核之后的版本中包含了SPI驅(qū)動。這樣,就可以移植新版本中的SPI驅(qū)動到本嵌入式平臺Linux2.6.12中。雖然這種SPI驅(qū)動通用性和功能性都較強,但其代碼量大,較多功能并不符合本設(shè)計的要求。因此,本設(shè)計選擇重新編寫SPI底層驅(qū)動,簡化其功能,建立環(huán)形緩沖區(qū),提高數(shù)據(jù)收發(fā)效率。
          SPI驅(qū)動程序作為設(shè)備文件,包含write、read、open、release、ioctl等幾個操作[4],其中關(guān)鍵性的硬件操作為讀寫操作,寫操作的主要作用是把用戶數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū),并控制微控制器中的主SPI發(fā)送數(shù)據(jù)到nRF905中;讀操作與寫操作類似,而過程相反,即把主SPI接到的數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū),再由內(nèi)核緩沖區(qū)拷貝到用戶空間申請好的數(shù)據(jù)結(jié)構(gòu)中。對SPI設(shè)備數(shù)據(jù)接收的監(jiān)控,驅(qū)動程序采用中斷的方式來通知系統(tǒng)SPI數(shù)據(jù)是否收發(fā)完畢,在SPI設(shè)備每發(fā)送完一組數(shù)據(jù)或接收到一組數(shù)據(jù)后,就會觸發(fā)中斷,信號由IRQ線進入,傳入CPU進行中斷處理。
          SPI驅(qū)動程序的寫過程包括建立數(shù)據(jù)結(jié)構(gòu)、建立環(huán)形緩沖區(qū),從用戶空間把數(shù)據(jù)拷貝到數(shù)據(jù)結(jié)構(gòu)中、調(diào)用write函數(shù)把數(shù)據(jù)拷貝進環(huán)形緩沖區(qū)中、寫滿后發(fā)送第一組數(shù)據(jù)到發(fā)送寄存器。當(dāng)SPI發(fā)送寄存器中的數(shù)據(jù)發(fā)送完畢后,會發(fā)出中斷信號,觸發(fā)微處理器中斷,系統(tǒng)進入中斷上下文。為了縮短中斷處理時間,提高中斷處理效率,驅(qū)動程序中采用了頂/底半部的處理方法[5],即中斷處理時間盡量地短,在中斷處理例程中調(diào)用tasklet調(diào)度函數(shù),將需要較多時間的中斷處理發(fā)到tasklet(即底半部)中處理。在tasklet中會把環(huán)形緩沖區(qū)的數(shù)據(jù)寫入發(fā)送寄存器,最終由SPI控制器發(fā)送出去。
          SPI驅(qū)動程序的讀過程和寫過程類似,SPI接收寄存器接到數(shù)據(jù)后觸發(fā)中斷。CPU接到中斷信號后進入中斷處理例程,調(diào)度tasklet進入底半部進行中斷處理,把接收寄存器中的數(shù)據(jù)拷貝到環(huán)形緩沖區(qū)中,然后喚醒正在休眠的進程,由read函數(shù)把環(huán)形緩沖區(qū)中的數(shù)據(jù)拷貝到申請好的數(shù)據(jù)結(jié)構(gòu)中,再拷貝至用戶空間。
          2.3 設(shè)計
          完成SPI底層驅(qū)動后,上層RFID驅(qū)動的內(nèi)容主要是對nRF905配置寄存器進行配置,包括發(fā)送接收數(shù)據(jù)的字節(jié)數(shù)、目標(biāo)地址、工作模式、時鐘頻率等通過nRF905自定義的SPI指令寫入寄存器中。因此要對SPI驅(qū)動中的write/read函數(shù)進行封裝,通過調(diào)用SPI驅(qū)動中的函數(shù)完成整體驅(qū)動的寄存器配置和數(shù)據(jù)傳輸功能。
          RFID驅(qū)動程序作為設(shè)備文件,同樣分為write、read、open、release、ioctl等幾個操作。RFID驅(qū)動程序的寫操作過程:首先將用戶空間中的數(shù)據(jù)拷貝至數(shù)據(jù)結(jié)構(gòu)中;然后使nRF905進入Standby模式,調(diào)用SPIwrite函數(shù)對數(shù)據(jù)寄存器和地址寄存器進行配置,把發(fā)送數(shù)據(jù)和目標(biāo)地址寫入本地nRF905,之后進入ShockBurst發(fā)送模式,由本地nRF905向目標(biāo)nRF905發(fā)送數(shù)據(jù);最后進程進入休眠狀態(tài),等待數(shù)據(jù)準(zhǔn)備信號DR觸發(fā)中斷,由中斷處理例程喚醒進程,完成數(shù)據(jù)發(fā)送。圖2為RFID的發(fā)送流程圖。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();