摘 要:介紹了一種利用無線數字傳輸芯片和單片機構成的無線數據傳輸系統,討論了系統的硬件電路設計和軟件編程,以及無線數字傳輸芯片在增強式突發傳遞模式下通過單片機的控制進行無線數據傳輸的原理,設計了在增強式突發傳遞模式下可實現半雙工通信的通用電路,并討論了無線數字傳輸芯片初始配置和數據發送程序開發的關鍵技術。運行表明,該系統控制方便、工作穩定,能實現可靠的無線數據傳輸。
關鍵詞:無線數據傳輸系統;單片機;nRF24L01芯片;SPI
中圖分類號:TN919.72文獻標識碼:B
文章編號:1004-373X(2008)05-068-03
Wireless Data Transmission System Based on nRF24L01
JIA Qing,WANG Daihua,ZHANG Zhijie
(Key Laboratory of Instrumentation Science Dynamic Measurement,North University of China,Taiyuan,030051,China)
Abstract:This paper introduces a kind of wireless data transmission system implemented with a wireless digital transmission chip and a single chip microcomputer.The system hardware design and software design are discussed in detail,and the theory of wireless data transmission with wireless digital transmission chip under the enhanced ShockBurst mode is analyzed.The circuit is designed and the key features of programming for wireless digital transmission chip initial configuration and wireless data transmission are discussed.The running of system shows that it is easy to control and it works stably to perform reliable wireless data transmission.
Keywords:data wireless transmission system;single chip microcomputer;nRF24L01;SPI
1 nRF24L01芯片的介紹
nRF24L01是單片射頻收發芯片,工作于2.4~2.5 GHz ISM頻段。工作電壓為1.9~3.6 V,有多達125個頻道可供選擇。可通過SPI寫入數據,最高可達10 Mb/s,數據傳輸率最快可達2 Mb/s,并且有自動應答和自動再發射功能。和上一代nRF2401相比,nRF2401數據傳輸率更快,數據寫入速度更高,內嵌的功能更完備。
芯片內置頻率合成器、功率放大器、晶體振蕩器、調制器等功能模塊,并融進了增強式ShockBurst技術,其中輸出功率和通信頻道可通過程序進行配置。芯片能耗非常低,以-6 dBm 的功率發射時,工作電流只有9 mA,接收時工作電流只有12.3 mA,多種低功率工作模式(掉電模式和空閑模式)使節能設計更方便。
1.1 nRF24L01引腳介紹
芯片引腳排列見圖1。
各引腳具體功能如下:CE為發射和接收的使能端;CSN為SPI的使能端;SCK為SPI時鐘輸入;MOSI為SPI數據主輸從入端;MISO為SPI數據主入從輸端;IRQ為中斷輸出;VDD為電源端,接3 V直流電源;VSS為參考接地端;XC1,XC2為晶振端;VDD[CD#*2]PA給功率放大器供電1.8 V;ANT1,ANT2為天線接口端;IREF為參考電流端。
圖1 nRF24L01引腳排列
1.2 nRF24L01的指令結構
nRF24L01所有的配置字都由配置寄存器來定義,這些配置寄存器可通過SPI口訪問。
1.2.1 SPI接口設置
SPI接口由SCK,MOSI,MISO及CSN組成。
(1) 在配置模式下單片機通過SPI接口配置nRF24L01的工作參數。
(2) 在發射或接收模式下單片機SPI接口發送或接收數據。
和SPI接口的指令共有8個,使用每個指令時必須使CSN變低,用完后將其變高。單片機的控制指令從nRF24L01的MOSI引腳輸入,而nRF24L01的狀態信息和數據信息是從其MISO引腳輸出并送給單片機的。利用SPI傳數時,他是先傳低位字節,再傳高位字節,并且在傳每個字節時是從高位字節傳起的。指令分別是:讀寄存器指令,格式是000AAAAA;寫寄存器指令,格式是001AAAAA(AAAAA代表寄存器在內存中的地址;讀Payload指令;寫Payload指令;清發射堆棧指令;清接收堆棧指令;發射數據再利用;空操作。
1.2.2 中斷
當nRF24L01的中斷源( TX[CD#*2]DS,RX[CD#*2]DR,MAX[CD#*2] RT)被置高時(TX[CD#*2]DS為發送成功標志位,RX[CD#*2]DR為接收數據成功標志位,MAX[CD#*2] RT為自動重發超上限標志位),就會使IRQ引腳置低。可以向狀態寄存器寫1來清這些中斷標志位。通過設置CONFIG寄存器的某些位來屏蔽掉這些中斷源,默認情況下,這三個中斷源都是允許的。
1.2.3 內存區
下面介紹nRF24L01的內存區,一共24個寄存器,以下選取幾個重要的加以介紹。
0號寄存器:第7位是保留位;第6位到第4位分別是TX[CD#*2]DS,RX[CD#*2]DR,MAX[CD#*2] RT屏蔽位,置高能屏蔽相應的中斷源;第3位是CRC使能位;第2位是選擇CRC長度;第1位是PWR[CD#*2]UP位,高電平為使芯片上電;第0位是發射、接收選擇位,高電平是發射,低電平是接收。
1號寄存器:第7和第6位是保留位,第5到第0位是使能通道5到通道0的自動應答,高電平有效。
2號寄存器:第7和第6位是保留位,第5到第0位是使能接收通道地址5到地址0,高電平有效。
4號寄存器:第7位到第4位是設置自動重發的時間,第3位到第0位是設置自動重發的次數。
7號寄存器是狀態寄存器,第7位是保留位,第6位是RX[CD#*2]DR位(1:接收堆棧中有了數據),第5位是TX[CD#*2]DS位(1:數據成功發送到接收方),第4位是MAX[CD#*2]RT位(1:達到重發射上限,產生超時中斷),第3到第1位是標志哪個通道接收數據,第0位是發射堆棧狀態位。
1.3 nRF24L01的功能描述
nRF24L01可以通過設置CE和狀態寄存器來選擇他的工作狀態,如表1所示。
配置為發射模式的nRF24L01將會利用增強式ShockBurst技術來發射數據包。發送設備在發完數據后將自動轉為接收狀態來等待接收方的應答信號。若發送設備未接收到應答信號,他將自動重發這包數據(自動重發開啟的情況下)直到接收這包數據或者重發次數超過了在寄存器SETUP[CD#*2]RETR[CD#*2]ARC設置的所允許的最大重發次數。如果是第二種情況,他將在STATUS寄存器里的MAX[CD#*2]RT位反映出來,并且給出中斷。
表1 nRF24L01的工作模式
當nRF24L01收到應答信號時,他將認為該包數據成功發送到接收方,并把這包數據從發射堆棧中清除,同時IRQ變低,STATUS寄存器里的中斷標志位TX[CD#*2]DS置高。
用增強式ShockBurst技術來發射數據可以有以下好處:極大地降低了電流損耗;系統開銷低;極大地降低了數據在空氣中的碰撞率。
2 系統設計
2.1 硬件設計
本系統采用的單片機是PIC16F877,將單片機的PORTC的0~5配置成通用I/O引腳,分別與nRF24L01的IRQ,CE,CSN,SCK,MOSI,MISO連接,控制nRF24L01的工作方式,采用單片機標準的SPI接口。系統上電時,PIC16F877首先對nRF24L01進行寫配置寄存器操作,然后使nRF24L01進入發射狀態,將要發送的數據寫入nRF24L01,激活無線發射。然后檢測nRF24L01的IRQ引腳,由于關閉了自動重發射功能,因此如果引腳電平變低,即說明產生發送成功中斷,數據發送成功,然后從接收端讀出數據即可。
圖2 硬件電路示意圖
2.2 軟件設計
程序流程圖如圖3所示。程序編程的基本思路是,系統上電首先配置nRF24L01的寄存器,本系統只對其中幾個寄存器進行了重新配置,關閉自動重發射功能是想對發送失敗次數進行統計,其他的均采用默認值,如:通信速率2 Mb/s,輸出功率0 dBm等。
圖3 程序流程圖
nRF24L01寫配置子程序如下:
BCFPORTC,2;CSN變低,開始SPI寫數
NOP
MOVLWH′20′
MOVWFS[CD#*2]DATA
CALL SEND
B0MOVLWH′0A′;使能CRC,開啟POWER UP,選擇發射模式
MOVWFS[CD#*2]DATA
CALL SEND
BSF PORTC,2;SPI寫數完成
NOP
BCFPORTC,2
MOVLWH′21′
MOVWFS[CD#*2]DATA
CALLSEND
B1MOVLWH′01′ ;只開啟通道0的自動應答功能
MOVWFS[CD#*2]DATA
CALLSEND
BSFPORTC,2
NOP
BCF PORTC,2
MOVLWH′22′
MOVWFS[CD#*2]DATA
CALL SEND
B2MOVLWH′01′;只使能接受通道地址0
MOVWFS[CD#*2]DATA
CALL SEND
BSFPORTC,2
NOP
BCFPORTC,2
MOVLWH′24′
MOVWFS[CD#*2]DATA
CALL SEND
B4MOVLWH′00′;關閉自動重發射功能
MOVWFS[CD#*2]DATA
CALL SEND
BSFPORTC,2
NOP
BCFPORTC,2
MOVLWH′31′
MOVWFS[CD#*2]DATA
CALL SEND
B17MOVLWH′20′;設置接受通道0的數據長度為16個字節
MOVWFS[CD#*2]DATA
CALL SEND
BSFPORTC,2;CSN變高
RETLW0
nRF24L01發送子程序如下:
BCFPORTC,2
NOP
MOVLWH′20′;寫配置寄存器
MOVWFS[CD#*2]DATA
CALL SEND
MOVLWH′0A′;置PRIM[CD#*2]RX為低,置PWR[CD#*2]UP為高
MOVWFS[CD#*2]DATA
CALL SEND
BSFPORTC,2
CALL W[CD#*2]TX[CD#*2]PAY
BSFPORTC,1
CALL DLY10us
CALL DLY10us
BCFPORTC,1;開啟L01發射
CALL DLY130us
IRQ[CD#*2]JBTFSCPORTC,0;判斷IRQ
GOTO IRQ[CD#*2]J
BCF PORTC,2
NOP
MOVLWH′07′
MOVWFS[CD#*2]DATA
CALL SEND
MOVLWH′F1′
MOVWFS[CD#*2]DATA
CALL SEND1
CALL READ
BSFPORTC,2
TX[CD#*2]1BTFSSR[CD#*2]DATA,5;判斷數據是否成功發送
GOTO TX[CD#*2]3
BCFPORTB,2
BSFPORTB,1
TX[CD#*2]2BCFPORTC,2;CSN變低
NOP
MOVLWH′27′;狀態寄存器恢復為默認值
MOVWFS[CD#*2]DATA
CALL SEND
MOVLWH′3E′
MOVWFS[CD#*2]DATA
CALL SEND
BSFPORTC,2
NOP
RETLW0
TX[CD#*2]3BCFPORTB,1;統計發送失敗的次數
BSFPORTB,2
INCF FAIL[CD#*2]NUM,1
BTFSSSTATUS,Z
GOTO TX[CD#*2]2
INCF FAIL[CD#*2]N2,1
GOTO TX[CD#*2]2
W[CD#*2]TX[CD#*2]PAY;發送20個數
BCFPORTC,2
NOP
MOVLWH′20′
MOVWFTX[CD#*2]NUM
MOVLWH′A0′
MOVWFS[CD#*2]DATA
CALL SEND
PAY[CD#*2]RE[KG*2/3]MOVLWH′55′
MOVWFS[CD#*2]DATA
CALL SEND
DECFSZ TX[CD#*2]NUM,1
GOTO PAY[CD#*2]RE
NOP
BSFPORTC,2
RETLW0
3 結 語
本文介紹了利用PIC16F877和nRF24L01芯片設計的無線數據傳輸系統,成本低,體積小,傳輸速率高,具有良好的通用性和可靠性,可供監測和工業控制系統電路設計參考使用。
參 考 文 獻
[1]何信龍,李雪銀.PIC16F87X快速上手[M].北京:清華大學出版社,2002.
[2]李學海.PIC單片機實戰[M].北京:北京航空航天大學出版社,2004.
[3]Nordic Semiconductor ASA.nRF24L01 product specification[R].2006.
作者簡介 莢 慶 男,1981年出生,安徽巢湖人,碩士生。主要從事無線傳輸方向的研究。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。