I³C
I³C(Improved Inter-Integrated Circuit,改进型 I²C 总线)是 MIPI 联盟推出的新一代串行总线标准,旨在兼容传统 I²C 的同时,提供更高的数据速率、更低的功耗以及更丰富的功能。I³C 被设计为一种通用的芯片间通信接口,可以在传感器、SoC、移动终端和 IoT 设备中替代 I²C 和部分 SPI 应用。它最大的特点是 完全兼容 I²C 引脚(SCL 与 SDA),同时引入更高效的总线协议和动态寻址机制。
1. 物理结构
I³C 同样只需要两条信号线:
- SCL(时钟线)
- SDA(数据线)
与 I²C 一样,I³C 的总线也采用开漏结构支持多主多从。但在高速模式下,SDA 可以切换为 推挽驱动,提高传输速率和功耗效率。I³C 仍保持与 I²C 器件的兼容性,因此 I²C 设备可以与 I³C 设备共存于一条总线上。
主机 ───┬── SDA ──┬── 从机1 (I³C)
│ ├── 从机2 (I²C)
└── SCL ──┴── 从机3 (I³C)
2. 帧格式
I³C 继承了 I²C 的起始位、停止位概念,但帧结构更灵活,支持 命令码、动态地址分配 和 高速突发传输。
┌─────┬─────────────┬──────────┬─────────┬────┐
│ 起始 │ 设备地址+R/W │ ACK/NACK │ 数据字节 │ 停止│ (I²C 兼容模式)
└─────┴─────────────┴──────────┴─────────┴────┘
┌─────┬───────────────┬─────────┬─────┐
│ 起始 │ 命令码/动态地址 │ 数据突发 │ 停止 │ (I³C 专用模式)
└─────┴───────────────┴─────────┴─────┘
- 起始/停止位:与 I²C 相同,用于通信边界标识。
- 命令码(CCC,Common Command Codes):I³C 定义了一组标准命令,用于设备枚举、配置、动态寻址。
- 动态地址分配:主机可在运行时给每个设备分配地址,而不是固定硬件地址。
- 高速突发模式:采用推挽传输,提高吞吐率。
3. 原理
I³C 的核心改进在于 带宽与灵活性:
- 兼容 I²C:I³C 可在总线上识别并兼容 I²C 设备,以较低速率与其通信。
- 动态寻址:不同于 I²C 的固定地址,I³C 设备在上电时通过 “热插拔” 或 “总线管理” 获取动态地址,避免地址冲突。
- 高速传输:在数据阶段允许 SDA 采用推挽输出,而非开漏,大幅提升传输速率(最高可达 12.5 Mbps)。
- 带内中断(In-Band Interrupt, IBI):设备可以通过 SDA 线直接向主机发起中断请求,无需额外引脚。
- 热插拔支持:设备可在总线上动态加入/退出而无需重启系统。
4. 硬件协议
I³C 协议在物理层和链路层上做了很多优化:
- 物理层:与 I²C 相同的引脚定义,但允许 SDA 推挽驱动。
- 链路层:新增 CCC 命令,统一配置和管理设备。
- 设备类型:支持 I²C legacy 设备与 I³C native 设备共存。
- 仲裁机制:类似 I²C 的线与仲裁,保证多主环境下通信安全。
5. 参数
I³C 在速率和功能上远超 I²C,主要参数如下:
| 特性 | I²C | I³C |
|---|---|---|
| 引脚数量 | 2(SCL, SDA) | 2(SCL, SDA) |
| 速率范围 | 100 kbps ~ 3.4 Mbps | 10 Mbps(典型),12.5 Mbps |
| 地址分配 | 固定硬件地址 | 动态地址分配 |
| 兼容性 | 仅 I²C | 兼容 I²C + 原生 I³C |
| 中断机制 | 无,需额外引脚 | 支持带内中断(IBI) |
| 热插拔 | 不支持 | 支持 |
| 功耗优化 | 较高(开漏传输) | 低功耗(推挽驱动 + 时钟停顿) |