2. I2C总线时序

I2C(Inter-Integrated Circuit)总线是一种同步、多主从、串行通信总线,仅需两根双向开漏线——串行时钟线(SCL)和串行数据线(SDA)。理解其时序参数与波形是驱动开发的基础,尤其在Android设备中,大量传感器、触控、电源管理芯片均挂载在I2C总线上。本章将深入分析标准模式(100 kHz)、快速模式(400 kHz)和高速模式(3.4 MHz)的时序差异,并通过SVG波形图直观展示SCL与SDA的电气行为。

2.1 I2C总线基本时序概念

I2C通信以“起始条件”(START)开始,以“停止条件”(STOP)结束。数据在SCL低电平时变化,在SCL高电平时被采样。每个时钟脉冲传输1位数据,从最高位(MSB)开始。总线空闲时,SCL和SDA均为高电平(由上拉电阻拉高)。

关键时序定义:
  • tLOW:SCL低电平周期
  • tHIGH:SCL高电平周期
  • tSU;DAT:数据建立时间(SDA在SCL高电平前必须稳定)
  • tHD;DAT:数据保持时间(SCL低电平后SDA保持有效的时间)
  • tSU;STA:起始条件建立时间
  • tHD;STA:起始条件保持时间
  • tSU;STO:停止条件建立时间
  • tBUF:总线空闲时间(停止与下一次起始之间的最小时间)
  • tr / tf:SCL/SDA上升时间与下降时间
I2C基本时序波形:起始、数据传输、停止 I2C基本时序波形:起始 → 数据位传输 → 停止 S START D7 D6 D5 ... D0 数据字节(8位) P STOP SCL高电平时SDA从高→低 = 起始条件;SCL高电平时SDA从低→高 = 停止条件 数据在SCL高电平时被采样,在SCL低电平时允许变化 SCL SDA

2.2 标准模式(Standard-mode, 100 kHz)

标准模式是I2C最基础的通信速率,所有I2C设备均支持。其SCL频率为100 kHz,总线电容限制为400 pF。该模式下时序参数较为宽松,适合低速传感器(如温度、湿度)和简单外设。

2.2.1 标准模式时序参数表

参数 符号 最小值 最大值 单位
SCL时钟频率 fSCL 0 100 kHz
SCL低电平周期 tLOW 4.7 — μs
SCL高电平周期 tHIGH 4.0 — μs
数据建立时间 tSU;DAT 250 — ns
数据保持时间 tHD;DAT 0 3.45 μs
SCL/SDA上升时间 tr — 1000 ns
SCL/SDA下降时间 tf — 300 ns
起始条件保持时间 tHD;STA 4.0 — μs
停止条件建立时间 tSU;STO 4.0 — μs
总线空闲时间 tBUF 4.7 — μs
驱动开发提示:在标准模式下,tLOW = 4.7 μs 和 tHIGH = 4.0 μs 共同决定了SCL周期约为9.7 μs,对应频率约103 kHz。实际编程中,若使用GPIO模拟I2C,需确保延时函数精度满足这些时序要求。

2.3 快速模式(Fast-mode, 400 kHz)

快速模式将SCL频率提升至400 kHz,是Android设备中最常用的I2C速率(如触控IC、音频编解码器、电源管理芯片)。其总线电容仍限制为400 pF,但时序参数更为严格,上升/下降时间要求更短。

2.3.1 快速模式时序参数表

参数 符号 最小值 最大值 单位
SCL时钟频率 fSCL 0 400 kHz
SCL低电平周期 tLOW 1.3 — μs
SCL高电平周期 tHIGH 0.6 — μs
数据建立时间 tSU;DAT 100 — ns
数据保持时间 tHD;DAT 0 0.9 μs
SCL/SDA上升时间 tr — 300 ns
SCL/SDA下降时间 tf — 300 ns
起始条件保持时间 tHD;STA 0.6 — μs
停止条件建立时间 tSU;STO 0.6 — μs
总线空闲时间 tBUF 1.3 — μs
常见陷阱:快速模式下tSU;DAT仅为100 ns,若PCB走线过长或上拉电阻选择不当,可能导致建立时间违规。Android内核I2C控制器驱动中,通常通过调整时钟分频系数和滤波寄存器来满足时序。若使用i2c-dev用户态直接操作,需确保硬件设计符合400 kHz的上升/下降时间要求。

2.4 高速模式(High-speed mode, 3.4 MHz)

