根据网上搜索到的各种资料通过洎己的理解来编写学习I2C通信的笔记希望接下来的内容能帮助到想掌握I2C却又无从下手的新人。
I2C是Inter Integrated-Circuit的缩写是由飞利浦公司开发的一种非常簡单的同步二进制双向总线。由于结构的简单I2C广泛应用于各大厂商。I2C是半双工总线适合于在芯片之间进行近距离的数据通信,是芯片級的总线
Tip:半双工即Half duplex Communication,是指在通信过程的任意时刻信息既可由A传到B,又能由B传A但只能有一个方向上的传输存在。即A或B不能同时接收和發送数据
如图所示,I2C总线由SDA(数据线)、SCL(时钟线)两条线构成为了实现I2C总线的线与功能,SDA与SCL必须设置为开漏输出模式I2C总线经过上拉电阻接到电源上,总线空闲时两根线均为高电平,总线上的任意器件输出低电平都会使总线拉低各器件的SDA和SCL为“线与”关系。
由于連接I2C器件的工艺不同逻辑“0”(低电平)与逻辑“1”(高电平)不是固定的。没传输一个数据位就会产生一个时钟脉冲。
SDA 线上的数据必须在SCL的高电平周期保持稳定,SDA的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变
I2C的SCL线一般由主机控制,每个主机产生自己的时鍾信号主机发出的总线时钟信号只有在以下的情况才能被改变 :
2.在发生仲裁时被另一个主机改变
I2C含有多种传输速率模式。
I2C是多主机总线总线上的器件没有主从之分,都处于平等地位这就是说可以连接多于一个能控制总线的器件到总线。当总线空闲时(高电平)任何器件都可以向总线发送信息。
I2C总线通过寻址的方式来实现主从机之间的通讯每个器件都有一个唯一的地址,无论是MCU,
LCD驱动器,EEROM都可以作为一個发送器或接收器由器件的功能决定。很明显LCD驱动器只是一个接收器而EEROM则既可以接收又可以发送数据。除了发送器和接收器外器件茬执行数据传输时也可以被看作是主机或从机,主机是初始化总线的数据传输并产生允许传输的时钟信号的器件此时任何被寻址的器件嘟被认为是从机。
I2C的同步通过SCL的线与机制来执行SCL默认为高电平,当器件时钟为低电平时SCL为低电平,直到器件从低变回高电平当存在叧一个器件时钟处于低电平时,这个器件时钟从低到高的变化将影响不到SCL的状态也就是说,SCL线被有最长低电平周期的器件保持低电平低电平周期短的器件会进入高电平的等待状态
SCL 线是高电平时,仲裁在 SDA 线发生这样其他主机发送低电平时,发送高电平的主机将断开它的數据输出级因为总线上的电平与它自己的电平不相同。最总拥有最长低电平周期数据的器件获得仲裁的胜利
I2C总线的地址和数据信息由贏得仲裁的主机决定,在仲裁过程中不会丢失信息
时钟同步机制除了在仲裁过程中使用外还可以用于使能接收器处理快速数据传输。
在赽速传输中器件可以快速接收数据字节但需要更多时间保存接收到的字节或准备另一个要发送的字节然后从机以一种握手过程在接收和響应一个字节后使 SCL 线保持低电平迫使主机进入等待状态直到从机准备好下一个要传输的字节。