搜索
bottom↓
回复: 13

用nRF24L01+的务必请看

[复制链接]

出0入0汤圆

发表于 2011-11-16 13:04:07 | 显示全部楼层 |阅读模式
目前测试stm32下的24L01+通信 ESB模式

发现偶尔发送成功的数据会比接收成功的数据多几个

进一步调试发现:
1、首先接收端调试,停在配置成接收模式完成的地方
2、接着发送端调试,不停发送


发现发送方的前三次居然可以接收到ACK!!!
而且只是3次,后面就回产生错误中断
而且为什么是3次而不是1次或者无数次?

目前还没找原因?


引入一个更深层次的问题:
接收方接收到有效数据之后,在什么情况下会发送ACK?
1、需要接收端的MCU把缓冲区的数据读出来?
2、需要接收端的MCU清空标志位?
3、根本不需要MCU参与,只要来了有效信号,就会发送ACK?

感觉上应该是前两种比较靠谱,如果是第三种,非常容易产生通信无法同步的问题...

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-11-16 15:54:49 | 显示全部楼层
进一步调试发现
接收端切换到接收,CE一旦拉高,即使程序停在这里,发送端也可以收到3个ACK信号,第四个就收不到了

然后把接收端的缓冲区清掉,都不用清掉中断标志位,发送端如果再次发送,又可以连续接到3个ACK,第四个收不到

出0入0汤圆

 楼主| 发表于 2011-11-16 16:23:31 | 显示全部楼层
进一步调试:

接收端停在中断里:
在拉低CE之前,发送端继续发送,可以接到ACK;但是接收端只进一次中断
在拉低CE之后,发送端继续发送,则接不到ACK。

这样的话,在接收端切换中断来不及拉低CE的时候,岂不是会出现 发送端发送数据实际上失败(接收端来不及接收),但是发送端认为成功的可能性?

出0入0汤圆

 楼主| 发表于 2011-11-16 16:34:39 | 显示全部楼层
手册上说配制成接收模式,当接收缓冲区满的时候,数据包会丢弃

(原文件名:射频接收模式.jpg)

现在碰到的现象似乎表明,接收缓冲区需要3个数据包才能填满
那么,这个接收缓冲区的大小到底如何确定?

出0入0汤圆

 楼主| 发表于 2011-11-16 17:00:13 | 显示全部楼层
再次测试

在中断中反复读取FIFO_STATUS,发现确实需要3个数据包才能把接收缓冲区填满!

出0入0汤圆

发表于 2011-11-16 17:21:10 | 显示全部楼层

(原文件名:NRF24L01 BUFFER.jpg)


24L01的发送,接收缓冲区分别就是3个包, 可能是你接收程序进入了接收模式,但是MCU并没有开始处理;
他接收到3个包并且发回给发射机3个应答信号, 所以你接收程序进入接收中断处理后处理完一个包后,
要再次检查缓冲区是否还有数据,有的话再处理好再退出,否则可能丢包, 因为你中断处理程序最后会把接收标志清掉了.

设置好接收模式后,24L01有空缓冲区会自主接收信号,不用mcu干预的.

出0入0汤圆

 楼主| 发表于 2011-11-16 17:49:14 | 显示全部楼层
回复【5楼】rayt  

24l01的发送,接收缓冲区分别就是3个包, 可能是你接收程序进入了接收模式,但是mcu并没有开始处理;
他接收到3个包并且发回给发射机3个应答信号, 所以你接收程序进入接收中断处理后处理完一个包后,
要再次检查缓冲区是否还有数据,有的话再处理好再退出,否则可能丢包, 因为你中断处理程序最后会把接收标志清掉了.

设置好接收模式后,24l01有空缓冲区会自主接收信号,不用mcu干预的.


-----------------------------------------------------------------------

应该是的,24L01+的FIFO是三级,这个之前没有注意...

之前不了解FIFO的特点,从网上做找找资料,理解了三级的概念

想不到这个“3”藏在这个地方

也多谢rayt的热心~


由于用到1对N通信

有时间还得测试一下 不同通道之间是否会有干扰

出0入0汤圆

发表于 2011-11-23 20:58:40 | 显示全部楼层
正在学习用这个,向楼主学习

出0入0汤圆

发表于 2011-11-27 14:41:51 | 显示全部楼层
现在正在学习这东西,不过好让人纠结,到目前还是没有调试出来。希望大家一起来分享自己的学习经验。

出0入0汤圆

 楼主| 发表于 2011-12-2 10:41:41 | 显示全部楼层
测试了一段时间
1对N组网时
如果从机随机并发向主机发送数据,还是会出现丢包的情况

看了很多24L01+组网,包括ANT网络,基本都是基于时隙的,看来只有这个思路才靠谱

出0入0汤圆

发表于 2011-12-6 20:49:18 | 显示全部楼层
关注

出0入0汤圆

发表于 2011-12-23 22:09:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-4 11:52:36 | 显示全部楼层
mark!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-18 16:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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