I2C总线被拉低引起的问题
2012-05-03 16:44
211 查看
该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的供电控制分离
总线的这种被拉高拉低的状态可能引起一定概率的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的供电控制分离
相关文章推荐
- I2C总线的仲裁问题
- 和菜鸟一起学linux总线驱动之i2c死锁问题
- I2C总线SCL信号无法正常拉高的问题
- 和菜鸟一起学linux总线驱动之i2c死锁问题
- 和菜鸟一起学linux总线驱动之i2c死锁问题
- 半年之殇:困扰半年的MSP430的I2C总线问题在今天解决,发文总结
- 半年之殇:困扰半年的MSP430的I2C总线问题在今天解决,发文总结
- STM32 I2C 总线占用问题解析
- I2C总线的一般性问题
- I2C总线协议
- Linux I2C核心、总线与设备驱动
- .NET陷阱之五:奇怪的OutOfMemoryException——大对象堆引起的问题与对策
- WebAPI OWIN认证引起的系列问题
- 注意时间不符所引起的问题
- unbalanced enable irq 问题的解决 以及共享的gpio中断引起的问题
- SPI、I2C、UART三种串行总线协议的区别
- Fragment中ViewPager嵌套Fragment引起的问题
- php的慢速日志引起的Mysql错误问题分析
- 常见的CPU访问引起的内存保护问题为什么只用event_122上报 - 举例1
- curl引起的截断问题