OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9072|回复: 4

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

[复制链接]

1

主题

6

帖子

0

精华

初级会员

Rank: 2

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

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2014-9-17 23:09:57 | 显示全部楼层
自动应答我们的NRF24L01例程就开启了哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-9-17
在线时间
4 小时
 楼主| 发表于 2014-9-19 09:00:39 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>嗯,我使用的是AVR单片机,参照了例程,但是为啥一打开自动应答就不行了呢?不明原因,无法解决啊!
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-9-17
在线时间
4 小时
 楼主| 发表于 2014-9-19 09:30:56 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>顺带问一下,如果在设置好自动应答和发送模式后,直接开启CE端,那么模块是否直接就发送了,由于这时候发送缓冲区还没有数据也就是缓冲区空,我经过调试是会进最大发送次数中断的,说明模块确实在进行发送,只是没有数据发送出去,一直再重发。将数据写入缓冲区后,同样能进入重发中断,清除标志位后,是否这个数据还会重发直到再次进入重发中断呢?
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-9-17
在线时间
4 小时
 楼主| 发表于 2014-9-20 16:22:33 | 显示全部楼层
有人吗?别沉了呀!
<br>通过两天的调试终于找到原因了,不过很奇怪,暂时无法解决,只能重新换两个模块试试来验证一下了。
<br>是这样的,只要在设置CONFIG时,接收端不开启CRC校验就能够正常通信,经过示波器的观察,两个模块之间的响应≥100us,也就是说发送端发出数据后,接收端会在100us以后置低IRQ引脚。只要控制100us以后就可以确定接收端已经收到数据了。由于接收端不使用CRC校验功能因此只要不使能CRC校验或不使用自动应答(自动应答是强制使用CRC功能的),那么不管发送端使用哪种CRC校验方式(8位和16位),接受端都能正常接收!但是发送端不能使用自动应答功能,因为内部硬件链路层的协议关系,在使用自动应答时必须要等到接收端响应才能表示通信成功,而接收不能使用CRC校验功能,且注明了只有在地址和校验正确的情况下,接收端才会响应,所以就出现了我一开始的问题,单发单收时没有问题,一旦使能自动应答通信失败!这个问题我就搞不懂怎么回事了?有知道的大神给个解释吧!
<br>除了另外购买两个无线模块重新测试外,不过还有一个方法可以试试,那就是再买一个24l01的无线串口模块,监测发送端发送出来的数据,然后手动计算校验码,那就知道问题出在哪里了!或者手动发送数据到接收模块看看是否能够接收到。可惜的是,NRF24L01资料上并没有说明通信链路的协议方式,所以做起来就有点难办了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-9-30 01:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表