高速模式(Hs-mode)将SCL频率提升至3.4 MHz,主要用于高带宽设备(如摄像头传感器、高速ADC)。该模式引入了“主从握手”机制:主设备先以快速模式发送“主码”(00001XXX),从设备识别后启用高速模式,此时SCL上升沿变陡,电流源上拉替代电阻上拉。

2.4.1 高速模式时序参数表

参数 符号 最小值 最大值 单位
SCL时钟频率 fSCL 0 3.4 MHz
SCL低电平周期 tLOW 160 — ns
SCL高电平周期 tHIGH 60 — ns
数据建立时间 tSU;DAT 10 — ns
数据保持时间 tHD;DAT 0 70 ns
SCL/SDA上升时间 tr — 40 ns
SCL/SDA下降时间 tf — 40 ns
起始条件保持时间 tHD;STA 160 — ns
停止条件建立时间 tSU;STO 160 — ns
总线空闲时间 tBUF 160 — ns
高速模式关键差异:
  • 上升/下降时间从1000 ns(标准)骤降至40 ns,要求PCB布局极短、上拉电流源(典型值2 mA)替代电阻。
  • tSU;DAT仅10 ns,对信号完整性要求极高,通常需要差分或屏蔽设计。
  • 高速模式仅在“主码”握手后启用,后续通信仍遵循I2C协议格式。
  • Android设备中,高速模式通常由硬件I2C控制器直接支持,用户态驱动(i2c-dev)需通过ioctl设置传输速率。

2.5 三种模式时序参数对比

下表汇总了标准、快速、高速三种模式的核心时序差异,便于驱动开发时快速参考。

参数 标准模式 (100 kHz) 快速模式 (400 kHz) 高速模式 (3.4 MHz)
fSCL 最大值 100 kHz 400 kHz 3.4 MHz
tLOW 最小值 4.7 μs 1.3 μs 160 ns
tHIGH 最小值 4.0 μs 0.6 μs 60 ns
tSU;DAT 最小值 250 ns 100 ns 10 ns
tr 最大值 1000 ns 300 ns 40 ns
tf 最大值 300 ns 300 ns 40 ns
总线电容限制 400 pF 400 pF 100 pF
上拉方式 电阻上拉 电阻上拉 电流源上拉
典型应用 温度传感器、EEPROM 触控、音频、PMIC 摄像头、高速ADC
标准/快速/高速模式SCL波形对比 标准 / 快速 / 高速模式 SCL 波形对比(同一时间轴) 标准 (100 kHz) tLOW = 4.7 μs, tHIGH = 4.0 μs 快速 (400 kHz) tLOW = 1.3 μs, tHIGH = 0.6 μs 高速 (3.4 MHz) tLOW = 160 ns, tHIGH = 60 ns 波形对比要点: • 高速模式SCL周期仅约220 ns,是标准模式的44倍快 • 快速模式上升/下降时间需≤300 ns,高速模式需≤40 ns • 实际波形中,高速模式需使用电流源上拉以加速上升沿 标准 快速 高速

2.6 SCL与SDA波形分析:实际通信示例

以下是一个完整的I2C写操作波形分析:主设备向从设备(地址0x48)写入一个字节数据0xA5。波形展示了起始条件、7位地址、读写位、应答位、数据字节、应答位和停止条件。

I2C写操作完整波形:地址0x48 + 数据0xA5 I2C写操作波形示例(从设备地址0x48,数据0xA5) S 1 0 0 1 0 0 0 0 W A 1 0 1 0 0 1 0 1 A P S=起始, 1 0 0 1 0 0 0 = 7位地址0x48, W=写(0), A=从设备应答(低电平) 1 0 1 0 0 1 0 1 = 数据0xA5, A=应答, P=停止 注意:SDA在SCL高电平时被采样,数据在SCL低电平时变化

2.7 用户态驱动中的时序编程要点

在Android用户态驱动(通过i2c-dev)中,时序参数通常由内核I2C控制器硬件自动处理,但驱动开发者仍需理解以下要点:

  • 速率设置:通过ioctl I2C_TIMEOUT 和 I2C_RETRIES 控制超时与重试,但速率由内核设备树或控制器驱动决定。用户态可通过 I2C_FUNCS 查询支持的模式。
  • 时序违规检测:若硬件设计不当(如上拉电阻过大导致上升沿过慢),内核可能返回 -EIO 或 -