以NRF24L01为例,实现无线通信
NRF24L01采用SPI通信,可以很方便的连接到MCU上。
NRF24L01的特点:
(1)2.4G全球开放的ISM频段,免许可证使用。
(2)最高工作速率2Mbps,高校的GFSK调制,抗干扰能力强。
(3)126个可选的频道,满足多点通信和调频通信的需要。
(4)内置CRC检错和点对多点的通信地址控制。
(5)可设置自动应答,确保数据可靠传输。
CE:模式控制线。在 CSN为低的
情况下,CE 协同CONFIG 寄存器
共同决定NRF24L01 的状态(参照
NRF24L01 的状态机)
CSN:SPI片选线
SCK:SPI时钟线
MOSI:SPI数据线(主机输出,从机输入)
MISO:SPI数据线(主机输入,从机输出)
IRQ:中断信号线。中断时变为低电平,在以下三种情况变低:Tx FIFO 发完并且收到ACK(使能ACK情况下)、Rx FIFO 收到数据、达到最大重发次数。
工作模式
收发模式有: Enhanced ShockBurstTM收发模式和ShockBurstTM收发模式,只有Enhanced ShockBurstTM收发模式支持自动ACK和自动重发。开启自动ACK,则默认选择Enhanced模式
Enhanced ShockBurstTM模式:
Enhanced ShockBurstTM收发模式,使用片内的先入先出堆栈区,数据可以低速从微控制器送入,但高速(1Mbps/2Mbps)发射,这样可以尽量节能。与射频协议相关的所有高速信号处理都在片内进行,达到节能、以低速微处理器也能进行高速射频发射以及数据在空中停留时间短,抗干扰性高的功效。
在Enhanced ShockBurstTM收发模式下, NRF24L01自动处理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,在发送模式下,置CE为高,至少10us,将使能发送过程。
在接收端,确认收到数据后记录地址,并以此地址为目标地址发送应答信号。
在发送端,通道0被用作接收应答信号,因此通道0的接收地址要与发送地址端地址相等,以确保接收到正确的应答信号。
一、发送流程:
1.把地址和要发送的数据按时序送入NRF24L01;
2.配置CONFIG寄存器,使之进入发送模式;
3.微控制器把CE置高(至少10us),激发Enhanced ShockBurstTM发射;
4.Enhanced ShockBurstTM发射:① 给射频前端供电;②射频数据打包(加字头、CRC校验码); ③ 高速发射数据包; ④发射完成,NRF24L01进入空闲状态。
二、Enhanced ShockBurstTM发送模式初始化:
1)写Tx 节点的地址 TX_ADDR
2)写Rx 节点的地址(主要是为了使能Auto Ack) RX_ADDR_P0
3)使能AUTO ACK EN_AA
4)使能PIPE 0 EN_RXADDR
5)配置自动重发次数 SETUP_RETR
6)选择通信频率 RF_CH(频率计算公式:2400+RF_CH (Mhz))
7)配置发射参数(低噪放大器增益、发射功率、无线速率) RF_SETUP
8)配置24L01 的基本参数以及切换工作模式 CONFIG。
三、Enhanced ShockBurstTM接收流程
1.配置接收地址和要接收的数据包大小;
2.配置CONFIG寄存器,使之进入接收模式,把CE置高。
3.130us后,NRF24L01进入监视状态,等待数据包的到来;
4.当接收到正确的数据包(正确的地址和CRC校验码),NRF2401自动把字头、地址和CRC校验位移去;
5.NRF24L01通过把STATUS寄存器的RX_DR置位(STATUS一般引起微控制器中断)通知微控制器;
6.微控制器把数据从FIFO读出(0X61指令);
7.所有数据读取完毕后,可以清除STATUS寄存器。NRF2401可以进入
四种主要的模式之一。
四、Enhanced ShockBurstTM接收模式初始化
1)写Rx 节点的地址 RX_ADDR_P0
2)使能AUTO ACK EN_AA
3)使能PIPE 0 EN_RXADDR
4)选择通信频率 RF_CH(选择参考公式如上)
5)选择通道0 有效数据宽度 RX_PW_P0
6)配置发射参数(低噪放大器增益、发射功率、无线速率) RF_SETUP
7)配置24L01 的基本参数以及切换工作模式 CONFIG。
相关寄存器
(1)配置寄存器(CONFIG 0x00)
MASK_MAX_RT最大重发次数 EN_CRC自动ACK
MASK_RX_DR配置是否使能接收数据中断
MASK_TX_DS发送数据完成中断
(2)自动应答使能寄存器(EN_AA 0x01)
(默认0-5位都是使能),用于使能数据通道。位设置为0禁止数据应答。
(3)RX地址使能寄存器(EN_RXADDR,0x02)
ERX_P1和P0默认设置为1,其他默认为0。
(4)自动重发设置寄存器(SETUP_RETR 0x04)
ARD设置没收到ACK之后多久再次进行重发;ARC设置重发到多少次为限度,设置为0则重发一次失败后不重发。
(5)射频频率设置寄存器(RF_CH,0x05)
位【6:0】RF_CH默认值为0000010,设置射频频率,RF_CH(频率计算公式:2400+RF_CH (Mhz))
(6)射频配置寄存器(RF_SETUP 0x06)
第3、5位共同决定射频速率。RF_PWR决定输出的远近。 其他几个位此处不关心。
(7)状态寄存器(STATUS 0x07)
MAX_RT位若置1,则代表达到最大重发次数还没发送成功。
(8)数据通道0接收地址寄存器(RX_ADDR_P0,0x0A)
类似的,还有通道1-5接收地址设置寄存器:RX_ADDR_P1-5,不过P1-P5共用32位高位地址,由P1设置,P2~P4只可以设置8位地址(低8位)。
(9)发送地址设置寄存器(TX_ADDR 0x10)
TX和发送端应该应用一样的地址,才能收到ACK。
(10)接收通道0有效数据宽度设置寄存器(RX_PW_P0 0x11)
需要设置发送和接收端数据宽度一致
类似的,还有通道1-5有效数据宽度设置寄存器:RX_PW_P1-5,对应通道1~通道5的接收有效数据宽度,方法同RX_PW_P0。
硬件连接
NRF24L01与W25Q128共用SPI1,注意要分时复用。SPI1接PB3、4、5.