I2C总线简介

I2C总线是飞利浦(PHLIPS)公司推出的一种串行总线,用于连接微控制器及其外围设备,具有接口线少、控制方式简单、器件封装形式小、通信速率较高等优点。

  • I2C串行总线有两根双向信号线。一根串行数据线SDA,一根串行时钟线SCL。
  • 每个连接到总线上的器件通过唯一的地址联系主机,同时主机可以作为主机发送器或主机接收器。
  • 它是一个真正的多主机总线,如果两个或更多主机同时初始化,则数据传输可以通过冲突检测和仲裁防止数据被破坏。
  • 串行的8位双向数据传输位速率在标准模式下可以达到100Kb/s,快速模式下可以达到400Kb/s,高速模式下可以达到3.4Mb/s
  • 连接到相同总线的IC数量只受到总线最大电容400PF的限。I2C协议规定,在启动总线后第1字节的高7位是从节点的寻址地址,其中高四位为器件类型识别符,接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作,所以具体挂载多少个器件由I2C地址决定,7位寻址地址减去1个广播地址0x00不用,所以有2^7=128 - 1 = 127,那就是127个地址, 所以理论上可以挂127个从器件。

从设备的地址由固定部分和用户自定义部分组成。

  • 固定部分:D7-D4 共4位决定的。这是由从设备的生产厂商生产时就已确定的值。确定器件类型
  • 用户自定义部分:D3-D1 3位通常对应设备的3个引脚(A0~A2)。把3个引脚接到不同的电平上,就可以形成一个3位的数值。相同类型器件的区分

I2C如何同时挂载多个同一种器件(地址相同的器件)
理论上是不会这样设计的,如果一定要这样做的话,可以通过硬件上设计,控制器件是否挂载总线来实现(可用一个开关电路切断器件SDA或者SCL是否接入总线来实现)

IIC总线信号类型
IIC总线在传送数据过程中共有3种类型信号:开始信号、结束信号和响应信号

  • 开始信号(S):SCL为高电平时,SDA由高电平向低电平跳变,表示起始信号,开始传送数据
  • 结束信号(P):SCL为高电平时,SDA由低电平向高电平跳变,表示结束信号,结束传送数据
  • 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA电平。即接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传 递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

I2C总线的主机与从机之间是如何通信的呢?
I2C总线的主机与从机之间的通信主要和I2C的时序有关。在通信开始的时候SCL与SDA都置为高电平,此时为总线空闲时间。当SCL为高电平期间SDA的电平被拉低,标志这总线的启动。当SCL为高电平期间SDA的电平被拉高,标志这总线的终止。在进行数据传送时,SCL为高电平期间,SDA上的数据必须保持稳定,只有在SCL的信号为低电平时,SDA上的高电平才允许变化。所以只要我们根据芯片手册正确的写好IIC的时序,按时序发送器件地址(不同的器件的地址不同)以及数据,就可以使主机与从机之间通信。
如下图AT24C02读/写操作示意图:
\"AT24C02读写操作示意图\"

I2C总线的仲裁
总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况,这种情况叫做总线竞争。I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。

I2C总线的其他注意点
1、进行数据传送时,在SCL为高电平期间,SDA线上电平必须保持稳定,只有SCL为低时,才允许SDA线上电平改变状态。并且每个字节传送时都是高位在前。
2、对于应答信号,ACK=0时为有效应答位,说明从机已经成功接收到该字节,若为1则说明接受不成功。
3、如果从机需要延迟下一个数据字节开始传送的时间,可以通过把SCL电平拉低并保持来强制主机进入等待状态。
4、主机完成一次通信后还想继续占用总线在进行一次通信,而又不释放总线,就要利用重启动信号Sr。它既作为前一次数据传输的结束,又作为后一次传输的开始。
5、总线冲突时,按“低电平优先”的仲裁原则,把总线判给在数据线上先发送低电平的主器件。
6、在特殊情况下,若需禁止所有发生在I2C总线上的通信,可采用封锁或关闭总线,具体操作为在总线上的任一器件将SCL锁定在低电平即可。
7、SDA仲裁和SCL时钟同步处理过程没有先后关系,而是同时进行的。

收藏 打印