天线|RF射频
直播中

彭铮

7年用户 240经验值
私信 关注
[问答]

怎么解决NRF24L01+的发送和接收调试奇怪问题!

搞了两天的NRF24L01了,基本上算是可以发送和接收了,但是仅仅是没有自动应答的模式下。寄存器配置和读取都没有问题,发送端禁止自动应答功能,禁止所有通道接收,禁止自动重发,使能发送模式(0x02),不做CRC校验。接收端禁止自动应答,开启0通道接收,禁止自动重发,使能接收模式(0x03)。发送地址寄存器和接收地址寄存器数据相同,两个模块除了模式和自动应答不同以外其他的都相同。现在的问题很奇怪,在这种配置模式下,发送和接收端数据可以同步传输,且调试中也没有数据错误的问题,但是一旦使能自动应答功能,问题就来了。发送端总是进入重发次数最大中断,这就表示接收端没有响应!为什么呢?不自动应答都能正常接收,反而自动应答后却不能响应了!配置为自动应答时,发送端配置为0通道自动应答,重发配置为0xFF,模式寄存器配置为0x0E(接收端是0X0F)。其他保持不变。现象时通信失败,但偶尔能看到接收端接收(发送和接收都是有指示灯的),通信成功率基本是算是失败,只要改为原先的模式(即禁止自动应答)则通信成功率100%!郁闷呀,总不能就这么用吧!一开始我以为是无线干扰(办公楼有好多的无线WIFI包括我公司),于是我就改了频道,但是还不如不改,改成其他的频道,接收根本就是0%,改回原来的40,还能偶尔通信的上(通信上的数据是对的)。搞了两天了,啥都没弄成,没辙了,还望高手指教啊,这个芯片从资料上看不难,但是调起来却不是一般的难啊!

回帖(4)

李亮涟

2020-5-19 09:10:47
自动应答我们的NRF24L01例程就开启了哦。
1 举报

高澜栖

2020-5-19 09:26:06

嗯,我使用的是AVR单片机,参照了例程,但是为啥一打开自动应答就不行了呢?不明原因,无法解决啊!
举报

欧丽娜

2020-5-19 09:34:07

顺带问一下,如果在设置好自动应答和发送模式后,直接开启CE端,那么模块是否直接就发送了,由于这时候发送缓冲区还没有数据也就是缓冲区空,我经过调试是会进最大发送次数中断的,说明模块确实在进行发送,只是没有数据发送出去,一直再重发。将数据写入缓冲区后,同样能进入重发中断,清除标志位后,是否这个数据还会重发直到再次进入重发中断呢?
举报

全娟

2020-5-19 09:41:41
有人吗?别沉了呀!

通过两天的调试终于找到原因了,不过很奇怪,暂时无法解决,只能重新换两个模块试试来验证一下了。

是这样的,只要在设置CONFIG时,接收端不开启CRC校验就能够正常通信,经过示波器的观察,两个模块之间的响应≥100us,也就是说发送端发出数据后,接收端会在100us以后置低IRQ引脚。只要控制100us以后就可以确定接收端已经收到数据了。由于接收端不使用CRC校验功能因此只要不使能CRC校验或不使用自动应答(自动应答是强制使用CRC功能的),那么不管发送端使用哪种CRC校验方式(8位和16位),接受端都能正常接收!但是发送端不能使用自动应答功能,因为内部硬件链路层的协议关系,在使用自动应答时必须要等到接收端响应才能表示通信成功,而接收不能使用CRC校验功能,且注明了只有在地址和校验正确的情况下,接收端才会响应,所以就出现了我一开始的问题,单发单收时没有问题,一旦使能自动应答通信失败!这个问题我就搞不懂怎么回事了?有知道的大神给个解释吧!

除了另外购买两个无线模块重新测试外,不过还有一个方法可以试试,那就是再买一个24l01的无线串口模块,监测发送端发送出来的数据,然后手动计算校验码,那就知道问题出在哪里了!或者手动发送数据到接收模块看看是否能够接收到。可惜的是,NRF24L01资料上并没有说明通信链路的协议方式,所以做起来就有点难办了!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分