Skip to content

I2C 总线标准

I2C (Inter-Integrated Circuit) 是由飞利浦 (Philips, 现 NXP) 开发的一种多主机、两线、双向串行计算机总线。

I2C 总线协议详解

I2C 总线的 SDA 和 SCL 接口都必须配置为开漏输出(Open-Drain),并且在总线上外部连接上拉电阻。

❓ 那我问你:为什么 I2C 必须用开漏输出,推挽输出不行吗?

面试官冷笑一声:“大家都知道 I2C 要加上拉电阻,那我问你,如果我非要把主控的引脚配置成推挽输出(Push-Pull),强行输出高低电平,会发生什么后果?”

💡 点击查看满分回答

绝对不能用推挽输出!会导致主控烧毁。

  1. 线与逻辑冲突:I2C 是多主机/多从机总线。如果两个设备同时通信,一个输出高电平(VCC),一个输出低电平(GND)。如果是推挽输出,这就相当于 VCC 和 GND 直接短路,瞬间的大电流会烧毁引脚。
  2. 时钟同步(Clock Stretching)失效:从机可以通过拉低 SCL 来暂停总线(让主机等待)。如果主机是推挽输出高电平,从机强行拉低,同样会导致短路。

总结:开漏输出 + 外部上拉,实现了天然的“线与(Wire-AND)”功能,既保证了多设备挂载的安全,又实现了仲裁和时钟同步机制。

接下来继续正文的内容...

硬件拓扑结构

它仅需要两根信号线:

  • SDA (Serial Data Line): 串行数据线。
  • SCL (Serial Clock Line): 串行时钟线。

总线上的所有设备都并联在 SDA 和 SCL 上,并且这两根线都必须通过上拉电阻(通常 4.7kΩ)连接到逻辑高电平。由于使用的是开漏 (Open-Drain) 驱动方式,具有线与逻辑特性,可以避免多主机同时驱动时造成的短路。

上拉电阻演示效果

下面这个交互演示可以直观看到上拉电阻 Rp、总线电容 Cb、VDD 和通信速率变化时,对上升时间和灌电流的影响,由 Gemini-3.1 创作并持续维护。

移动端说明

为保证阅读体验,交互仿真在移动端已隐藏。请使用平板或桌面端查看完整演示效果。

使用建议

如果你后续改成图床 URL,可以把上面的 src 从 /IIC.html 改成完整的 https 地址。

时序

通信始终由主设备 (Master) 发起。主设备产生时钟信号 (SCL)。数据 (SDA) 只能在 SCL 为低电平时改变状态,在 SCL 为高电平时保持稳定以供采样。

START 与 STOP 信号

  • START: 当 SCL 为高电平期间,SDA 由高变低。
  • STOP: 当 SCL 为高电平期间,SDA 由低变高。

I2C 地址格式

I2C 设备地址由 7 位或 10 位组成,后面跟一位读写位 (R/W)。

地址类型位数格式用途
7位地址8位 (7+1)[6:0] 设备地址 + [7] R/W标准设备,大多数传感器
10位地址16位 (10+1+特殊)11110XX + [6:0] + R/W复杂设备,需要更多地址空间

I2C 传输速度模式

模式最大速率典型应用上拉电阻
标准模式 (SM)100 kbps一般传感器4.7kΩ
快速模式 (FM)400 kbps显示屏、EEPROM1kΩ
快速模式 Plus (FM+)1 Mbps高速传感器470Ω
高速模式 (HS)3.4 Mbps视频设备特殊电路
超高速模式 (UFm)5 Mbps未来应用待定

I2C 信号时序参数

参数标准模式 (SM)快速模式 (FM)快速模式+ (FM+)单位
SCL 时钟频率 (f_SCL)0 - 1000 - 4000 - 1000kHz
保持时间 (t_HD;STA)4.00.60.26μs
设置时间 (t_SU;STA)4.70.60.26μs
数据保持时间 (t_HD;DAT)0 (min)0 (min)0 (min)μs
数据设置时间 (t_SU;DAT)25010050ns
时钟低电平时间 (t_LOW)4.71.30.5μs
时钟高电平时间 (t_HIGH)4.00.60.26μs

常见 I2C 设备类型

📊 传感器

温度、湿度、压力、加速度计等。典型地址:0x40-0x4F 范围。

💾 存储器

EEPROM、FRAM。支持页写入和随机读取。

🖥️ 显示器

OLED、LCD 控制器。支持高速数据传输。

🔌 扩展器

IO 扩展、ADC/DAC。增加系统 IO 能力。

⚡ 电源管理

电压调节器、电池监控。系统电源控制。

🎛️ 音频设备

CODEC、音量控制器。音频信号处理。


相关文章