I3C 总线物理层与电气特性归纳总结
聊 CRC 校验之前,咱得先把 I3C 的“身子骨”搞清楚。说白了,CRC 算得再好,信号在线上都传不过去,那全是白搭。
我刚开始接触 I3C 时有个错觉——觉得它跟 I2C 差不多,不就是多了个高速模式嘛。结果第一次调板子,发现从设备死活不 ACK。查了一整天,最后发现是上拉电阻没选对。嗯,从那以后我老老实实把电气特性从头啃了一遍。
信号线定义与电气连接
I3C 只用两条线:SCL(时钟)和 SDA(数据)。跟 I2C 一样,都是漏极开路(Open-Drain)加外部上拉。但有个关键区别——I3C 允许在高速模式下切换到推挽驱动。
我个人习惯把电气连接拆成三块来看:
- 主设备(Master): 负责产生时钟,发起通信。可以有多主,但同一时刻只能有一个主控。
- 从设备(Slave): 响应主设备指令。每个从设备有唯一的动态地址。
- 上拉电阻(Rp): 决定总线上升时间。阻值选小了功耗大,选大了速率上不去。
电压模式与速率特性
I3C 规范定义了两种电压模式:
| 模式 | VDD 范围 | 典型应用 |
|---|---|---|
| 标准电压(SV) | 1.7V – 3.6V | 传统 I2C 设备共存场景 |
| 低压(LV) | 1.1V – 1.3V | 低功耗移动设备、IoT 传感器 |
速率方面,I3C 甩 I2C 好几条街。SDR(单倍数据率)模式最高跑 12.5 MHz,HDR(高倍数据率)模式能到 25 MHz 甚至更高。你想想看,传统 I2C 才 400 kHz / 1 MHz,这差距可不是一星半点。
上拉电阻与开漏驱动
开漏驱动的本质:设备只能拉低总线,拉高靠外部上拉电阻。所以上升时间完全由 RC 常数决定——R 是上拉电阻,C 是总线总电容。
上拉电阻的选型公式(我整理的经验简化版):
Rp_min = (VDD - VOL_max) / IOL_max
Rp_max = (Tr_max) / (0.8473 × Cbus)
其中:
VOL_max:输出低电平最大值(通常 0.4V)IOL_max:输出拉电流能力(通常是 3mA 或 4mA)Tr_max:允许的最大上升时间(跟速率有关)Cbus:总线总电容(包含 PCB、封装、引脚)
举个例子:VDD=1.8V,Cbus=30pF,目标速率 12.5 MHz(Tr_max≈12ns),算下来 Rp 大约在 470Ω 到 1kΩ 之间。我个人习惯先取中间值 750Ω 打样,再用示波器测上升时间微调。
时序参数与数据采样
时序这东西,做 CRC 校验之前必须心里有数。如果采样点不对,算出来的 CRC 全是错的。
I3C 规定数据在 SCL 上升沿采样,但不同模式下还有些细节差异:
| 参数 | SDR (12.5 MHz) | HDR (25 MHz) | 备注 |
|---|---|---|---|
| SCL 高电平时间 | ≥ 20 ns | ≥ 10 ns | 下降沿不一定对称 |
| SDA 建立时间 | ≥ 5 ns | ≥ 2 ns | 相对于 SCL 上升沿 |
| SDA 保持时间 | ≥ 0 ns | ≥ 0 ns | 输入保持几乎为零 |
| 总线空闲时间 | ≥ 50 ns | ≥ 25 ns | Stop 到下一次 Start 之间 |
这张图把物理层和数据链路层串起来了。你可以看到,电源、上拉、时序这些物理参数,最终都会集中影响到 CRC 校验时的信号质量。我在项目里经常拿着这张图跟硬件工程师吵架——“你的上升时间太慢了,CRC 能过才怪!”