今天我们来一起聊聊I2C(Inter-Integrated Circuit,集成电路总线) ;
首先抛出一个问题吧!
我们已经有了及其方便的UART(Universal Asynchronous Receiver and Transmitter)数据通信协议了,为什么还要有I2C、SPI这些协议呢?
本文对I2C进行一个简单的知识普及;
I2C(Inter-Integrated Circuit,集成电路总线):I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
他拥有2根线:SDA(串行数据线)和SCL(串行时钟线);
SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.当总线空闲时.两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路.在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容过大时,有可能造成传输错误.所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。
一般CPU都是自带I2C总线功能,因此在硬件角度使用起来是非常简单的;
I2C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺.因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。因为12C芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用IC可以很容易形成标准化和模块化,便于重复利用。
下图为335X,一个CORTEX-A8的ARM;带有3路的I2C,总线接口已经集成在芯片内部,不需要特殊的接口电路;