基于nRF24L01的无线数据传输系统
摘 要:介绍了一种利用无线数字传输芯片和单片机构成的无线数据传输系统,讨论了系统的硬件电路设计和软件编程,以及无线数字传输芯片在增强式突发传递模式下通过单片机的控制进行无线数据传输的原理,设计了在增强式突发传递模式下可实现半双工通信的通用电路,并讨论了无线数字传输芯片初始配置和数据发送程序开发的关键技术。运行表明,该系统控制方便、工作稳定,能实现可靠的无线数据传输。
关键词:无线数据传输系统;单片机;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格式阅读原文。
下一篇:地面数字电视发射系统技术问题研究