achieveIEEE 发表于 2013-4-12 09:53:00

求助 NRF24L01数据手册中的ACK丢失问题,能否自动处理?

本人在使用NRF时,发现通信可靠度测试时会在100中发生3-5次,
一方接收一方发送,而接收端判断接收正确,而发送端则判断发送错误的情况。
详细看了看数据手册,找到了病因:怀疑是由以下的ACK丢失的情况产生的。

虽然数据手册提供了这样的时序图,但是没有说明芯片是否提供了解决此问题的机制,
在此种情况下,接收端会在传输端未确认ACK发送完成前确认接受完成。那么其 DL 代表
接收端已认为接收完成,那么接收端是否还会继续接受一次把ACK给确定的发出去?
若是不能,则由于ACK的丢失,一方接收完成另一方发送失败的情况就必然发生了?
请问,这样的情况如何避免??

数据手册还提供了这样一个图:

显然这是丢失ACK处理图,由于ACK传输没有重传机制,所以ACK帧虽然短小,传输失败的概率还是有的,
值得注意的是:UL1* 和UL2*代表什么意思?是代表重新配置接收?
还有DLDLIRQ的差别是什么?DL代表接收FIFO已满?DLIRQ代表接收完成ACK发送也完成?
不得而知。
求了解的人,鉴定一下?

achieveIEEE 发表于 2013-4-12 15:37:22

新手上路,发点求助;四眼望处,依然无助。。。{:sad:}

achieveIEEE 发表于 2013-4-12 15:37:52

无助···{:sad:}{:sad:}

hffdxh 发表于 2013-4-13 15:24:18

NRF24L01作为监听模式,它是怎么监听的呢。

achieveIEEE 发表于 2013-4-23 09:26:05

hffdxh 发表于 2013-4-13 15:24 static/image/common/back.gif
NRF24L01作为监听模式,它是怎么监听的呢。

这个类似于硬件处理的接收,应该是连续接收,断点发射,接收之后读码译码校验CRC,之后发出中断

achieveIEEE 发表于 2013-4-23 09:28:43

这个问题我算是基本解决,可以尝试采用发送接收端均使用IRQ的低为接收成功,发送成功的标志,然后就可以自动处理此类事情。另外这里的程序结构应有所变化,主要是CE拉低的时刻,遇到同样问题的同学可以研究一下,祝你们成功!

lanmanck 发表于 2013-5-2 20:36:07

楼上的,我发现发送20次后收发时间就没那么稳定了,发送会时间变长,接收有时候也会变长,你遇到过没有?

channe 发表于 2013-5-2 20:40:21

数据帧不会重复接收,前导码里有帧序号。24L01接收到重复帧会返回ACK,但是不通知单片机。
无线通信本身就存在不确定性。

lanmanck 发表于 2013-5-3 08:43:41

channe 发表于 2013-5-2 20:40 static/image/common/back.gif
数据帧不会重复接收,前导码里有帧序号。24L01接收到重复帧会返回ACK,但是不通知单片机。
无线通信本身就 ...

但是同一个位置不动,每次过20次后就发生这种情况,这个应该不叫不确定性了吧?

achieveIEEE 发表于 2013-5-3 09:43:07

lanmanck 发表于 2013-5-2 20:36 static/image/common/back.gif
楼上的,我发现发送20次后收发时间就没那么稳定了,发送会时间变长,接收有时候也会变长,你遇到过没有? ...

有,但是这个与次数无关,是某一次传输的问题。总之这个传输成功的时间并不是一个确定的值。对接时间可能会长会短。最好的办法是搞超时重传。

achieveIEEE 发表于 2013-5-3 09:45:29

channe 发表于 2013-5-2 20:40 static/image/common/back.gif
数据帧不会重复接收,前导码里有帧序号。24L01接收到重复帧会返回ACK,但是不通知单片机。
无线通信本身就 ...

那也就是说不能指望有百分之百的通信成功,唯一可以确定的就是用足够的重传覆盖错误的概率,达到最终的通信成功?

lanmanck 发表于 2013-5-3 09:58:30

achieveIEEE 发表于 2013-5-3 09:45 static/image/common/back.gif
那也就是说不能指望有百分之百的通信成功,唯一可以确定的就是用足够的重传覆盖错误的概率,达到最终的通 ...

请问你现在的发送和接收超时一次是多长时间?我从20ms一直到200ms都试过,没有合适的结论。
另外跳频方面你做的怎么样?有无相关资料?

achieveIEEE 发表于 2013-5-3 11:41:01

lanmanck 发表于 2013-5-3 09:58 static/image/common/back.gif
请问你现在的发送和接收超时一次是多长时间?我从20ms一直到200ms都试过,没有合适的结论。
另外跳频方面 ...

跳频传输我做的似乎还不如不跳频,传输连接速度太慢。

给你个办法:你用软件测试一下传输的时间。我成功传输的平均时间大致为20ms,那么传输失败依据你上位机的要求而定,一般限制在100ms内。这样的话,等你重传的时候能够接得上,这次传输就OK了。
            但是,毕竟传输帧长和传输距离有很大相关度,如果帧长,则会增大差错率,也就是传输事件增加,这时就需要提升一下超时的时间了,一般控制在成功时间的2-3倍、应该是问题不大。
页: [1]
查看完整版本: 求助 NRF24L01数据手册中的ACK丢失问题,能否自动处理?