我有个项目要做到双向通讯,传输的数据量很小,但要求一定可靠,我是用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比较熟悉的,帮我提点建议。非常感谢!!!
|