Alvin007 发表于 2011-11-16 13:04:07

用nRF24L01+的务必请看

目前测试stm32下的24L01+通信 ESB模式

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

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


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

目前还没找原因?


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

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

Alvin007 发表于 2011-11-16 15:54:49

进一步调试发现
接收端切换到接收,CE一旦拉高,即使程序停在这里,发送端也可以收到3个ACK信号,第四个就收不到了

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

Alvin007 发表于 2011-11-16 16:23:31

进一步调试:

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

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

Alvin007 发表于 2011-11-16 16:34:39

手册上说配制成接收模式,当接收缓冲区满的时候,数据包会丢弃
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_695801KKNV0S.jpg
(原文件名:射频接收模式.jpg)

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

Alvin007 发表于 2011-11-16 17:00:13

再次测试

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

rayt 发表于 2011-11-16 17:21:10

http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_695813TTN6C7.jpg
(原文件名:NRF24L01 BUFFER.jpg)


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

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

Alvin007 发表于 2011-11-16 17:49:14

回复【5楼】rayt

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

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


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

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

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

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

也多谢rayt的热心~


由于用到1对N通信

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

AttTiv 发表于 2011-11-23 20:58:40

正在学习用这个,向楼主学习

asdnew_wuwei 发表于 2011-11-27 14:41:51

现在正在学习这东西,不过好让人纠结,到目前还是没有调试出来。希望大家一起来分享自己的学习经验。

Alvin007 发表于 2011-12-2 10:41:41

测试了一段时间
1对N组网时
如果从机随机并发向主机发送数据,还是会出现丢包的情况

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

chinmel 发表于 2011-12-6 20:49:18

关注

lixupeng 发表于 2011-12-23 22:09:29

mark

lhh1389 发表于 2012-1-4 11:52:36

mark!
页: [1]
查看完整版本: 用nRF24L01+的务必请看