天线|RF射频
直播中

李劲草

7年用户 161经验值
私信 关注
[问答]

SPI通信不是写一个数据,然后要读出一个数据吗?

u8 NRF24L01_Check(void)
{
        u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
        u8 i;
        SPI2_SetSpeed(SPI_SPEED_4);           
        NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);        
        NRF24L01_Read_Buf(TX_ADDR,buf,5);
        for(i=0;i<5;i++)if(buf!=0XA5)break;                                                                    
        if(i!=5)return 1;
        return 0;               
}        
u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len)
{
        u8 status,u8_ctr;            
        NRF24L01_CSN = 0;        
          status = SPI2_ReadWriteByte(reg);
          for(u8_ctr=0; u8_ctr           NRF24L01_CSN = 1;   
          return status;         
}                                   
u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len)
{
        u8 status,u8_ctr;               
          NRF24L01_CSN = 0;           
          status=SPI2_ReadWriteByte(reg);   
        for(u8_ctr=0;u8_ctr           NRF24L01_CSN=1;     
          return status;      
}
SPI通信不是写一个数据,然后要读出一个数据吗??这样写,为何前面的4个0X5A不会丢掉呢??能连续写入5个?然后他用pBuf[u8_ctr]=SPI2_ReadWriteByte(0XFF);读出存进去的数据,这个数据5次出来为何都是0X5A?  当然肯定是在第一个问题的基础上才有第二个问题,那么如果能连续不丢失的写入,那么根据读一个数据,出来一个数据,怎么保证这个地址已经存满了,然后输入0XFF一个个把数据移位出来

回帖(10)

李敏

2020-6-9 15:54:33
SPI把数据写到NRF2401的寄存器里,会保存下来。读出来的时候跟你写进去当然是一样的。
举报

武梨格

2020-6-9 16:01:47
用SPI通信的话,不是写一个数据就要读一个数据出来吗?如果这样的话,写了一个0X5A,再写第二个0X5A不是把第一个0X5A给挤掉了吗?
举报

陈俊

2020-6-9 16:16:10
你去看看NRF2401的资料文档吧
举报

韦明

2020-6-9 16:25:14
楼主我最近也在用调nrf24l01,这个函数我读出来的5个值都是0x00(我只调了发送模块,没有接收模块应该不影响吧),不知道什么原因导致的,寄存器地址也没什么问题,使用在线调试也没有解决这个问题,不知道楼主知不知道这有可能是什么原因导致的?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分