1. I2C协议概述

1.1 I2C总线起源

I2C(Inter-Integrated Circuit)总线由Philips公司(现NXP)于1982年推出,最初用于电视、音响等消费电子设备中板级芯片间的短距离通信。其设计目标是以最少的引脚数(仅需两根线)实现多设备互联,同时支持主从架构与多主机仲裁。经过40余年发展,I2C已成为嵌入式系统中最通用的低速串行总线之一,被广泛应用于传感器、存储器、I/O扩展、ADC/DAC、显示驱动等外设。

关键特性: I2C总线仅需两根双向信号线——串行数据线(SDA)和串行时钟线(SCL),即可挂载多达127个从设备(7位地址模式)或1024个从设备(10位地址模式)。

1.2 物理层特性

I2C物理层采用开漏(Open-Drain)输出结构,SDA和SCL线通过上拉电阻连接到VDD。当总线空闲时,两根线均为高电平。设备通过拉低总线来传输数据或时钟信号。

参数 标准模式 (Standard) 快速模式 (Fast) 高速模式 (High-Speed)
最大时钟频率 100 kHz 400 kHz 3.4 MHz
最大总线电容 400 pF 400 pF 100 pF
上拉电阻典型值 4.7 kΩ 1.5 kΩ 0.5 kΩ
逻辑低电平 (VIL) 0.3 × VDD 0.3 × VDD 0.3 × VDD
逻辑高电平 (VIH) 0.7 × VDD 0.7 × VDD 0.7 × VDD
设计提示: 上拉电阻的选择需平衡功耗与信号上升时间。电阻过小会导致低电平电流过大,电阻过大会使上升沿变缓,限制总线速率。对于100 kHz标准模式,4.7 kΩ是常用起始值。
I2C总线物理连接拓扑 主控制器 (Master) 从设备1 (Slave 0x50) 从设备2 (Slave 0x51) 从设备3 (Slave 0x52) SDA SCL Rₚ Rₚ Rₚ VDD (3.3V / 5V) 物理层要点: • 开漏输出:设备只能拉低总线,不能主动输出高电平 • 线与逻辑:多个设备同时拉低时,总线保持低电平(低电平优先) • 上拉电阻:决定总线空闲电平,影响上升时间和功耗

1.3 主从架构

I2C总线采用严格的主从(Master-Slave)通信模型:

  • 主设备(Master): 负责产生SCL时钟信号、发起START条件、发送从设备地址、控制数据传输方向(读/写)、产生STOP条件。一个I2C总线上可以有一个或多个主设备。
  • 从设备(Slave): 被动响应主设备的寻址,根据地址匹配结果决定是否参与通信。从设备不能主动发起传输,但可以通过时钟拉伸(Clock Stretching)机制请求主设备等待。
角色 职责 时钟控制 典型示例
主设备 发起通信、产生时钟、决定方向 主动产生SCL MCU、SoC、DSP
从设备 响应寻址、发送/接收数据 可拉伸SCL(慢速设备) 传感器、EEPROM、LCD驱动
常见误区: 初学者常误认为从设备可以主动发送数据。实际上,从设备只有在被主设备寻址并收到读命令后,才能将数据放到SDA线上。任何从设备都不能在未经主设备许可的情况下发起传输。

1.4 多主机仲裁概念

I2C支持多个主设备共享同一总线,通过仲裁(Arbitration)机制解决总线冲突。仲裁发生在SDA线上,基于开漏结构的“线与”特性:

  1. 仲裁过程: 当多个主设备同时尝试拉低SDA时,总线电平保持低。每个主设备在发送数据位后,会回读SDA实际电平。如果某个主设备试图发送高电平(释放SDA),但检测到SDA为低(被其他主设备拉低),则该主设备判定仲裁失败,立即释放总线。
  2. 仲裁不丢失数据: 仲裁失败的设备不会破坏正在进行的传输,因为总线上的数据始终是多个主设备输出数据的“线与”结果。失败的主设备会在检测到冲突时停止输出,成功的主设备继续完成传输。
  3. 仲裁与时钟同步: 多主机环境下,SCL线也采用线与逻辑。所有主设备共同产生SCL时钟,最慢的主设备决定SCL低电平持续时间(时钟拉伸),最快的主设备决定SCL高电平持续时间。
多主机仲裁时序示意图 SCL Master1 SDA 1 0 1 0 0 1 0 1 Master2 SDA 1 0 1 0 1 0 0 1 实际SDA 1 0 1 0 0 0 0 1 仲裁失败点 Master2输出1,但总线为0 仲裁规则:多个主设备同时发送时,输出低电平的设备获胜;输出高电平但检测到低电平的设备立即退出。
仲裁与多主机应用场景: 多主机仲裁机制使得I2C总线可以支持多个MCU或智能传感器同时工作,无需额外的片选信号。例如,两个MCU可以共享同一组传感器,通过仲裁决定哪个MCU获得总线控制权。仲裁失败的设备可以稍后重试,不会破坏正在进行的通信。

1.5 I2C协议核心要素总结

要素 描述 关键点
信号线 SDA(数据)、SCL(时钟) 双向、开漏、上拉电阻
通信模型 主从架构 主设备产生时钟,从设备响应
地址 7位或10位从设备地址 7位模式最多127个设备
数据传输 每个字节后跟ACK/NACK 从设备通过ACK确认接收
多主机 仲裁机制解决冲突 线与逻辑,低电平优先
速率 标准100 kHz / 快速400 kHz / 高速3.4 MHz 受总线电容和上拉电阻限制