999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

nRF24L01射頻模塊驅動程序設計

2013-08-20 04:58:30嚴林祥張紅雨
電子設計工程 2013年19期
關鍵詞:設備

嚴林祥,張紅雨

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

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

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

1 nRF24L01射頻模塊設計

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

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

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

2 驅動程序的設計和實現

文中根據Linux字符設備開發的方法來設計nRF24L01射頻模塊驅動程序。應用程序通過系統調用對射頻模塊的設備文件進行操作,而系統調用則通過設備文件的主設備號找到相應的設備驅動程序,然后讀取數據結構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控制寄存器的不同配置可以代表不同突發情況的中斷事件:nRF24L01在發送模式下成功發送數據中斷;nRF24L01在接收模式下正確接收數據中斷;nRF24L01在發送模式下,達到最大重傳次數中斷[2]。中斷處理函數主要完成區分中斷類型,清除中斷標志,設置全局變量的功能。

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

2.2 poll函數的設計

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

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

2.3 ioctl函數和讀寫的設計

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

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

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

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

3 驅動程序測試

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

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

圖3 測試系統結構圖Fig.3 Schematic diagram of the test system

發送單元部分關鍵代碼如下:

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

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

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

圖5 測試系統的實驗截圖Fig.5 Experimental screenshot of the test system

4 結 論

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

[1]黃智偉.單片無線發射與接收電路設計[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驅動開發入門與實戰[M].北京:清華大學出版社,2011.

[4]怯肇乾,陳永超.ARM-Linux下SPI設備的添加與驅動實現[J].單片機與嵌入式系統應用,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的無線溫濕度測試系統[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].現代電子技術,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.

猜你喜歡
設備
諧響應分析在設備減振中的應用
調試新設備
當代工人(2020年13期)2020-09-27 23:04:20
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
廣播發射設備中平衡輸入與不平衡輸入的轉換
電子制作(2018年10期)2018-08-04 03:24:48
食之無味,棄之可惜 那些槽點滿滿的可穿戴智能設備
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
HTC斥資千萬美元入股虛擬現實設備商WEVR
IT時代周刊(2015年8期)2015-11-11 05:50:37
Automechanika Shanghai 2014 之“看” 汽保設備篇
如何在設備采購中節省成本
主站蜘蛛池模板: 亚洲av色吊丝无码| 99视频在线免费| 91精品综合| 欧美日韩va| 亚洲Av综合日韩精品久久久| 都市激情亚洲综合久久| 亚洲无码高清视频在线观看| a级毛片免费看| 久久久久九九精品影院| AV不卡在线永久免费观看| 久久综合婷婷| 亚洲免费三区| 精品国产Ⅴ无码大片在线观看81| 在线网站18禁| 久久国产热| 国产成人无码AV在线播放动漫| 中文字幕色站| 亚洲天堂精品在线观看| 狠狠色丁婷婷综合久久| 亚洲侵犯无码网址在线观看| 亚洲成A人V欧美综合| 成人av专区精品无码国产 | 日韩a级毛片| 天堂av综合网| 国产拍揄自揄精品视频网站| 99热这里只有精品在线播放| 乱人伦中文视频在线观看免费| 久久精品无码中文字幕| 久久99精品久久久久纯品| 久久超级碰| 色香蕉影院| 中文字幕人成乱码熟女免费| 色综合久久久久8天国| 自慰高潮喷白浆在线观看| 婷婷五月在线| 91在线国内在线播放老师| 54pao国产成人免费视频| 四虎国产精品永久一区| 五月激情综合网| 夜夜操天天摸| 欧美激情综合| 亚洲人成电影在线播放| 99热在线只有精品| 国产成人亚洲综合A∨在线播放| 91国内在线视频| 亚洲美女一区二区三区| 国产免费久久精品99re丫丫一 | 美女潮喷出白浆在线观看视频| 亚洲综合香蕉| 97超碰精品成人国产| 黄色国产在线| 国产亚洲精品自在久久不卡| 五月天婷婷网亚洲综合在线| 日本免费精品| 成人国产小视频| 久久久久亚洲AV成人网站软件| 亚洲国产精品久久久久秋霞影院| 久久国产精品嫖妓| 欧美天天干| 热思思久久免费视频| 国产丝袜无码一区二区视频| 五月天综合婷婷| 67194亚洲无码| 亚洲欧洲日韩综合| 国产一级毛片yw| 91激情视频| 日韩在线播放中文字幕| 伊在人亚洲香蕉精品播放| 亚洲成年人片| 国产在线98福利播放视频免费| 国产原创自拍不卡第一页| 国产不卡国语在线| 91网在线| 亚洲久悠悠色悠在线播放| 欧美激情综合一区二区| 欧美日韩国产在线播放| 综合色区亚洲熟妇在线| 欧美成人免费午夜全| 久久这里只精品国产99热8| 91av成人日本不卡三区| 国产天天射| 国产精品尤物在线|