I2C 概览
I2C 概览
I2C(Inter-Integrated Circuit,集成电路间总线)由 Philips 公司于 1982 年推出,是一种两线制、同步、半双工的串行总线协议,用于连接同一块电路板上的多个低速外设。
为什么需要 I2C
- 引脚极少:无论挂多少个设备,都只占 2 根线(SDA 数据 + SCL 时钟),对引脚紧张的 MCU/FPGA 非常友好;
- 总线共享:多个设备挂在同一条总线上,通过器件地址寻址,不需要为每个外设单独接线;
- 多主多从:支持多个主机,配合仲裁机制可安全共存。
基本特点
- 两线制:SDA(串行数据线)+ SCL(串行时钟线)
- 同步通信:时钟由主机产生,数据与时钟同步
- 半双工:数据在同一根线上双向传输,同一时刻只能一个方向
- 寻址机制:每个设备有独立的器件地址(7 位或 10 位)
- 开漏 + 上拉:总线电平靠上拉电阻提供,天然支持”线与”与多主机仲裁
- 带应答(ACK):每传输一个字节,接收方回一个 ACK 位,传输可靠性比 SPI 高
传输速率
| 模式 | 速率 | 说明 |
|---|---|---|
| 标准模式(Standard) | 100 kbit/s | 最常用,兼容性最好 |
| 快速模式(Fast) | 400 kbit/s | 大多数现代器件支持 |
| 快速模式+(Fast Plus) | 1 Mbit/s | 较少见 |
| 高速模式(High-speed) | 3.4 Mbit/s | 需额外电流源,很少用 |
总线拓扑
graph LR
VCC[VCC]
M[主机 Master]
S1[从机1 EEPROM]
S2[从机2 温度传感器]
S3[从机3 摄像头]
Rp1[上拉电阻 Rp]
Rp2[上拉电阻 Rp]
VCC --- Rp1 --- SDA[SDA 总线]
VCC --- Rp2 --- SCL[SCL 总线]
M --- SDA
M --- SCL
S1 --- SDA
S1 --- SCL
S2 --- SDA
S2 --- SCL
S3 --- SDA
S3 --- SCL
📌 待补图:I2C 总线硬件连接原理图(多从机 + 上拉电阻选值)
- 上拉电阻:所有设备空闲时输出高阻,总线靠 Rp 拉高;Rp 取值需在速率与总线电容(<400pF)之间权衡,常用 4.7kΩ(100k)~ 1kΩ(400k);
- 总线电容:挂载设备越多、走线越长,总线电容越大,上升沿越缓,最高速率越低。
三协议对比(UART / SPI / I2C)
| UART | SPI | I2C | |
|---|---|---|---|
| 线数 | 2(TX/RX) | 4(SCK/MOSI/MISO/CS) | 2(SDA/SCL) |
| 同步方式 | 异步(约定波特率) | 同步 | 同步 |
| 双工 | 全双工 | 全双工 | 半双工 |
| 寻址 | 无(点对点) | 片选 CS | 器件地址 |
| 速率 | 低(≤几 Mbit/s) | 高(几十 MHz) | 中(≤3.4 Mbit/s) |
| 应答机制 | 无 | 无 | 有(ACK) |
| 典型用途 | 调试口、GPS、蓝牙 | Flash、ADC、LCD | EEPROM、传感器、RTC |