打印

关于NRF24L01的一个菜鸟问题。。。

[复制链接]
1197|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xichandoujigu|  楼主 | 2018-5-31 21:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在捣鼓NRF24L01,学习网上的代码时有个疑问。




这个是手册上NRF24L01读和写操作的时序图,我看网上的代码读写都写在一起了
//=============================================
//SPI读写函数,,同时从MISO引脚读取一个字节
//=============================================
uchar SPI_RW(uchar num)
{
uchar bit_ctr;
    for(bit_ctr=0;bit_ctr<8;bit_ctr++)  
    {
  MOSI = (num & 0x80);   //往MOSI引脚写入一个字节         
  num = (num << 1);               
  SCK = 1;                        
  num |= MISO;                 
  SCK = 0;                  
    }
    return(num);                     
}

在写寄存器的时候用了下面的代码
//=============================================
//SPI写寄存器函数。主要功能:往reg中写入value
//附加功能:返回寄存器的状态字
//=============================================
uchar SPI_Write_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0;               
status = SPI_RW(reg);      
SPI_RW(value);            
CSN = 1;                  
return(status);            
}
//====================================
status = SPI_RW(reg);  这个代码我一直没搞明白
我觉得应该先写,再读的顺序应该才对。
SPI_RW(num);这个函数是写的同时返回读的值,读的值没什么意义吧?


再具体点,假设reg为0x01,因为0x01二进制位00000001
那么SPI_RW(reg)函数可以用下面图表表示


序号        写入       读出----------------------------1              0            A
2              0            B
3              0            C
4              0            D
5              0            E
6              0            F
7              0            G
8              0            H
-----------------------------------
返回的结果(二进制)是ABCDEFGH,我认为这个结果是不确定的,因为写入的值还没有写完,怎么能确定读出的值呢?
所以我认为status = SPI_RW(reg)的 status没有意义。
还请指教。








相关帖子

沙发
dirtwillfly| | 2018-6-1 14:38 | 只看该作者
spi是双工的

使用特权

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

本版积分规则

31

主题

96

帖子

2

粉丝