1. I2C总线基础:历史、物理层与电气特性

1.1 I2C总线历史与发展

I2C(Inter-Integrated Circuit)总线由Philips半导体(现NXP)于1982年推出,最初用于电视接收机内部芯片间的低速通信。其设计目标是以最少的引脚(仅需2根线)实现多主设备、多从设备的板级通信。

版本 推出年份 最大速率 关键特性
I2C 1.0 1982 100 kbit/s 标准模式(Standard-mode)
I2C 2.0 1992 400 kbit/s 快速模式(Fast-mode)
I2C 3.0 2007 1 Mbit/s 快速模式+(Fast-mode Plus)
I2C 4.0 2012 5 Mbit/s 超快速模式(Ultra Fast-mode)
I2C 5.0 2014 5 Mbit/s 结构优化,增强多主仲裁
关键认知: I2C 总线从诞生至今已超过40年,其核心设计——两线制、多主仲裁、同步时钟——始终保持不变,成为嵌入式系统中最广泛使用的板级通信协议之一。

1.2 物理层特性:SDA与SCL

I2C总线仅使用两条双向信号线:

  • SDA(Serial Data Line):串行数据线,用于传输地址和数据。
  • SCL(Serial Clock Line):串行时钟线,由主设备产生,同步数据传输。

两条线均为开漏(Open-Drain)结构,即设备只能将线拉低(输出低电平),不能主动拉高。高电平由外部上拉电阻提供。这种结构允许多个设备共享总线,实现线与(Wired-AND)逻辑。

物理层核心规则:
  • 总线空闲时,SDA和SCL均为高电平(由上拉电阻维持)。
  • 任何设备都可以拉低SCL来延长时钟周期(时钟拉伸)。
  • 多个主设备同时驱动总线时,通过仲裁机制决定胜出者。
I2C 总线物理连接结构 主设备 1 (Master 1) 主设备 2 (Master 2) 从设备 1 (Slave 1) 从设备 2 (Slave 2) Rp Rp SDA (数据线) SCL (时钟线) VDD 开漏输出 线与逻辑

1.3 电气特性与上拉电阻选择

上拉电阻是I2C总线正常工作的关键元件。其阻值选择直接影响信号上升时间、功耗和最大通信速率。

参数 标准模式 (100 kHz) 快速模式 (400 kHz) 快速模式+ (1 MHz)
最大上升时间 (tr) 1000 ns 300 ns 120 ns
最小上拉电阻 (Rp_min) 1.6 kΩ 1.6 kΩ 1.6 kΩ
最大上拉电阻 (Rp_max) 10 kΩ 4.7 kΩ 2.2 kΩ
总线电容 (Cb) ≤ 400 pF ≤ 400 pF ≤ 550 pF
工程注意: 上拉电阻过小会导致灌电流过大,超出设备IOL规格;上拉电阻过大会导致上升时间过长,无法满足高速通信时序要求。实际设计中,建议在 2.2 kΩ ~ 4.7 kΩ 之间选择,并根据总线电容和通信速率进行验证。

1.4 上拉电阻计算公式

上拉电阻的选取需满足两个约束条件:

  • 最小值约束:保证灌电流不超过设备允许的最大值 IOL。
  • 最大值约束:保证RC时间常数满足上升时间要求。
/* 上拉电阻最小值计算 */
Rp_min = (VDD - VOL_max) / IOL_max

/* 上拉电阻最大值计算 */
Rp_max = tr_max / (0.8473 × Cb_total)

/* 其中:
   VDD     = 总线供电电压 (通常 3.3V 或 5V)
   VOL_max = 输出低电平最大值 (通常 0.4V)
   IOL_max = 输出低电平灌电流 (通常 3mA)
   tr_max  = 允许的最大上升时间
   Cb_total = 总线总电容 (包括引脚电容 + 走线电容)
*/
实际选型建议:
  • 3.3V 系统、100 kHz:推荐 4.7 kΩ
  • 3.3V 系统、400 kHz:推荐 2.2 kΩ ~ 3.3 kΩ
  • 5V 系统、100 kHz:推荐 4.7 kΩ ~ 10 kΩ
  • 多设备总线(>10个节点):适当减小上拉电阻以补偿电容增加
上拉电阻选择流程 确定总线参数 计算 Rp_min = (VDD - VOL) / IOL 计算 Rp_max = tr / (0.8473 × Cb) 选择 Rp_min < Rp < Rp_max VDD = 3.3V, VOL = 0.4V IOL = 3mA → Rp_min ≈ 967Ω 实际取 1.6kΩ ~ 2.2kΩ tr = 300ns (400kHz) Cb = 200pF → Rp_max ≈ 1.77kΩ 最终选 1.8kΩ

1.5 总线电容与信号完整性

总线电容是限制I2C通信距离和设备数量的主要因素。每个设备引脚贡献约 5~10 pF,PCB走线每厘米贡献约 1 pF。当总线电容超过规格限制时,信号上升沿变缓,可能导致数据采样错误。

总线电容范围 最大设备数(典型) 最大总线长度 推荐上拉电阻
< 100 pF 2~5 < 10 cm 4.7 kΩ ~ 10 kΩ
100 ~ 200 pF 5~10 10 ~ 30 cm 2.2 kΩ ~ 4.7 kΩ
200 ~ 400 pF 10~20 30 ~ 50 cm 1.6 kΩ ~ 2.2 kΩ
> 400 pF 需使用缓冲器 需使用中继器 需分段设计
设计经验: 在嵌入式Linux系统中,I2C总线通常用于板级传感器、EEPROM、RTC等低速外设。建议将总线电容控制在 200 pF 以内,上拉电阻选用 2.2 kΩ(3.3V系统)或 4.7 kΩ(5V系统),以兼顾功耗和信号质量。

1.6 本章小结