I2C通讯过程中SDA被一直拉低

一、现象

                             I2C通讯过程中SDA被一直拉低

 

二、分析原因

2.1 正常情况该部分数据

                            I2C通讯过程中SDA被一直拉低

       正常情况slave返回一个byte数据:0x00(该字节8bit都是0)

2.2 异常发生时该部分数据

                           I2C通讯过程中SDA被一直拉低

        出现该情况原因:因为此时从机正在发数据给主机,但是此时主机因为重启,所以clk被上拉电阻一直置为高。从机此时发送给主机的数据位刚好是低电平,若clk不为低,从机讲一直保持低电平数据(CLK为低:SDA改变数据;CLK为高:SDA数据保持)。

 

三、解决方法

       主机开机时,首先需要先判断SDA是否正常,若不正常(低电平),那么就需要通过软件模拟方式将SDA恢复到高电平,然后再配置I2C接口。

       I2C通讯过程中SDA被一直拉低

     因为中断通讯前,slave已经发送了4bit内容,所以还剩4bit内容没有发送。(可以看2.2中的分析)

 

        I2C通讯过程中SDA被一直拉低

 

       

 

四、案例

 

1)异常情况

      I2C通讯过程中SDA被一直拉低

slave发送第3bit时,master突然重启;

 

2)矫正过程

     I2C通讯过程中SDA被一直拉低

通过矫正程序,可以让slave释放SDA总线。

3)正常数据

I2C通讯过程中SDA被一直拉低

   

 

 

 

 

 

 

 

相关文章: