SPI读操作码0x80说明 lSPI_SendByte(addr|0x80);

再来贴一次,SPI在读写某芯片【芯片不同可能有差异】寄存器地址的时候,一般都会进行addr|0x80,实际上0x80是一个操作码。相当于把最高位置1,群里有人说也是定位作用。

sx1278的读写时序图:

 

复制代码
/**************************************************************************
 * 函数名:SPI_SendByte
 * 描述  :SPI模块发送函数
 * 输入  :发送数据
 * 返回  :返回数据
 *************************************************************************/
u8 SPI_SendByte(u8 byte)
{     
      u8 i = 0;
      u8 bit_r = 0;    
      for(i=0;i<8;i++)     // output 8-bit
      {    
        //MOSI_PIN=byte & 0x80;        //output 'byte' MSB to MOSI_PIN
        if(byte & 0x80)  //判断最高位是否为1
            MOSI_H;
        else
            MOSI_L;
          
          byte <<= 1;                 // shift next bit into MSB..
          
          SCLK_H;
         
          bit_r<<=1;
          if(MISO_G) bit_r++;
                    
         SCLK_L;
          
        //SCK_PIN=1 ;                 // Set SCK_PIN high..
        //byte|=MISO_PIN;            // capture current MISO_PIN bit
        //SCK_PIN=0;                 // then set SCK_PIN low again
      }
      return(bit_r);                         // return read byte
}
 
 
 
/**************************************************************************
 * 函数名:SPI_ReadRegister
 * 描述  :SPI读取寄存器数值
 * 输入  :寄存器地址
 * 返回  :数据
 *************************************************************************/
u8 SPI_ReadRegister (u8 addr)
{
    u8 Result;
 
    CS_L;    //nSEL = 0;  
 
    SPI_SendByte(addr);        //write data into the SPI register
    Result = SPI_SendByte(0xFF);  //0XFF其实就是伪字节
 
    CS_H;    //nSEL = 1;
    return(Result);
}
 
/**************************************************************************
 * 函数名:SPI_WriteRegister
 * 描述  :SPI写寄存器数值
 * 输入  :寄存器地址,数值
 * 返回  :无
 *************************************************************************/
void SPI_WriteRegister (u8 addr, u8 value)
{
 
    CS_L;                  //nSEL = 1;                             
           
    SPI_SendByte(addr|0x80);            //0X80 spi的最高位是一般协议定位命令位,是读数据或写数据标识 
    SPI_SendByte(value);
 
    CS_H;                  //nSEL = 1;
 
}
复制代码

 

posted @   流水江湖  阅读(4535)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示