I2C

I2C

1. I2C基础知识

I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

是一种简单的双向两线制总线协议标准,支持同步串行半双工通讯。

标准模式传输速率为 100kbit/s,快速模式为400kbit/s,高速模式下可达3.4Mbit/s,目前大多I2C设备尚不支持高速模式。

I2C总线广泛应用于各种设备和应用领域,例如传感器、存储器(如EEPROM)、显示屏、温度传感器、实时时钟(RTC)、扩展IO芯片等。

image-20250416170619966

  • SCL:串行时钟总线,用于数据收发同步
  • SDA:串行数据总线,用高低电平表示数据
  • 可连接多个I2C通讯设备,支持一主多从也支持多主多从。每个设备都有唯一的地址,主机通过这个地址与从机通信
  • 总线通过上拉电阻接到电源。设备空闲时,输出高阻态,当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平

2. 工作原理

image-20250416181250453

  • 主从关系

    • 主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。
  • 数据传送:

    • 如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送。
    • 如果主机要接收从器件的数据,首先由主器件寻址从器件,然后主机接收从器件发送的数据,最后由主机终止接收过程。
  • 时钟同步

    • SCL用于数据的时钟同步,确保主从设备之间的数据传输同步进行。

3. 主要特点

  • 硬件简单:I2C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路。

  • 多主机总线:I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏。

  • 在线检测:I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试。

  • 数据传输与地址设定:数据传输和地址设定由软件设定,非常灵活。总线上的器件增加和删除不影响其他器件正常工作。

  • 负载能力:由于线路中电容会影响总线传输速度,I2C总线的负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。

4. I2C协议

I2C作为串行通信,是按照位进行传输,一般是高位先行

image-20250416171711468

  • 起始信号:当SCL是高电平时,SDA 线从高电平向低电平切换。
  • 停止信号:当SCL是高电平时,SDA 线从低电平向高电平切换

4.1 传输地址

image-20250416182416520

  • 主机通过SDA信号线发送设备地址(SLAVE_ADDRESS)来查找从机。
  • I2C协议规定设备地址可以是7位或10位,实际中7位的地址应用比较广泛。
  • 紧跟设备地址的一个数据位用来表示数据传输方向,它是数据方向位(R/W),第 8位或第11位。
  • 数据方向位为“1”时表示主机由从机读数据,该位为“0”时表示主机向从机写数据。

5. 总线时序

5.1 起始和停止信号

image-20250416183423518

  • 起始信号

    • 起始信号由主设备发起,用于通知总线上的所有设备即将开始数据传输。

    • 当SCL为高电平时,SDA由高电平变为低电平,产生一个下降沿,表示起始信号的开始。

  • 停止信号

    • 停止信号也由主设备发起,用于通知总线上的所有设备数据传输已经结束。
    • 当SCL为高电平时,SDA由低电平变为高电平,产生一个上升沿,表示停止信号的开始。

5.2 数据有效性

image-20250416183535312

  • SDA高或低电平状态只有在 SCL时钟信号是低电平时才能改变。
  • 必须在SCL保持高电平时,SDA的数据才有效。(SDA保持电平的长度高大于SCL低电平的长度)
  • SCL为低电平时,此时SDA可以跳变。

5.3 响应和非响应

image-20250416183444520

  • 接收方接到数据后要给发送方响应,有2种响应

    • 应答响应。 给发送方一个低电平(ACK),表示接收方已成功接收该字节。

    • 非应答响应。 给发送方一个高电平(NACK),通常表示接收方接收该字节没有成功。

  • 应答信号在SCL的第9个时钟周期(当SCL为高电平时)发送。