亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        nRF24L01射頻模塊驅動程序設計

        2013-08-20 04:58:30嚴林祥張紅雨
        電子設計工程 2013年19期
        關鍵詞:驅動程序調用寄存器

        嚴林祥,張紅雨

        (電子科技大學 電子工程學院,四川 成都 611731)

        2.45 G無線通信的工作頻段處于2.405~2.485 GHz之間,這個頻段是國際規(guī)定的免費頻段。這就為2.45G無線技術的發(fā)展性提供了必要的有利條件。目前工業(yè)中可以采用的成熟且有統(tǒng)一的協(xié)議標準的應用領域有:微波爐、無繩電話、ZigBee、WI-FI、藍牙等。但也有采用封閉協(xié)議通信的2.45G無線通信技術,如:無線語音導游機,無線鼠標,2.45G有源RFID讀寫器等。它們在硬件上多使用 Nordic Semiconductor公司的nRF24L01系類芯片,各個廠家可以根據自己的需求制定自己的通信協(xié)議[1-2]。雖然藍牙、ZigBee都是標準協(xié)議,但是協(xié)議復雜、開發(fā)難度大、周期長,而非標準無線射頻協(xié)議具有低功耗、低成本、易開發(fā)等優(yōu)點。

        由于Linux操作系統(tǒng)具有開源、授權免費等優(yōu)勢,因此基于Linux操作系統(tǒng)的嵌入式平臺在工業(yè)控制、遠程通信等領域有著廣泛的應用前景。當nRF24L01射頻模塊作為嵌入式Linux平臺下的2.45G無線通信單元時,必須開發(fā)相應的驅動程序。因為在Linux系統(tǒng)中,所有的外部設備都被看作是目錄/dev下的一個文件,并為用戶的訪問提供了一種標準接口[3]。因此當我們設計好nRF24L01射頻模塊的驅動程序,我們就可以很方便用于項目的開發(fā),而不必知道它的具體存在形式。

        1 nRF24L01射頻模塊設計

        nRF24L01是一款工作在 2.4~2.5 GHz世界通用 ISM頻段的超低功耗單片無線收發(fā)器芯片。芯片內置頻率發(fā)生器、功率放大器、晶體振蕩器、調制器和解調器等功能模塊,外圍擴展少量的器件就可以利用全雙工的SPI串行接口與MCU實現(xiàn)通信。芯片有125個頻點,能夠實現(xiàn)點對點、點對多點的無線通信[1-2]。文中基于S3C2440-Linux的嵌入式平臺對nRF24L01射頻模塊進行驅動程序的設計。S3C2440可以使用GPIO模擬SPI接口的工作時序或者使用SPI控制器的方式對射頻模塊進行操作。使用GPIO模擬SPI接口的工作時序比較容易實現(xiàn),但是會導致大量的時間耗費在模擬SPI接口的時序上,訪問效率比較低[4]。因此本文研究S3C2440 SPI控制器的情況。S3C2440與nRF24L01射頻模塊通信主要由6根信號線組成,它們分別為:主機出從機進數據線(MOSI)、主機進從機出數據線(MISO)、時鐘線(SCK)、設備選擇線(CS)、中斷標志線(IRQ)和接收發(fā)送模式選擇線(CE)[4-5]。nRF24L01射頻模塊原理圖及其與S3C2440的接口連接圖,如圖1所示。

        nRF24L01射頻模塊主要由nRF24L01芯片、天線和晶體振蕩電路組成。S3C2440通過SPI接口對nRF24L01的相關寄存器進行操作,以實現(xiàn)對射頻模塊的初始化和相關信息處理。如當射頻模塊發(fā)送信息時,S3C2440通過GPG14選擇nRF24L01芯片,利用SPI接口控制nRF24L01芯片工作在發(fā)送模式,并通過天線將數據發(fā)送出去。發(fā)送完成后,則使芯片進入低功耗模式(掉電模式、待機模式Ⅰ和待機模式Ⅱ)。在S3C2440對nRF24L01芯片進行寄存器設置階段則一般使其進入待機模式Ⅰ。此時部分芯片內部振蕩器停振,射頻收發(fā)單元停止工作。待機模式Ⅱ在待機模式Ⅰ的基礎上激活了部分必須的時鐘緩存器[1-2]。

        圖1 nRF24L01射頻模塊與S3C2440連接圖Fig.1 Connect diagram of nRF24L01 RF module and S3C2440

        2 驅動程序的設計和實現(xiàn)

        文中根據Linux字符設備開發(fā)的方法來設計nRF24L01射頻模塊驅動程序。應用程序通過系統(tǒng)調用對射頻模塊的設備文件進行操作,而系統(tǒng)調用則通過設備文件的主設備號找到相應的設備驅動程序,然后讀取數據結構file_operations中相應的函數指針,最后把控制權就交給該指針所指向的函數[3]。因此nRF24L01射頻模塊的驅動程序的主要工作就是編寫子函數,并填充file_operations的各個域。主要包括open()、read()、ioctl()、pol()l、write()等函數。 調用 ioctl()函數可為用戶程序提供各種硬件控制的操作,從而滿足模塊在不同情況下的應用。

        2.1 open函數的設計

        應用程序在打開設備文件時需要調用open()函數。文中open()的主要功能:首先,通過函數 ioremap()完成 SPI物理地址到虛擬地址的重映射操作并使能SPI時鐘;然后,對S3C2440的SPI寄存器和S3C2440與nRF24L01的接口進行設置。打開設備的時候先使片選信號線失效,當具體對從設備操作時再使之有效。最后,初始化信號量和等待隊列,并且調用函數request_irq()來注冊中斷處理例程。打開設備的具體流程如圖2所示。

        nRF24L01的 IRQ引腳根據nRF24L01控制寄存器的不同配置可以代表不同突發(fā)情況的中斷事件:nRF24L01在發(fā)送模式下成功發(fā)送數據中斷;nRF24L01在接收模式下正確接收數據中斷;nRF24L01在發(fā)送模式下,達到最大重傳次數中斷[2]。中斷處理函數主要完成區(qū)分中斷類型,清除中斷標志,設置全局變量的功能。

        圖2 open函數的流程圖Fig.2 Flow chart of the function open

        2.2 poll函數的設計

        應用程序對nRF24L01射頻模塊這個設備進行操作時,使用select()或poll()系統(tǒng)調用查詢是否可對其進行訪問可以提高內核運行效率[3]。這個系統(tǒng)調用進而執(zhí)行內核中射頻模塊驅動程序中的poll()函數。Linux內核中poll()函數用來監(jiān)測文件的狀態(tài),在文件的狀態(tài)未發(fā)生變化且未超時的情況下它的用戶態(tài)select()函數將一直阻塞當前進程的運行。若射頻模塊作為2.45G無線通信的接收單元時,該函數用于和中斷函數配合,使得應用系統(tǒng)只有在接收到發(fā)射單元發(fā)送的數據時才會向下執(zhí)行,其他時候則處于阻塞狀態(tài)。poll()函數的部分代碼如下:

        當用戶空間調用poll函數返回文件為可讀或可寫狀態(tài)時,則調用ioctl()函數中定義的相關命令對射頻模塊接收或發(fā)送的數據進行處理。

        2.3 ioctl函數和讀寫的設計

        ioctl()函數主要由一些switch分支選擇語句構成,用于配置設備的相關參數。對于nRF24L01射頻模塊來說由于它可以工作于“ShockBurst?”和增強型“ShockBurst?”這兩種方式,通過自定義的SET_NRFMOD命令來進行設置,可以通過設置nRF24L01的寄存器EN_AA,和自動重傳寄存器來進行選擇[2]。

        在控制函數中也可以實現(xiàn)對射頻模塊設備文件進行讀寫操作的命令。讀寫操作的命令與file_operations結構中read()和write()函數的原理相同,都是將應用程序要傳送數據通過函數 copy_from_user()或 get_user()傳到內核空間。 然后把數據調用送到設備或芯片。讀操作的功能與寫相反,它讀取設備的相關信息,調用 copy_to_user()或 put_user()把數據傳到用戶空間。

        為了創(chuàng)建唯一的控制命令號以避免與內核中已有的命令相沖突,可以把每個命令分成:幻數、序數、傳輸方向和參數大小這四個位段。這些命令的構造放在nrf24l01.h頭文件中:

        其中nrf24l01_config()函數的主要功能是根據用戶空間傳遞到內核的參數對nRF24L01射頻模塊的寄存器進行賦值。而send_id()函數則是將要發(fā)送的數據寫入到nRF24L01的發(fā)送緩沖區(qū),然后設置發(fā)送模式信號線。send_id()函數如下:

        3 驅動程序測試

        測試時我們將nRF24L01設置為工作在“ShockBurst?”方式,在此工作方式下的數據包格式由前導碼、地址地、數據域和CRC校驗這4部分組成。其中前導碼由硬件自動進行處理,當nRF24L01在發(fā)送模式下自動加入前導碼,在接收模式下自動去除前導碼。它的作用是給芯片穩(wěn)定接收或發(fā)送預留一定的時間。地址長度為3~5字節(jié),它由寄存器SETUP_AW進行設定。數據域為發(fā)送包的有效載荷,長度可以為1~32字節(jié)。CRC校驗是可以選擇的,它由控制寄存器中的EN_CRC位來決定[2]。

        文中采用如圖3的系統(tǒng)結構對上面設計的驅動程序進行簡單測試。我們采用單發(fā)單收的方式進行測試。發(fā)射單元中,應用程序調用ioctl()函數對內核中與nRF24L01寄存器相關的參數進行設置。然后調用SENDID命令將要發(fā)送的數據發(fā)送出去。

        圖3 測試系統(tǒng)結構圖Fig.3 Schematic diagram of the test system

        發(fā)送單元部分關鍵代碼如下:

        接收單元程序流程圖如圖4所示,當nRF24L01設置為接收模式時,芯片內部的基帶協(xié)議引擎會不停地搜索合法的數據包。若數據包的地址和較驗位匹配則將數據包的數據域放入接收緩沖區(qū),將置位nRF24L01的狀態(tài)寄存器的成功接收數據位(RX_DR),同時IRQ中斷信號線輸出為低電平。當接收到數據后會觸發(fā)中斷處理函數,并使select()系統(tǒng)調用返回設備文件為可讀狀態(tài)。則從接收緩沖區(qū)中提取數據,并將數據包中的數據通過串口發(fā)送到PC機進行顯示。測試系統(tǒng)的實驗截圖如圖5所示。

        圖4 接收單元流程圖Fig.4 Flow chart of the receiving unit

        圖5(a)是發(fā)射單元將發(fā)送數據加載到內核并運行用戶空間進程的實驗結果截圖;圖5(b)是接收單元將接收到的數據通過串口傳輸到PC機進行顯示的實驗結果截圖。值得注意的是接收單元和發(fā)送單元的數據域長度寄存器的值要設置成一樣。若射頻模塊之間要實現(xiàn)一對多或多對多的方式進行通信,由于nRF24L01在接收模式下有6個數據通道可供選擇,因此可以將發(fā)射模塊發(fā)送數據包的地址設置為接收單元6個數據通道中某個未被利用的通道地址。從而實現(xiàn)一個nRF24L01可以接收6個發(fā)射單元的數據。若要實現(xiàn)接收單元可以對大于6個發(fā)射單元的數據進行接收處理則要采用一些防碰撞算法,如ALOHA算法和二進制搜索算法[6]。

        圖5 測試系統(tǒng)的實驗截圖Fig.5 Experimental screenshot of the test system

        4 結 論

        文中介紹了nRF24L01[7]射頻模塊電路與驅動程序的設計,該射頻模塊體積小、功耗低,能夠廣泛地應用于2.45G無線通信領域中。在嵌入式Linux平臺下,該射頻模塊以字符設備的文件形式提供給用戶空間,并給應用程序提供了統(tǒng)一操作接口,從而可以加快具體項目的開發(fā)。經測試若本射頻模塊采用PCB天線,空中傳輸速率為1 Mbps,輸出功率為0 dBm,接收與發(fā)送單元可以在7 m范圍內實現(xiàn)通信。若引入防碰撞算法,則本設計可以用于RFID讀卡器等具體項目中。

        [1]黃智偉.單片無線發(fā)射與接收電路設計[M].西安:西安電子科技大學出版社,2009.

        [2]Semiconductor N.nRF24L01 Single Chip 2.4GHz Transceiver Product Specification[EB/OL].[2007].http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01.

        [3]鄭強.Linux驅動開發(fā)入門與實戰(zhàn)[M].北京:清華大學出版社,2011.

        [4]怯肇乾,陳永超.ARM-Linux下SPI設備的添加與驅動實現(xiàn)[J].單片機與嵌入式系統(tǒng)應用,2012,12(4):80-81.

        KAI Zhao-qian,CHEN Yong-chao.SPI device increment and driver design in ARM-Linux[J].Microcontrollers&Embedded Systems,2012,12(4):80-81.

        [5]馬瑾,裴東興,張少杰.基于nRF24L01的無線溫濕度測試系統(tǒng)[J].電子設計工程,2012,20(2):64-66.

        MA Jin,PEI Dong-xing,ZHANG Shao-jie.Wireless temperature and humidity test system based on nRF24L01[J].Electronic Design Engineering,2012(2):64-66.

        [6]鄧一文,張紅雨,張鵬程,等.RFID高頻讀寫器防碰撞算法研究[J].電子設計工程,2011(19):31-34.

        DENG Yi-wen,ZHANG Hong-yu,ZHANG Peng-cheng,et al.Study on the anti-collision algorithm of the RFID read/write device[J].Electronic Design Engineering,2011(19):31-34.

        [7]陳暉,張軍國,李默涵,等.基于SIC89C52和nRF24L01的智能小車設計[J].現(xiàn)代電子技術,2012(17):12-15.

        CHEN Hui,ZHANG Jun-guo,LI Mo-han,et al.Design of smart car based on STC89C52 and nRF24L01[J].Modern Electronics Technique,2012(17):12-15.

        猜你喜歡
        驅動程序調用寄存器
        Lite寄存器模型的設計與實現(xiàn)
        計算機應用(2020年5期)2020-06-07 07:06:44
        核電項目物項調用管理的應用研究
        LabWindows/CVI下基于ActiveX技術的Excel調用
        測控技術(2018年5期)2018-12-09 09:04:46
        分簇結構向量寄存器分配策略研究*
        基于系統(tǒng)調用的惡意軟件檢測技術研究
        利用RFC技術實現(xiàn)SAP系統(tǒng)接口通信
        高速數模轉換器AD9779/AD9788的應用
        一種可重構線性反饋移位寄存器設計
        通信技術(2010年8期)2010-08-06 09:29:16
        驅動程序更新與推薦
        驅動程序更新與推薦
        亚洲欧美日韩在线中文一| 国产亚洲一本大道中文在线| 欧美巨大巨粗黑人性aaaaaa| 国产精品亚洲午夜不卡| 人妻精品久久久一区二区| 一二三四区中文字幕在线| 人人妻人人妻人人片av| 白浆出来无码视频在线| 尤物成av人片在线观看| 中国一级特黄真人片久久| 久激情内射婷内射蜜桃人妖 | 久久亚洲日本免费高清一区| 日韩视频午夜在线观看| av网站免费线看精品| 成 人 免费 黄 色 视频| 成人午夜视频一区二区无码| 国产精品美女一区二区av| 国产精品白丝久久av网站| 亚洲国产长腿丝袜av天堂| 一区二区久久不射av| 女主播啪啪大秀免费观看| 夜夜爽妓女8888888视频| 免费av片在线观看网站| 强d乱码中文字幕熟女1000部 | 九九久久国产精品大片| 精品久久人妻一区二区 | 精品国产制服丝袜高跟| 欧美成人网视频| 亚洲国产中文字幕精品| 天天做天天爱天天综合网2021| 色老汉免费网站免费视频| 精品一区二区三区人妻久久| 国产精品亚洲精品国产| 久久精品国产久精国产| 精品一区二区av天堂| 在线观看二区视频网站二区| 久久精品国产亚洲av麻豆图片| 国产全肉乱妇杂乱视频| 亚洲欧美日本人成在线观看| 青青草成人在线播放视频| 丰满少妇a级毛片野外|