NRF24L01+中文翻译连载之四——附录与测试记录

3.4 附录A - 增强型ShockBurst™ - 配置和通信示例

3.4.1 增强ShockBurst™传输有效载荷

  1. 将配置位PRIM_RX设置为低电平。

  2. 当应用MCU有数据要发送时,通过SPI锁定接收节点地址(TX_ADDR)和加载有效负载数据(TX_PLD)到nRF24L01 +中。发送有效载荷的长度是通过MCU写入TX FIFO的字节数计算出来的。**保持CSN为低电平时,TX_PLD必须连续写入。如果TX_ADDR与上次传输不变,则TX_ADDR不必重写。**如果PTX设备需要接收应答信号,则需要事先配置数据管道0接收ACK数据包。数据通道0的RX地址(RX_ADDR_P0)必须等于PTX设备中的TX地址(TX_ADDR)。有关第41页上的图14中的示例,请为TX5设备和RX设备执行以下地址设置:

TX5设备:TX_ADDR = 0xB3B4B5B605
TX5器件:RX_ADDR_P0 = 0xB3B4B5B605
RX设备:RX_ADDR_P5 = 0xB3B4B5B605
  1. CE上的高脉冲开始传输。 CE上的最小脉冲宽度为10μs。

  2. nRF24L01 + ShockBurst™:

  • 无线电启动。
  • 16MHz内部时钟启动。
  • 射频数据包已完成(请参阅数据包说明)。
  • 数据以高速传输(由MCU配置1Mbps或2Mbps)。
  1. 如果自动确认已激活(ENAA_P0 = 1),则PTX立即进入RX模式,除非收到的数据包中设置了NO_ACK位。如果在有效确认时间窗口中接收到有效数据包,则认为传输成功,STATUS寄存器中的TX_DS位设置为高电平,**并将有效负载从TX FIFO中移除。**如果在指定的时间窗口内未收到有效的ACK数据包,则重新传送有效载荷(如果启用自动重新传输)。如果自动重发计数器(ARC_CNT)超过编程的最大限制值(ARC),则STATUS寄存器中的MAX_RT位置高。**TX FIFO中的有效载荷不会被删除。**当MAX_RT或TX_DS为高电平时,IRQ引脚有效。要关闭IRQ引脚,通过写入STATUS寄存器来复位中断源(参见中断章节)。如果在最大重传次数后没有收到ACK数据包,则在MAX_RT中断清零之前不能再发送数据包(译者注:一旦清零,则继续发送上一次的数据)。数据包丢失计数器(PLOS_CNT)在每次MAX_RT中断时递增。也就是说,ARC_CNT计算获得单个数据包所需的重传次数。 PLOS_CNT计算最大重传次数后没有通过的数据包数量。

  2. 如果CE为低电平,nRF24L01 +进入待机I模式。否则,发送TX FIFO中的下一个有效载荷。如果TX FIFO为空而CE仍然为高电平,nRF24L01 +进入待机II模式(译者注:可以在待机II模式下继续写入数据)。

  3. 如果nRF24L01 +处于待机II模式,如果CE设置为低电平,立即进入待机I模式。

  4. 可以通过设置将发送端的发送速度最大化,可以利用REUSE_TX_PL操作指令,不断的发送,当然也可以放到接收中断中,但是要注意在使用这个操作指令前需要发送数据一次。(译者加)

  5. 可以通过查看RPD(Received PowerDetector)接收功率检测器查看现在信号是否强,只有两个值0和1,当射频信号高于 -64 dBm时为1,低于时为0,其实在这个主要是用来设置射频信号功率的,用于节能。(译者加)

  6. 这些功能只有在挪威的NRF24L01+上才能使用,不带+的不行,有一种台湾产的也不太好用。 接收到的功率探测器(RPD),位于寄存器09,位0,在接收功率级以上-64dBm的触发点,在你接收的射频通道中存在。如果接收到的功率小于- 64dbm,则RDP = 0。RPD可以在任何时候读取,而nRF24L01+处于接收模式。这提供了通道中当前接收到的功率级的快照。当收到一个有效的数据包时,RPD状态被锁定,然后从你自己的发射机显示信号强度。如果没有收到数据包RPD锁定的接收期间由于主机单片机设置CE低或RX超时控制增强ShockBurst™。RX模式启用时RPD的状态是正确的,在Tstby2a +Tdelay_AGC=130us + 40us的等待时间之后。RX增益随温度变化,这意味着RPD阈值也会变化。温度在T = -40时,RPD阈值降低了- 5dB,在85时增加了+ 5dB。(译者加)

3.4.2 增强ShockBurst™接收有效载荷

  1. 通过将CONFIG寄存器中的PRIM_RX位设置为高来选择RX模式。必须启用所有需要接收数据的数据通道(EN_RXADDR寄存器),为运行在增强型ShockBurst™(EN_AA寄存器) 模式下的所有管道使能自动确认功能,并设置正确的有效负载宽度(RX_PW_Px寄存器)。按照上述Enhanced ShockBurst™传输有效载荷示例中的第2项中所述设置地址。

  2. 通过将CE设置为高来启动主动接收模式。

  3. 130μs后,nRF24L01 +监测进入通信的空气。

  4. 当收到一个有效的数据包(匹配地址和正确的CRC)时,有效载荷存储在RX-FIFO中,且STATUS寄存器中的RX_DR位置高。当RX_DR为高电平时,IRQ引脚有效。STATUS寄存器中的RX_P_NO指示已接收有效负载的数据管道。

  5. 如果启用了自动确认功能,则将传回ACK数据包,除非收到的数据包中设置了NO_ACK位。如果TX_PLD FIFO中有有效载荷,则将该有效载荷添加到ACK数据包中。

  6. MCU将CE引脚设置为低电平以进入待机I模式(低电流模式)。

  7. MCU可以通过SPI以合适的速率输出有效载荷数据。

  8. nRF24L01 +现在已准备好进入TX或RX模式或掉电模式。

