I²C(Inter-Integrated Circuit)即集成电路总线,它其实是I²C Bus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I²C的正确读法为“I平方C”("I-squared-C"),而“I二C”("I-two-C")则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。--------维基百科
![](https://i-blog.csdnimg.cn/blog_migrate/38e2e5f26bef0927569de635359e66cf.png)
一、总线的概念
通过SCL和SDA在连接到总线的器件之间进行信息交流。每个器件都有一个唯一的地址识别(微处理器、lCD驱动器、存储器及键盘接口)。而且都可以作为一个发送器或接收器,由器件的功能决定。很明显 LCD驱动器只是一个接收器,而存储器则既可以接收又可以发送数据,除了发送器和接收器外器件在执行数据传输时也可以被看作是主机或从机 。见表 1主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,此时任何被寻址的器件都被认为是从机。
1.1总线的特征
总线的两条线SCL和SDA都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压。实际使用中,通常将SCL定义为输出类型,SDA为输入输出类型。当总线空闲时,这两条线路都是高电平。
总线上的数据传输速率在标准模式下可达100Kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。连接到总线的接口数量只由总线电容400pF的限制决定。
1.2 位传输
由于连接到总线的器件有不同种类的工艺(CMOS、NMOS、双极性),逻辑0和1的电平不是固定的,它由
的相关电平决定。每传输一个数据位就产生一个时钟脉冲。
1.2.1 数据的有效性
SDA线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。
![](https://i-blog.csdnimg.cn/blog_migrate/b5aa59ffcd94d94b240ea77cb463d979.png)
图2中给出了SDA上数据何时改变的示意图,由图可知,在SCL高电平期间,数据必须保持稳定;在SCL为低电平期间,才允许SDA上数据发生改变。
1.2.2 起始和停止条件
起始条件:在SCL为高电平器件,SDA由高电平跳变为低电平,此情况表示起始条件。
停止条件:在SCL为高电平期间,SDA由低电平跳变为高电平,此情况表示停止条件。
起始条件和停止条件一般由主机产生。起始条件和停止条件如图3所示:
![](https://i-blog.csdnimg.cn/blog_migrate/57e396533f27e3d296ef4da98f60edcd.png)
图3中S表示起始条件,此时,SCL为高电平,SDA由高电平跳变为低电平;P表示结束条件,此时,SCL为高电平,由低电平跳变为高电平。
1.2.3 数据发送过程
在检测到起始条件后,接下来可以进行数据的发送,发送到SDA线上的每个字节必须为8位。每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应信号。首先传输的是数据的最高位。
响应:在一个字节发送完毕后后面必须跟一个响应信号。想关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间,主机释放SDA线(此时SDA为输入类型),此时若从机发通过SDA数据线传入一个低电平,则从机响应;从机相应后可以继续进行数据的传输,若不在进行数据传输,此时只需要在从机响应后主机再产生一个停止信号即可。
![](https://i-blog.csdnimg.cn/blog_migrate/08e6db6219a215103d621b82af2cbc02.png)
图4中通过是 总线发送数据的过程,首先主控器产生起始信号(告诉从机主机要发送数据了),然后从机接收到起始信号后开始做好接收数据的准备,接下来主机就可以进行数据的发送,图4中首先发送的是被控器7位地址和一位读写选择信号,在主机发送完成后,主机会释放SDA总线(此时SDA由输出类型变为输入类型),同时从机在接收完数据信号后通过SDA线传输给主机一个应答信号ACK(SCL为高时,SDA为低),在主机检测到应答信号后主机继续发送下一个字节,待发送完成后主机释放SDA总线(SDA由输出变为输入类型),同时从机在接收完数据信号后通过SDA线传输给主机一个