I3C 信号电气特性归纳总结

做 I3C 设计,要先把它的电气特性摸透。我一向认为,协议再复杂,基本功都在这些电压、时序和驱动能力上。这一章咱们就把它彻底理清楚。

1. 电压域与逻辑电平

I3C 总线不是固定电平的。它支持 1.2V、1.8V 以及 3.3V 等常见电压域。你想想看,板子上可能混着不同电平的器件,I3C 的设计就是让你不用额外做电平转换。

参数 最小值 典型值 最大值 单位
VIL(输入低电平) 0 — 0.3 × VDD V
VIH(输入高电平) 0.7 × VDD — VDD V
VOL(输出低电平,IOL = 4 mA) 0 — 0.4 V
VOH(输出高电平,IOH = 4 mA) VDD − 0.4 — VDD V
经验之谈:我的习惯是,在同一板上混用 1.8V 和 3.3V 的 I3C 器件时,优先选 1.8V 做主电源。为什么?因为 1.8V 的摆幅小,信号上升/下降时间更容易控制,对 PCB 走线的阻抗偏差容忍度更高。

2. 开漏与推挽输出 - 两种模式

I3C 总线有一个聪明的设计:它混合使用开漏和推挽两种驱动方式。说白了,低速通讯时用开漏(像 I2C),高速或总线空闲时自动切换到推挽。

  • 开漏模式:OD(Open-Drain)。仅拉低到地,高电平靠上拉电阻。好处是容易实现线与仲裁。坏处是上升沿慢,受 RC 时间常数限制。
  • 推挽模式:PP(Push-Pull)。主动驱动高和低,上升沿陡峭,适合高频。但要注意,如果两个设备同时驱动,可能产生大电流短路。I3C 协议通过动态地址分配和仲裁机制完美规避了这个问题——这一点我在早期项目里观察过才放心。

核心记忆法:OD -> 仲裁 & 总线释放
PP -> 高速 & 陡沿

我曾经碰到过一个案例:某款传感器只支持开漏模式,而主控器默认在高速下用推挽。结果速率一超 12.5 MHz,上升沿严重变圆,时序直接翻车。后来我强制主控器在控制字节后降回开漏模式,问题才解决。

3. 时序参数 - 小心这些边界

I3C 的基本时序参数比 I2C 严格多了。特别是快速模式下,tSU 和 tHD 都只有几十纳秒。PCB 走线稍有失配,就可能踩坑。

时序参数 符号 标准模式 快速模式 (12.5 MHz) 单位
SCL 时钟周期 tSCL ≥ 1000 ≥ 80 ns
数据建立时间 tSU;DAT ≥ 250 ≥ 6 ns
数据保持时间 tHD;DAT ≥ 0 ≥ 0 ns
上升时间 tr ≤ 1000 ≤ 16 ns
下降时间 tf ≤ 300 ≤ 6 ns
⚠ 特别注意:快速模式下 tr 上限只有 16 ns。如果你的 PCB 走线过长(比如超过 15 cm),或者上拉电阻选的太大,上升沿很可能会超这个限制。我当年在一款平板电脑上吃过亏——总线长度才 12 cm,但因为用错了 4.7 kΩ 上拉,信号根本跑不到 12.5 MHz。

4. 上拉电阻选型 - 不是越大越好

I3C 的上拉电阻需要在静态功耗和信号速度之间平衡。我的习惯是:

  • 先算出总线电容 Cbus(每路过孔约 0.5 pF,每 cm 走线约 0.8 pF,加上器件 IO 电容)。
  • 然后用公式 Rpull-up < tr,max / (0.847 × Cbus) 算最大值。
  • 再用 Rpull-up > (VDD − VOL) / IOL 算最小值。

上面公式里的 0.847 是 RC 充电到 63.2% 的常数,嗯,也就是一次时间常数。你选 0.9 也行,但更保守些。

快捷参考(1.8V 系统,4 个从设备,总线长度 ≤ 10 cm):
推荐范围:1.5 kΩ ~ 3.0 kΩ,典型选 2.2 kΩ

5. 信号完整性的核心影响链路

下面这张图我直接画出来,你看一眼就能明白 I3C 信号完整性到底跟哪些环节挂钩。

I3C 信号完整性核心链路 主控器 (I3C Master) I3C 总线 (SCL + SDA) 从设备 1 (Sensor) 从设备 2 (EC) 从设备 3 (Display) 走线阻抗(Z₀) 上拉电阻(Rpu) 寄生电容(Cpar) 边沿速率(tᵣ/tf) 一点经验: 上拉 + 走线寄生电容 共同决定上升沿质量。

6. 噪声容限与串扰

I3C 的噪声容限在开漏模式下相对宽松(因为 RC 慢沿本身有滤波效应),但推挽高速时就紧张了。我建议:

  • SCL 和 SDA 之间保持至少 3W(走线宽度)间距。
  • 避免将 I3C 总线与高速时钟线(如 MIPI D-PHY clock)长距离平行。
  • 在从设备附近加 100 pF 到 1 nF 的去耦电容,但别太大——太大会拖慢上升沿。
避坑提醒:我曾经在设计一块摄像头模组时,把 I3C 的 SDA 跟 MCLK(主时钟)走了 5 cm 平行线。结果 SDA 上耦合进 0.2 V 的串扰毛刺,导致 I3C 从设备偶尔丢失 ACK。后来把间距拉开到 4W + 中间加地线,问题才消失。

7. 驱动强度与总线电容估算

I3C 规范要求从设备在推挽模式下至少能提供 4 mA 的驱动电流(在 1.8V 时)。但实际上,很多传感器只给了 2 mA。你手动量一下从设备输出的 VOL 就知道了。

总线电容 Cbus 的估算我常用这个公式:

C_bus = C_trace + C_via + C_pad + C_io
C_trace ≈ 0.8 pF/cm × 走线长度
C_via  ≈ 0.5 pF / 个
C_pad  ≈ 0.2 pF / 个
C_io   ≈ 3 pF ~ 6 pF / 器件

举个实际例子:板上有 1 个主控 + 3 个从设备,走线总长 12 cm,4 个过孔,每个 IO 按 4 pF 算:

C_bus = (0.8 × 12) + (4 × 0.5) + (4 × 0.2) + (4 × 4) 
      = 9.6 + 2.0 + 0.8 + 16 
      ≈ 28.4 pF

28.4 pF 不算大,但如果走线延长到 20 cm,就直奔 36 pF 了。这时候你再用 2.2 kΩ 上拉,RC 时间常数 ≈ 79 ns,必然超标(快速模式要求 tr ≤ 16 ns)。

实用建议:当总线电容超过 40 pF 时,我倾向于改用更小的上拉电阻(1.0 kΩ ~ 1.5 kΩ),同时检查主控器的驱动能力是否足够。如果还不够,就得考虑加 I3C 中继器了。

8. 小结

电气特性这东西,初期花 20 分钟算一遍,后面能省好几天调试时间。我自己总结的 checklist 就三条:① 确认电平域一致;② 根据总线电容选上拉;③ 检查信号上升沿是否在规范内。这三条过了,基本盘就稳了。