1. I2C总线协议基础

1.1 I2C总线物理层特性

I2C(Inter-Integrated Circuit)总线是一种由Philips公司(现NXP)开发的同步、多主从、串行通信总线。它仅需两根双向开漏信号线——串行数据线(SDA)和串行时钟线(SCL),即可实现多个设备之间的通信,广泛应用于嵌入式系统中连接微控制器与传感器、存储器、I/O扩展等外设。

核心物理特性:
  • 双线制:SDA(数据线)和 SCL(时钟线),均为双向开漏输出。
  • 上拉电阻:总线空闲时,SDA 和 SCL 均通过外部上拉电阻保持高电平。
  • 线-与逻辑:任意设备拉低总线即产生低电平,实现多主机仲裁和时钟同步。
  • 多设备挂载:同一总线上可挂载多个主设备和从设备,通过唯一7位或10位地址区分。
  • 传输速率:标准模式(100 kbit/s)、快速模式(400 kbit/s)、高速模式(3.4 Mbit/s)等。
工程要点:上拉电阻的取值直接影响总线上升时间和功耗。典型应用中,100 kbit/s 时常用 4.7 kΩ,400 kbit/s 时常用 2.2 kΩ。电容负载较大时需适当减小电阻值以保证信号完整性。

下表总结了I2C总线在不同工作模式下的关键电气参数:

参数 标准模式 (Sm) 快速模式 (Fm) 高速模式 (Hs)
最大时钟频率 100 kHz 400 kHz 3.4 MHz
总线最大电容 400 pF 400 pF 100 pF
上拉电阻典型值 4.7 kΩ 2.2 kΩ 1.0 kΩ
输出低电平电压 ≤ 0.4 V ≤ 0.4 V ≤ 0.4 V
输入高电平电压 ≥ 0.7 × VDD ≥ 0.7 × VDD ≥ 0.7 × VDD
I2C总线物理连接拓扑 主控制器 (Master) 从设备1 (Slave 0x50) 从设备2 (Slave 0x68) 从设备3 (Slave 0x76) SDA SCL R VDD R 所有设备通过开漏输出连接到SDA和SCL,总线空闲时由上拉电阻保持高电平

1.2 SDA/SCL信号时序

I2C总线的数据传输严格依赖于SCL时钟信号的同步。SDA线上的数据必须在SCL低电平时变化,在SCL高电平时被采样。这一规则保证了数据传输的确定性。

数据有效性规则:

  • SCL高电平期间:SDA上的数据必须保持稳定,此时从设备采样数据位。
  • SCL低电平期间:SDA允许变化,主设备更新下一个数据位。
  • 字节传输:每个字节(8位)后跟随一个应答位(ACK/NACK),由接收方控制。
  • MSB优先:数据从最高位(bit 7)开始传输,到最低位(bit 0)结束。
常见时序陷阱:在快速模式下,SCL高电平的最小保持时间(tHD;STA)仅为0.6 μs。如果主设备时钟占空比控制不当,可能导致从设备采样窗口不足,产生通信错误。驱动开发中务必检查控制器时钟分频配置。

下表列出了I2C总线标准模式和快速模式下的关键时序参数:

时序参数 符号 标准模式 快速模式 说明
SCL时钟频率 fSCL 100 kHz 400 kHz 最大允许频率
SCL低电平时间 tLOW 4.7 μs 1.3 μs SCL低电平最小保持时间
SCL高电平时间 tHIGH 4.0 μs 0.6 μs SCL高电平最小保持时间
数据建立时间 tSU;DAT 250 ns 100 ns SCL高电平前SDA需稳定
数据保持时间 tHD;DAT 0 ns 0 ns SCL低电平后SDA保持时间
上升时间 tr 1000 ns 300 ns SDA/SCL信号上升沿最大时间
下降时间 tf 300 ns 300 ns SDA/SCL信号下降沿最大时间
I2C数据有效性时序图 SCL SDA MSB bit6 bit5 bit4 bit3 bit2 bit1 bit0 LSB tLOW tHIGH 数据有效性规则 SCL高电平期间SDA必须保持稳定(数据采样窗口) SCL低电平期间SDA允许变化(数据更新窗口)

1.3 起始条件与停止条件

I2C总线上的所有通信事务均由起始条件(START Condition)发起,由停止条件(STOP Condition)终止。这两个信号是总线状态转换的关键标志,由主设备独占控制。

起始条件(S):

  • SCL保持高电平时,SDA从高电平切换到低电平。
  • 表示总线从空闲状态进入忙碌状态,开始一次新的传输事务。
  • 起始条件后,主设备立即输出从设备地址和读写方向位。

停止条件(P):

  • SCL保持高电平时,SDA从低电平切换到高电平。
  • 表示总线从忙碌状态回到空闲状态,释放总线控制权。
  • 停止条件后,总线可供其他主设备竞争使用。
工程实践要点:
  • 重复起始条件(Sr):在不产生停止条件的情况下,再次发送起始条件,用于改变数据传输方向(如从写切换为读),避免总线释放后被其他主设备抢占。
  • 起始条件保持时间(tHD;STA):从SDA下降沿到SCL下降沿的最小时间,标准模式为4.0 μs,快速模式为0.6 μs。
  • 停止条件建立时间(tSU;STO):从SCL上升沿到SDA上升沿的最小时间,标准模式为4.0 μs,快速模式为0.6 μs。
起始条件与停止条件时序 SCL SDA 起始条件 (S) 停止条件 (P) 起始条件与停止条件定义 起始条件:SCL高电平时,SDA从高→低切换 | 停止条件:SCL高电平时,SDA从低→高切换

1.4 完整数据传输流程

一次完整的I2C数据传输事务遵循固定的协议流程,包含起始条件、从设备地址、读写方向、数据字节、应答位和停止条件。理解