NRF24L01 简介
NRF24L01 可以实现点对点或者是1(收)对6(发)的无线通信。NRF24L01 采样SPI通信,很方便连接MCU
NRF24L01 无线模块,采用的芯片是 NRF24L01,该芯片的主要特点如下:
1)2.4G 全球开放的 ISM 频段,免许可证使用。
2)最高工作速率 2Mbps,高校的 GFSK 调制,抗干扰能力强。
3)125个可选的频道,满足多点通信和调频通信的需要。从2.4G到2.4+0.125G
4)内置 CRC 检错和点对多点的通信地址控制。
5)低工作电压(1.9~3.6V)。
6)可设置自动应答,确保数据可靠传输。
GND:接地
VCC:接3.3V电压
CE:模式控制线,在CSN为低,CE协同COMNFIG寄存器共同决定NRF24L01的状态
CSN:SPI片选线
SCK:SPI时钟线
MOSI:SPI数据线(主机输出,从机输入)
MISO:SPI数据线(主机输入,从机输出)
IRQ:中断信号线。中断时为低电平,TxFIFO发完并且受到ACK,RxFIFO收到数据,达到最大重发次数。
SPI时序简介:
空闲状态SCK为0,CPOL(时钟极性)=0;数据在时钟第一个时间边沿采集,CPHA(时钟相位)=0;
Cn:SPI命令位
Sn:STATUS寄存器位
Dn:数据位(MSB;多字节传输时,低字节在前)
工作模式:
NRF24L01的工作模式,有CE和CONFIG寄存器(0X00)d1PWR_UP(第一位)和PWIM_RX(第0位)位共同控制
收发模式又分为:Enhanced ShockBurstTM 收发模式和ShockBurstTM收发模式,只有Enhanced ShockBurstTM 收发模式支持自动ACK和自动重发。开启自动ACK,则默认选择Enhanced模式
Enhanced ShockBurstTM 收发模式
Enhanced ShockBurstTM 收发模式,受用片内的先入先出堆栈区,数据可以低俗从微控制器送入,但高速(1Mbps/2Mbps)发射,这样可以尽量节能。与射频协议相关的所有高速信号处理都是在片内进行,这种做法发好处是:
- 节能
- 低的系统费用(低速微处理器也能进行高速射频发射)
- 数据在空中停留的时间短,抗干扰能力强
Enhanced ShockBurstTM 收发模式,NRF24L01自动处理字头和CRC校验码。
在接收数据时,自动把字头和CRC校验码移去。
在发送数据时,自动加上字头和CRC校验码,在发送模式下,置CE为高,至少10us,将使能1发送过程。
Enhanced ShockBurstTM发送流程:
A. 把地址和要发送的数据按时序送入NRF24L01;
B. 配置CONFIG寄存器,使之进入发送模式;
C. MCU把CE置高(至少10us),激发Enhanced ShockBurstTM发射;
D. Enhanced ShockBurstTM发射:
a)给射频前端供电;
b)射频数据打包(加字头、CRC校验码);
c)高速发射数据包; d)发射完成,NRF24L01进入空闲状态
Enhanced ShockBurstTM接收流程:
A. 配置接收地址和要接收的数据包大小;
B. 配置CONFIG寄存器,使之进入接收模式,把CE置高;
C. 130us后,NRF24L01进入监视状态,等待数据包的到来;
D. 当接收到正确的数据包(正确的地址和CRC校验码),NRF24L01自动移去字头、地址和CRC校验位
E. NRF24L01通过把STATUS寄存器的RX_DR置位(STATUS一般引起MCU中断)通知MCU;
F. MCU把数据从FIFO读出(0x61指令);
G. 所有数据读取完毕后,可清除STATUS寄存器;NRF24L01可以进入四中主要的模式之一。
Enhanced ShockBurstTM发送模式初始化
- 写Tx节点的地址位置TX_ADDR
- 写Rx节点的地址(主要是为了使能Auto Ack)RX_ADDR_P0
- 使能AUTO ACK EN_AA
- 使能PIPE 0 EN_RXADDR
- 配置自动重发次数SETUP_RETR
- 选择通信频率PF_CH(频率计算公式:2400+RF_CH(Mhz)) PF_CH:0~125
- 配置发射参数(低噪放大器增益,发射功率,无线速率)RF_SETUP
- 配置24L01的基本参数以及切换工作模式CONFIG
Enhanced ShockBurstTM接收模式初始化:
- 写Rx节点的地址RX_ADDR_P0
- 使能AUTO ACK EN_AA
- 使能PIPE 0 EN_RXADDR
- 选择通信频率RF_CH选择通道0又效数据宽度RX_PW_P0
- 配置发射参数(低噪放大器增益,发射功率,无线速率)RF_SETUP
- 配置24L01的基本参数以及切换工作模式CONFIG