3.5 附录B - 与nRF24XX兼容的配置

如何设置nRF24L01 +从nRF2401 / nRF2402 / nRF24E1 / nRF24E2接收:

  1. 使用与nRF2401 / nRF2402 / nRF24E1 / nRF24E2相同的CRC配置。
  2. 将PWR_UP和PRIM_RX位设置为1。
  3. 在被寻址的数据管道上禁用自动确认。
  4. 使用与PTX设备相同的地址宽度。
    5.使用与PTX设备相同的频道。
  5. 在nRF24L01 +和nRF2401 / nRF2402 / nRF24E1 / nRF24E2上选择数据速率1Mbps或250kbps。
  6. 在所寻址的数据管道上设置正确的有效负载宽度。
  7. 将CE设置为高。

如何将nRF24L01 +设置为发送到nRF2401 / nRF24E1:

  1. 使用与nRF2401 / nRF2402 / nRF24E1 / nRF24E2相同的CRC配置。
  2. 将PRIM_RX位设置为0。
  3. 将自动重传计数设置为0以禁用自动重传功能。
  4. 使用与nRF2401 / nRF2402 / nRF24E1 / nRF24E2相同的地址宽度。
  5. 使用与nRF2401 / nRF2402 / nRF24E1 / nRF24E2相同的频道。
  6. 在nRF24L01 +和nRF2401 / nRF2402 / nRF24E1 / nRF24E2上选择数据速率1Mbps或250kbps。
  7. 将PWR_UP设置为高。
  8. 与nRF2401 / nRF2402 / nRF24E1 / nRF24E2配置为接收长度相同的有效负载中的时钟。
  9. 脉冲CE传输数据包。

3.6 附录C - 用于测试的恒定载波输出

无线通信的输出功率是实现想要的范围的关键因素。 输出功率也是符合所有电信法规要求的第一个测试标准。
配置

  1. 在CONFIG寄存器中设置PWR_UP = 1和PRIM_RX = 0。
  2. 等待1.5ms PWR_UP->待机。
  3. 在RF寄存器组中:
  - CONT_WAVE = 1;
  - PLL_LOCK = 1;
  - RF_PWR;
  1. 设置所需的RF信道。
  2. 将CE设置为高。
  3. 只要需要一直输出载波,就保持CE高。

注意:不要在CONT_WAVE = 1时使用REUSE_TX_PL。当CE置低时,而两个寄存器都置位,芯片不会产生反应。但是,如果两个寄存器都置位,PWR_UP = 0将关闭TX模式。

现在nRF24L01 +应该输出一个未调制的中心载波。

3.7 译者测试:

NRF_FLUSH_TX:

NRF_FLUSH_RX:
该指令执行后接收数据清除,但是接收中断标志位(该位写1可以清除)和接收长度(一直保持不变,除非接收到新数据)不变。但是通过读取状态寄存器可以发现接收通道号变为 111b,即RX FIFO为空。所以需要通过该位域确定是否接收到数据。并且如果发送端接收到应答信号时,接收中断标志位置1。

NRF_RD_RX_PLOAD
该指令用于读取RX FIFO 数据。从字节0开始。如果已经读取了数据,那么再次读取时读取的是最后一个字节数据。

如:RX FIFO 数据: 0x01 0x02 0x03 0x04 0x05

执行 NRF_RD_RX_PLOAD 后,读取的数据为 0x01 0x02 0x03 0x04 0x05

如果期间没有数据(没有接收新数据或者只接收了应答信号)接收长度寄存器还是5,没有改变。

执行 NRF_RD_RX_PLOAD 后,读取的数据为 0x05 0x05 0x05 0x05 0x05

数据读完之后状态寄存器的RX_P_NO_FIELD位域是111b

发送中断

发送端:
接收到应答信号(无数据或者带数据)时,进入发送完成中断。
接收端:
有可能进入发送完成中断。具体原因未知。

接收中断
发送端:
接收到应答信号时也会有接收中断标志位。但是RX_P_NO_FIELD位域是111b,即RX FIFO为空。

接收端:
最大重发中断
最大重发中断:
一旦清除该位,继续开始上一次数据重发。

情形1: 发送端断电后重新配置,发送端发送一包数据,接收端未工作

清除最大重发中断标志后继续重发数据。一旦开始接收端开始工作,进入发送中断和接收中断(如果有应答信号有数据)

情形2: 首先执行接收端,发送端后执行。发送端第一次复位(发数据包),接收端只有接收中断,发送端第二次复位(发数据包),有发送和接收两个中断。之后发送端再复位(发送数据包)时只有一个接收中断。也就是说只要接收端不复位,就不会出现这种情况。

关注微信公众号,获取最新技术文章

测试代码:

  • 点击这里下载测试代码。测试代码后期可能会更新,关注微信公众号可以获取最新消息。

注释详尽,适合初学者学习。

猜你喜欢

转载自blog.csdn.net/weixin_42876465/article/details/87650340