I2C (Inter-Integrated Circuit)
I2C(读作 I-squared-C)是一种同步、多主从架构的串行通信总线,由飞利浦(现 NXP)在 1980 年代设计,主要用于连接低速外设。
协议概述
- 物理层:仅需两根信号线。
- SDA (Serial Data):串行数据线。
- SCL (Serial Clock):串行时钟线。
- 架构:多主从(Multi-Master, Multi-Slave),但最常见的是单主多从。
- 地址:每个从设备都有唯一的 7 位或 10 位地址。
- 速率:
- 标准模式 (Standard-mode): 100 kbps
- 快速模式 (Fast-mode): 400 kbps
- 高速模式 (High-speed mode): 3.4 Mbps
通信模式:寻址与应答
I2C 采用地址寻址机制,主机通过发送设备地址来选择通信对象。
sequenceDiagram participant Master as 主机 (MCU) participant Slave1 as 从机 1 (传感器) participant Slave2 as 从机 2 (EEPROM) Note over Master: 发起通信 Master->>Slave1: Start + Address(Slave1) + Write Slave1-->>Master: ACK (应答) Master->>Slave1: 发送寄存器地址 Slave1-->>Master: ACK Master->>Slave1: 发送数据 Slave1-->>Master: ACK Master->>Slave1: Stop
特点:
- 硬件简单:只需要两根线,且支持多设备挂载(总线电容允许范围内)。
- 开漏输出:SDA 和 SCL 都是开漏结构,必须接上拉电阻。
- 应答机制:每发送一个字节(8位),接收方必须回复一个 ACK 位(第9位)。
优缺点
| 优点 | 缺点 |
|---|---|
| 引脚少:仅需 2 根线,节省 MCU 引脚。 | 速度慢:相比 SPI,通信速率较低。 |
| 多设备:通过软件地址区分设备,无需片选线。 | 半双工:同一时间只能收或发。 |
| 流控:支持时钟拉伸 (Clock Stretching) 进行流控。 | 硬件复杂:协议相对复杂,软件模拟较难。 |
典型应用
- 传感器(温度、湿度、加速度计)
- EEPROM 存储器
- RTC 实时时钟
- 显示屏(OLED, LCD)