nrf24l01通信读取寄存器都为0,该怎么处理
发布时间:2010-06-14 16:35:05 文章来源:www.iduyao.cn 采编人员:星星草
nrf24l01通信读取寄存器都为0
我先把SPI输入输出短路,可以收到发送的数据,又用GPIO模拟SPI发送,nrf24l01是可以发送数据的,可是用硬件SPI控制nrf24l01就出现问题,给nrf寄存器写值时,可以返回一些值,这应该说明SPI是通的吧?但是一用SPI_Read读取写入的值就发现,就返回0x00,这到底是怎么回事啊??各位大神帮帮忙!!
部分程序如下:
//****************************************************************************************
//*NRF24L01初始化
//***************************************************************************************/
void init_NRF24L01(void)
{
Delay_us(1200); //1.2ms???
CE=0; // chip enable
CSN=1; // Spi disable
//SCK=0; // Spi clock line init high
//check=SPI_Read(READ_REG+STATUS);
st=SPI_RW_Reg(WRITE_REG+STATUS,0xFF);
check=SPI_Read(READ_REG+STATUS);
st=SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址,频道0
check=SPI_Read_Buf(READ_REG+RX_ADDR_P0, RX_ADDRESS1, RX_ADR_WIDTH);
// SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动 ACK应答允许
SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); // 频道0自动 禁止ACK应答,debug
// SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00); // 禁止接收地址只有频道0,debug
// SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); //设置重发时间间隔:500us+86us,最大自动重发次数:10次
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00); // 失能自动重发,debug
st=SPI_RW_Reg(WRITE_REG + RF_CH, 40); // 设置信道工作为2.4GHZ,收发必须一致
check=SPI_Read(READ_REG+RF_CH);
st=SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f); //设置发射速率为2MHZ,发射功率为最大值0dB
check=SPI_Read(READ_REG+RF_SETUP);
}
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0;
Delay_us(1); // CSN low, initialize SPI communication...
SPI_RW(reg); // Select register to read from..
reg_val = SPI_RW(0x0); // ..then read registervalue
CSN = 1; // CSN high, terminate SPI communication
return(reg_val); // return register value
}
//****************************************************************************************************/
//*功能:NRF24L01读写寄存器函数
//写数据value到reg寄存器
//****************************************************************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0;
Delay_us(1); // CSN low, init SPI transaction
status = SPI_RW(reg); // select register
st=SPI_RW(value); // ..and write value to it..
CSN = 1; // CSN high again
return(status); // return nRF24L01 status uchar
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
关于3G模块上网速率的疑问
模块通过的是串口和主板连接,串口最高的波特率是115200bps,那市场上的上网卡是如何实现14Mbps的速率的?
...
-
如何window xp 或win7下的蓝牙编程
想编写一个window xp 或win7下的蓝牙小程序,却无从下手,网上找到的例子,都是在window mobie上的,...
-
有没集成wifi功能的单片机或处理器件芯片
有没集成wifi功能的单片机或处理器件芯片. 我想将该处理器做一个WIFI终端设备来用. 芯...
-
求 一种3G无线路由器,有两个SIM卡插槽,
有没有 一种3G无线路由器,有两个SIM卡插槽,同时支持联通和电信两种3G模式,同时有RJ45接口作为...
-
3G视频服务器
公司开发IPCAM,希望视频可以通过3G无线网络发送,让外访问。
已经开发了相关的板子,让联通的3G卡可以拔号上网,拔号很成...
-
GPRS模块和电脑通信
由于电脑是动态IP的,所以不知道要怎么下手!不可能每次都手动设置IP!
------解决方案--------------------
只...
-
SIM900发送AT+SAPBR=1,1返回错误!!!
用单片机给SIM900发送指令和结果返回如下,到第三条AT+SAPBR=1,1时,就返回+CME ERROR: operation n...
-
不同接口wifi的问题
wifi模块的的接口有很多比如SPI、SDIO、USB等,它们的传输数据的速率(M/S)是一样的吗?能达到多少?如果是要实时传输...
-
PC做服务端,GPRS模块做客户端,PC要配置什么才能与GPRS通信?
我们在做一个智能公交站牌,公交站牌上能显示某一站车的预计到达时间,现在...
-
【求教】华为3G模块EM770W,有哪位高人使用过或了解的吗?
EM770W无线通信模块支持WCDMA 3G
现在EM770W这个模块拿到手了,用串口连接,给...