I2C总线被拉低引起的问题

来源:互联网 发布:mac office2016 破解版 编辑:程序博客网 时间:2024/06/05 08:09

该I2C控制器本身没有内部上拉电阻,因此在PCB设计中在该I2C总线上做了外部上拉设计,但是该上拉电阻使用的是电容屏的供电,因此只有当电容屏上电后该I2C总线才会被拉高,而当电容屏断电时,I2C总线便会被拉低。

总线的这种被拉高拉低的状态可能引起一定概率的I2C 控制器状态紊乱。

测试发现当TP掉电后再重新上电时,某些情况下I2C驱动会检测到I2C控制器的状态 为“忙”从而放弃继续数据传输。
实验证实当I2C控制器正常工作时,若通过某种方式在I2C总线上产生一个Start信 号,该start信号会导致I2C控制器的状态寄存器被标 记为“忙”,直到一个Stop信 号产生后,总线状态才会被重新标记为“空闲“。
由以上实验可推测:当TP断电时,若SDA先于SCL被拉低,则可产生一个Start信 号,从而引出问题。
由于示波器和逻辑分析仪无法捕获到该出错信息,因此上述结论系理论推测。

解决方案:
1. early suspend 时TP不断电。
或者
2. late resume时强制执行I2C reset
或者
3. I2C的上拉电阻和TP的供电控制分离