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 |
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信号下降沿最大时间 |
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。
1.4 完整数据传输流程
一次完整的I2C数据传输事务遵循固定的协议流程,包含起始条件、从设备地址、读写方向、数据字节、应答位和停止条件。理解