分类 默认分类 下的文章

nrf24链路层接受数据时,发现数据包地址和自己的接受地址一致时才会收取。nrf24一共可以设置6个接受地址。接受地址在nrf24中被包装成管道的概念。每个管道都可以单独配置,开启关闭,不同的地址,是否启用自动回复功能(重发机制),使用动态还是静态的负载长度。如果使用的是动态长度,则管道收取到的数据长度也会保存在对应管道的寄存器里。

nrf24_rx_addr.png

需要注意的是2-6号管道共用1号管道的前四字节地址。也就是说他们和1号管道地址只有一字节的差别。

数据包格式:
| 前导码(1byte) | 地址(2-5byte) | 包控制字(9bit) | 负载数据(0-32byte) | CRC(1-2byte) |

前导码:rf芯片识别空中数据开始的标记,根据后续内容的最高位,有两种取值 0xAA 和 0x55 。
地址:当空中数据包地址和接收地址相同rf芯片才会接受。可配置长度为2-5个字节,长度越短越容易收到干扰数据。
包控制字:重传机制,变长数据包特性,会使用这个字断。其中内容为 数据包长度,数据包pid,是否需要回包。关闭重传机制和变长数据包则这个字断不会被加入数据包。
CRC:即数据包的CRC校验码,可配置为1byte或2byte,也可以关闭不加入数据包。但是启用自动重传机制则必须打开。

nrf24物理层三个关键参数:信道,速率,功率。信道和速率必须一致才可以通讯,功率决定通讯距离。上述参数是通过修改 RF_CH 和 RF_SETUP 寄存器完成的。

nrf24_rf_ch.png
nrf24_rf_setup.png

在测试 nrf24 spi 通讯的时候,在萝莉分析仪上已经看到有数据传回了,但是在 stm32 里还是读不到数据。经过多番查证发现 FRXTH 这个标记搞的鬼。没有置位 FRXTH 的时候,需要16bit才能触发 RXNE。置位只要 8bit。

QQ20201021-164357.png