打印

我发现RF24L01的一个操作要点

[复制链接]
2146|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
datouyuan|  楼主 | 2012-8-4 16:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我发现了RF24L01的一个操作要点:
上电后第一次操作之前,要保证MOSI为0电平一段时间,以后的操作就无所谓了。否则对RF24L01的操作无效。
不知道各位大侠有没有验证过,是不是只有我买的模块特有的?

我上电后第一次操作RF24L01的指令如下:
DelayCount=0;
TimeOut=DelayCount+10;
while(DelayCount != TimeOut); //延时100mS
NRF24L01_Sleep_Enter();
NRF24L01_Sleep_Exit(); //上电后NRF24L01处于Sleep模式


/*********************************************************************************************************
函数:NRF24L01_Sleep_Enter
功能: 设定24L01 进入sleep模式
描述:
*********************************************************************************************************/
void NRF24L01_Sleep_Enter(void)
{
SPI_Read(READ_REG+CONFIG); //???? 上电后一定要执行此语句,第一次操作NRF24L01之前,要保证MOSI为0,否则不能正常工作
//SPI_RW_Reg(WRITE_REG + CONFIG, SPI_Read(READ_REG+CONFIG)&0xfd);
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0c); //将PWR_UP设为0 0b0000 1100
}
假如直接执行SPI_RW_Reg(WRITE_REG + CONFIG, 0x0c);程序不能正常工作。一定要在之前加上 SPI_Read(READ_REG+CONFIG);才能正常工作。
或者执行SPI_RW_Reg(WRITE_REG + CONFIG, SPI_Read(READ_REG+CONFIG)&0xfd);也能正常工作。

相关帖子

沙发
datouyuan|  楼主 | 2012-8-4 17:05 | 只看该作者
本帖最后由 datouyuan 于 2012-8-4 17:19 编辑

因为SPI_Read()操作会使MOSI为0一段时间,所以RF24L01才会正常工作。
发现上述问题后,我直接在上电后使MOSI为0,去除SPI_Read()操作。程序也能正常工作。
这个操作要点有点隐蔽,因为没有按此要点操作,第一次SPI_Read()操作之前的指令虽然没有用,后面的指令也可能使NRF24L01能正常工作。

使用特权

评论回复
板凳
chenyu988| | 2012-11-29 16:13 | 只看该作者
是不是发送的时候从机还没准备好。

使用特权

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

本版积分规则

个人签名:maowenyuan@126.com

31

主题

1082

帖子

9

粉丝