1. I2C总线基础

I2C(Inter-Integrated Circuit)总线是由Philips公司(现NXP)开发的一种同步、多主从、串行通信总线。它仅需两根信号线——串行数据线SDA和串行时钟线SCL,即可实现芯片间的短距离通信,是嵌入式系统中使用最广泛的板级总线之一。

1.1 I2C总线物理层特性

I2C总线采用开漏(Open-Drain)或开集电极(Open-Collector)输出结构,配合外部上拉电阻实现线与逻辑。所有设备的SDA和SCL引脚均为开漏输出,通过上拉电阻连接至VDD(通常为1.8V、3.3V或5V)。

参数 标准模式 (Standard) 快速模式 (Fast) 高速模式 (High-Speed)
最大时钟频率 100 kHz 400 kHz 3.4 MHz
最大总线电容 400 pF 400 pF 100 pF
上拉电阻典型值 4.7 kΩ 2.2 kΩ 1.0 kΩ
最大从设备数量 127(7位地址) 127(7位地址) 127(7位地址)
最大传输距离(板级) ~1 m ~0.5 m ~0.1 m
关键概念:开漏输出的本质是设备只能将总线拉低(输出0),无法主动驱动高电平。总线空闲时由上拉电阻将SDA和SCL维持在VDD高电平。这种设计允许多个设备共享总线而不会发生短路冲突。

1.2 SDA/SCL信号时序

I2C总线的数据传输完全由SCL时钟同步,SDA数据线在SCL低电平时变化,在SCL高电平时被采样。以下是I2C通信的核心时序定义:

  • 空闲状态:SDA和SCL均为高电平。
  • 起始条件(START):SCL为高电平时,SDA从高电平跳变为低电平。
  • 停止条件(STOP):SCL为高电平时,SDA从低电平跳变为高电平。
  • 数据位传输:每个SCL时钟脉冲传输1位数据。SCL低电平时SDA允许变化,SCL高电平时SDA必须稳定。
  • 应答位(ACK):每传输完8位数据后,接收方在第9个SCL脉冲期间将SDA拉低表示应答。
时序参数速查表(标准模式100kHz):
tLOW(SCL低电平时间)≥ 4.7 μs
tHIGH(SCL高电平时间)≥ 4.0 μs
tSU;STA(起始条件保持时间)≥ 4.0 μs
tHD;DAT(数据保持时间)≥ 0 μs
tSU;DAT(数据建立时间)≥ 250 ns
tr / tf(上升/下降时间)≤ 1000 ns
I2C总线起始条件、数据传输与停止条件时序图 SCL SDA 起始条件 数据位 D7-D0 ACK 停止条件 时序要点: ① SCL高电平时,SDA跳变表示起始/停止条件(红色箭头) ② SCL高电平时,SDA必须保持稳定,数据在SCL低电平时变化 ③ 每8位数据后跟1位应答位,接收方拉低SDA表示ACK

1.3 I2C总线拓扑结构

I2C总线采用多主从总线拓扑,所有设备通过SDA和SCL两条线并联连接。每个设备都有一个唯一的地址(7位或10位),主设备通过地址选择从设备进行通信。

  • 主设备(Master):发起总线传输、产生时钟信号、发送起始/停止条件。典型主设备包括MCU、SoC、DSP。
  • 从设备(Slave):响应主设备寻址,接收或发送数据。典型从设备包括传感器、EEPROM、ADC/DAC、RTC、IO扩展器。
  • 多主仲裁:多个主设备可同时尝试控制总线,通过SDA线与逻辑仲裁,丢失仲裁的主设备自动释放总线。
I2C总线拓扑结构图 RP RP VDD (3.3V) SDA SCL 主设备 (MCU / SoC) 从设备1 (0x50 EEPROM) 从设备2 (0x48 温度传感器) 从设备3 (0x20 IO扩展器) 拓扑要点: ① 所有设备SDA/SCL引脚并联至两根总线,通过上拉电阻接VDD ② 每个从设备有唯一7位或10位地址,主设备通过地址寻址 ③ 总线电容受设备数量、走线长度影响,超过400pF需使用总线缓冲器 ④ 多主设备场景下,通过SDA线与逻辑实现仲裁,避免数据冲突

1.4 I2C总线通信协议

I2C通信以帧为单位,每个帧包含起始条件、从设备地址、读写标志、数据字节、应答位和停止条件。以下是标准7位地址格式的通信流程:

  1. 主设备发送起始条件(S):SDA在SCL高电平时从高变低。
  2. 主设备发送7位从设备地址:高位在前,SCL同步时钟。
  3. 主设备发送读写位(R/W):0表示写操作,1表示读操作。
  4. 从设备发送应答位(ACK):地址匹配的从设备在第9个SCL脉冲拉低SDA。
  5. 数据传输:每8位数据后跟1位应答位,发送方释放SDA,接收方拉低应答。
  6. 主设备发送停止条件(P):SDA在SCL高电平时从低变高。
常见调试陷阱:从设备无应答(NACK)是最常见的I2C通信故障。原因包括:设备地址错误、设备未上电、总线被拉死(SDA或SCL卡在低电平)、上拉电阻值不当导致信号上升沿过缓。调试时应首先用示波器或逻辑分析仪检查SDA/SCL波形。

1.5 I2C总线优缺点对比

优势 劣势
仅需2根信号线,节省PCB空间和IO引脚 传输速率较低(最高3.4MHz),不适合大数据量传输
支持多主设备仲裁,无需片选信号 总线电容限制设备数量和走线长度
每个设备有唯一地址,易于扩展 地址冲突时需硬件修改或使用地址转换器
开漏结构允许不同电压域设备共存(需电平转换) 无内置错误检测机制(除ACK/NACK外)
协议简单,硬件实现成本低 长距离传输可靠性下降,抗干扰能力弱于差分总线
工程建议:在ARM平台设计I2C总线时,建议将传感器、EEPROM等低速外设挂载在同一条I2C总线上,而音频编解码器、触摸控制器等对实时性要求较高的设备应使用独立I2C总线或高速模式。总线上设备数量建议不超过8个,以确保信号完整性。