一篇文章讲透I2C总线协议( 二 )


2、I2C接口的致命缺点就是传输距离近同时速度慢 。大家在使用I2C总线接口的时候切记不要长线传输,尽量只在PCB板内传输,不然偶尔丢数据甚至读不到数据会让人崩溃,不要问我是怎么知道的,问只有眼泪 。
3、关于两线为什么设计成开漏,这个问题我记得我之前在写《STM32单片机I/O的8种工作模式》时给大家埋下过伏笔 。今天就来说一下具体原因 。主要有两点①防止短路:大家想想如果不设为开漏,而设为推挽,几个设备连在同一条总线上,这时某一设备的某个IO输出高电平,另有一台设备的某一个IO输出低电平,这时你会发现这两个IO的VCC和GND短路了;但是开漏就不会有这个问题,如下图示:

一篇文章讲透I2C总线协议

文章插图
 
第二个原因是“线与”,我们想个场景:如果总线上的一个A设备将SDA拉高,这时总线上另一个B设备已将SDA拉低,这时由于1&0=0,所以A设备检查SDA的时候会发现不是高电平而是低电平,这就表明总线上已经有其他设备占用总线了,A只好放弃,如果检测是高电平那就可以使用 。如下图示为24C02芯片内部图,可以看到状态检测脚 。
一篇文章讲透I2C总线协议

文章插图
 
总结I2C总线作为一个常见的总线协议,是非常值得我们来仔细研究琢磨的,通透以后我们再使用任意I2C接口的设备时就可以信手拈来了 。我一直觉得在学习的过程中,“会使用”不一定就是我们追求的终点,会用的同时把一些更深的东西搞懂搞透会收获意想不到的喜悦 。

【一篇文章讲透I2C总线协议】


推荐阅读