打印

提高nRF24L01通讯可靠性的方法

[复制链接]
4099|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
datouyuan|  楼主 | 2012-11-28 13:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我有个项目要做到双向通讯,传输的数据量很小,但要求一定可靠,我是用nRF24L01做的。

可靠性要求如下:
当发送端发送失败时,接收端一定要没收到数据。
当接收端收到数据时,发送端一定通讯成功。(我的产品偶尔会出现当接收端收到数据时,发送端表示发送失败)


我关于nRF24L01的操作如下:
void NRF24L01_Sleep_Enter(void);
void NRF24L01_Sleep_Exit(void);
void NRF24L01_RX_Enter(void);
void NRF24L01_RX_Exit(void);

void NRF24L01_config(void);
uint8 NRF24L01_TX(uint8 * tx_buf); //在待机1模式下调用,如处于接收模式,要先调用NRF24L01_RX_Exit();
uint8 NRF24L01_RX(uint8 * rx_buf); //在接收模式下调用,如处于发射模式,要先调用NRF24L01_RX_Enter();



RF24L01操作结构图


第一次搞nRF24L01,不熟悉。代码是在网上抄来程序改的。出了很多问题,花了很多时间,现在大约可以了。
主要改进有2点:
1. 在进入接收模式时要清RX_FIFO。网络上的代码只在收到数据时清RX_FIFO。试验中出现接收功能失效,但是可以发送,必须断电后才正常。就是这个原因引起的。
2. 在发射数据前要检查模块的IRQ脚。假如IRQ为低,要执行SPI_RW_Reg(WRITE_REG+STATUS,0x70);使IRQ为高。



可还是会出现通讯不可靠的问题,虽然是偶尔出现,可也是个问题啊。有没有对nRF24L01比较熟悉的,帮我提点建议。非常感谢!!!


相关帖子

沙发
datouyuan|  楼主 | 2012-11-28 13:36 | 只看该作者
我选择nRF24L01就是
1.因为它比较便宜
2.通讯是否成功它有反馈。

使用特权

评论回复
板凳
datouyuan|  楼主 | 2012-11-28 14:01 | 只看该作者
提高发送次数可以提高发送的成功率,可这也要在反馈的可靠性的基础上完成。

我的这个产品功能是这样的:
手持机平均电流小于10uA,nrf24L01平时处于掉电模式。要发送时,要先进入待机1模式,再发送。
座机nrf24L01平时处于接收模式。要发送时,要先进入待机1模式,再发送。
刚开始想搞一个座机,多个手持机,有个公共的通道用于对码。可网络上的程序怎么都调不通,现在暂时搞一个一个座机,一个手持机。

手持机发个控制码。                   座机收到后,执行操作。
手持机发个查询码,转为接收。         座机收到后,转为发射,把自己的状态发给手持机。座机连续发10秒,如发射成功马上转为接收。
(手持机不管发送是否成功都会执行下一步)

使用特权

评论回复
地板
datouyuan|  楼主 | 2012-11-28 14:17 | 只看该作者
另外网上的代码总是藏了些什么东西,不能直接拿来使用。
https://bbs.21ic.com/icview-362548-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:maowenyuan@126.com

31

主题

1083

帖子

9

粉丝