I2C通讯过程中SDA被一直拉低
一、现象
二、分析原因
2.1 正常情况该部分数据
正常情况slave返回一个byte数据:0x00(该字节8bit都是0)
2.2 异常发生时该部分数据
出现该情况原因:因为此时从机正在发数据给主机,但是此时主机因为重启,所以clk被上拉电阻一直置为高。从机此时发送给主机的数据位刚好是低电平,若clk不为低,从机讲一直保持低电平数据(CLK为低:SDA改变数据;CLK为高:SDA数据保持)。
三、解决方法
主机开机时,首先需要先判断SDA是否正常,若不正常(低电平),那么就需要通过软件模拟方式将SDA恢复到高电平,然后再配置I2C接口。
因为中断通讯前,slave已经发送了4bit内容,所以还剩4bit内容没有发送。(可以看2.2中的分析)
四、案例
1)异常情况
slave发送第3bit时,master突然重启;
2)矫正过程
通过矫正程序,可以让slave释放SDA总线。
3)正常数据