nRf24L01芯片在MTK60D平台上的调试问题
网上查到的关于2.4g芯片nrf24l01的程序相关的都是各种单片机上做的,现在我在MTK平台上利用几个GPIO口模拟spi,然后与nrf24l01进行通信。
GPIO模拟spi后,进行发送端的调试基本按照这位仁兄的意见来调试的:http://hi.baidu.com/liuhuanstudio/item/3ad54509d0d522c52f4c6ba1
最后是我遇到的问题和现象:
通过spi设置的配置参数和接收端完全一样:
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00);
SPI_RW_Reg(WRITE_REG + SETUP_RETR,0x00);
SPI_RW_Reg(WRITE_REG + RF_CH, 5);
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);
配置好后,将CE拉高,延时启动发射,发送完数据读取STATUS寄存器是0x2e, 也就是说发送成功了
FIFO_STATUS的值0x11;发送完后,自然是空的。
但是接收端确收不到任何数据,但可以确定的是接收端是个 单片机+nrf24l01,和另外同样配置的单片互相收发确认过没问题,也就是说,MTK做的这个发送端虽然提示发送成功,但并没有发出来,不知道为什么。
gpio模拟有问题么?能够正常的和nrf24l01进行设置参数,然后读取出来,说明读写没问题,spi通讯没问题吧?
启动发射后,读取STATUS寄存器为0x2e不代表发送成功?
单片机上可以,MTK上不行,难道和硬件平台有关?
请大家指教,谢谢!
最后,程序没什么问题,可参考网上别人的总结,不过是在单片机上做的:http://wenku.baidu.com/view/45d4ba90dd88d0d233d46a41.html
[解决办法]
1.看一下电压是否满足需要(这个很重要)
2.这个方法你试一下:
我看你的 SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); 没有使用自动应答,可以把发送端和接收端的自动应答打开,自动应答由硬件自动完成。
发送端发送数据后,如果发送端接收到了接收端的应答信号,TX_DS才会置1;如果没有应答信号,发送端会调用自动重传(SETUP_RETR可设置),直到达到设定的重传次数为止。
查看最终的结果(开自动应答):
如果TX_DS=1,说明发送成功,并且接收端回送了应答信号;
如果TX_DS=0,说明发送失败,接收端无响应;
如果开了自动重传,可看MAX_RT的值;
[解决办法]
接收端EN_AA 需要打开对应的通道 bit0-bit6对应通道0-5 如通道0为0x01 通道1为0x02
EN_RXADDR也需要使能通道 方法同上