公众号:嵌入式不难
本文仅供参考学习,如有错误之处,欢迎留言指正。
总体特性
- 频段:支持2.400 - 2.4835GHz,可运行在2400~2525MHz
- 调制方式:GFSK
- 支持空中速率:250 kbps, 1 Mbps and 2Mbps
- 支持126个RF channel
- 可编程输出功率:0, -6, -12 or -18dBm
- 基带已嵌入协议(Enhanced ShockBurst™):可支持特定模式下读取不定长数据
- 1~32字节动态长度数据
- 电压范围:1.9~3.6V,引脚支持5V输入
- Standby-I模式:26uA,关机模式(power down):900nA
- 从关机模式(power down)下启动需要1.5ms,从Standby-I模式下启动需要130us
- SPI最大支持10Mbps ,RX和TX分别有3个缓冲区
引脚功能
名称 | 输入输出 | 描述 |
---|---|---|
CE | I | 芯片模式控制IO,影响模式,但不是唯一影响因素 |
CSN | I | 选择该芯片,低有效,低时可传输SPI命令 |
SCK | I | SPI时钟线 |
MOSI | I | SPI_MOSI线 |
MISO | O | SPI_MISO线 |
IRQ | O | 可屏蔽中断引脚,低有效 |
上电过程
当VDD高于1.9V时,芯片进入复位状态,并在复位状态保持一段时间(最小1ms,最大100ms),然后进入power down模式。
模式介绍
- PWR_UP: CONFIG寄存器的其中一个bit, 1=POWER_UP(开机), 0:POWER_DOWN(关机)
- PRIM_RX: CONFIG寄存器的其中一个bit, 1=PRX接收设备, 0=PTX发送设备
- CE: 引脚
模式运行图:
运行模型图注意事项
- 粗实线表示的是推荐运行模式和推荐操作路径
- 细实线表示的是不推荐的运行模式和推荐操作路径
- 虚圆圈表示的是存在的中间状态,是一种过度状态
那么我们操作的时候尽量按照推荐路径操作
IRQ中断表
TX/RX | NoACK/ACK/DPLACK | TX_DS/RX_DR/MAX_RT | 说明 |
---|---|---|---|
TX | NoACK | TX_DS | TX_DS仅发出, 不一定必达 |
TX | ACK | TX_DS+MAX_RT | TX_DS一定必达, MAX_RT仅代表未收到RX的ACK |
TX | DPLACK | TX_DS+RX_DR+MAX_RT | (TX_DS+RX_DR)一定会同时产生, 产生时表示发送必达且收到带信息的ACK, MAX_RT仅代表未收到RX的ACK |
RX | NoACK | RX_DR | RX_DR一定收到数据 |
RX | ACK | RX_DR | RX_DR一定收到数据, 但TX端不一定成功收到ACK |
RX | DPLACK | TX_DS+RX_DR | 可能单独产生RX_DR, 但是一定不会单独产生TX_DS, RX_DR表示一定收到数据, TX_DS表示可以填入新的ACK信息, 但TX_DS不一定表示成功发到了TX |
其他注意事项:
- NRF24L01不要在TX Mode下停留4ms,至于有什么后果,现在不知道,那么什么情况下会在TX Mode呢?TX Mode:PWR_UP为1,PRIM_RX为0,TX FIFO不为空,且CE高电平持续10us以上。那么我们怎么控制才能不停留4ms呢?答案是,每次发送数据都给CE脉冲,而不是一直将CE置为高电平。
- SETUP_RETR寄存器中的ARD参数在DPLACK模式下不能乱设置, 在1M/2M速率下, ARD=500us时时间足够长,250k速率下,ARD=1500us时时间足够长
测试经验
- DPLACK(即ACK带用户信息情况下),只开TX设备,然后设备不断电情况下将TX设备变为RX设备,这个时候TX FIFO里还存有信息,根据数据手册,TX FIFO中的内容只能在TX下清除,那这里残留的信息变无法清楚了。我的实际情况是,在RX 模式下也可以清除TX FIFO数据。同理先设为RX,再设TX时,同样也要清除RX模式下没有通过SPI读出的数据。不然可能会出问题。
- SPI速度没有测试过10M,但是可以稳定运行在8M
- 发送模式下需要的CE脉冲, 官方手册给的至少需要10us, 实测低至2.5us都可以实现功能,但是没有测试稳定性,应用中我都是采用12us的脉冲。
- DPLACK模式下,RX设备端,不一定每次收到TX数据时都要填入ACK信息