IIC通信从机无应答:读取数据始终为0XFF

在做项目的时候遇到的问题,IIC通信时读取数据始终为0XFF

下面从写数据开始介绍

向从机写数据步骤为:

开始信号->发送从机地址->等待应答->发送寄存器地址->等待应答->写数据->等待应答->停止信号

等待应答时,若SDA为0则代表成功应答

用示波器查看波形发现,在发送地址后SDA为高,无应答,说明未查询到从机

而从机数据手册中地址为0x6D,我最开始出错的代码如下

 IIC_Write(0x6D,0x30,1,yali_ctrl);//在地址0x6D从机的0x30寄存器中写入yali_ctrl的指令

unsigned char IIC_Write(unsigned char addr, unsigned char reg, unsigned char len, unsigned char * data)  
{
      int i;
    IIC_Start(); 

    IIC_Send_Byte(addr | 0x00); 
    IIC_Wait_Ack();     

    IIC_Send_Byte(reg);        
    IIC_Wait_Ack();
    
    for (i = 0; i < len; i++) 
    {
        IIC_Send_Byte(data[i]);   
        IIC_Wait_Ack();
        
    }
    IIC_Stop();
    return 0;
}

最后发现,IIC通信中,发送完开始信号后,再发送的八位中,只有高七位是从机地址,最低位0、1代表读写

所以从机地址0x6D=0110_1101在我的写法中,最低为1代表了读写,实际发送的地址是0110110,所以无法检测到从机,所以把地址改为1101_101x,这样最低一位代表读写,高七位作为地址,便能访问到从机。

  IIC_Write(0xDA,0x30,1,yali_ctrl);

物联沃分享整理
物联沃-IOTWORD物联网 » IIC通信从机无应答:读取数据始终为0XFF

发表评论