蜗牛326

  • 2024-12-06
  • 回复了主题帖: NRF24L01+ 发送端无法收到ACK+PAYLOAD

    tagetage 发表于 2024-12-5 16:44 你这个问题太具体了。 参考一下这个吧, https://www.cnblogs.com/xueweisuoyong/p/11088917.html 哈哈,谢谢,这些全都试过了不知道问题在哪里

  • 2024-12-05
  • 发表了主题帖: NRF24L01+ 发送端无法收到ACK+PAYLOAD

    尝试了所有的设置,包括以下几条,现象是:PTX(发送端)给PRX(接收端)发了数据,  PRX收到了数据,并且STATUS寄存器中的RX_DR位置1,触发了中断,也就是成功收到了数据。PTX和PRX都设置为不定长度发送和接收,也设置自动回复、带数据(ACK with payload),但PTX只能收到ACK,TX_DS触发1,始终无法收到PAYLOAD引发RX_DR。   PAYLOAD数据是事先放在PRX的。   以下引用lb8820265的内容: 1.       寄存器设置有几个需要注意,一个是ACK接收最大允许的时间要大于500us。 2.       然后是1C 与1D寄存器需要给相关的操作,需要设置为不定长度的发送与接收。接收的时候需要先检测R_RX_PL_WID(0x60),可以得出收到的数据长度,然后再接收。 3· 感觉16位CRC与8位CRC没有什么区别,同样都是将需要发送的所有东西一起运算,而且大了还浪费时间,但是如果要设置为带数据包的ACK又必须设置为有CRC校验的。 4· 设置好了之后,首先在发送端还没有发送之前,接收端需要将数据放在W_ACK_PAYLOAD中,这是一个有范围的地址从0xA8到0xAD,通常用0xA8。 5· 发送端发送过来之后,接收端将放好了的数据发送出去,但是注意一定要读取发送过来的数据或者清空接收FIFO,不然发送端无法接收到带有数据的ACK包,不读取或者清空将数据放入W_ACK_PAYLOAD也是白放,不但浪费时间,也会流失放入的数据,可以发送中断中放入新的数据,这样既能够节约时间,又不浪费数据,但要注意一定要在初始化的时候先将数据放入W_ACK_PAYLOAD中,不然无法发送。同样在接收端中可以设置IRQ引脚中断,当引脚变低了之后才经行接收与发送,可以免去不断用SPI查询时间浪费。这样设置了之后接收端发送数据的时间间隔掌握在发送端的手中。由发送方确定心跳频率。 6· 可以通过设置将发送端的发送速度最大化,可以利用REUSE_TX_PL操作指令,不断的发送,当然也可以放到接收中断中,但是要注意在使用这个操作指令前需要发送数据一次。 7· 可以通过查看RPD(Received PowerDetector)接收功率检测器查看现在信号是否强,只有两个值0和1,当射频信号高于 -64 dBm时为1,低于时为0,其实在这个主要是用来设置射频信号功率的,用于节能。 8·这些功能只有在挪威的NRF24L01+上才能使用,不带+的不行,有一种芯片采用黑胶封住的也不太好用。   同时也有一个问题:NRF24L01中有三个FIFO 发送与接收存储,感觉这个东西应该是可以加快数据的接收与发送,我一直没有使用出来,使用了的分享一下呗。

最近访客

现在还没有访客

< 1/0 >

统计信息

已有--人来访过

  • 芯积分:4
  • 好友:--
  • 主题:1
  • 回复:1

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言