3. I3C物理层电气特性归纳总结
I3C总线的物理层,说白了就是信号怎么在PCB上跑的那些规矩。它和传统的I2C、SMBus看着像,但骨子里差了不少。我刚开始接触I3C时也以为直接套I2C的设计就行,结果波形翻车翻得很惨。这一章我把核心的电气参数、信号完整性问题、以及PCB阻抗该怎么控制,给你捋一遍。
3.1 电压域与信号电平
I3C的VDD范围很宽,1.1V到3.6V都能用。但你千万别以为随便选个电压就行。我个人习惯是尽量用1.8V,因为这个电压在主流FPGA和MCU里最常见,而且PCB上的信号完整性问题也好处理一些。
| 参数 | 条件 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|---|
| VDD(供电) | 全范围 | 1.1 | 1.8 | 3.6 | V |
| VIL(输入低电平) | 推挽模式 | – | – | 0.3·VDD | V |
| VIH(输入高电平) | 推挽模式 | 0.7·VDD | – | VDD+0.3 | V |
| VIL(开漏模式) | OD | – | – | 0.3·VDD | V |
| VIH(开漏模式) | OD | 0.7·VDD | – | VDD+0.3 | V |
3.2 时序参数:上升时间、下降时间、数据速率
I3C支持两种模式:SDR(单倍数据率)和HDR(高倍数据率)。SDR下最高12.5MHz,HDR可以跑到30MHz甚至更高。但频率上去后,时序就变得很敏感。
上升时间(tr)和下降时间(tf)有严格限制。推挽模式下,驱动器必须保证信号过冲不超过VDD的10%。你想想看,如果PCB走线阻抗没控好,反射回来的电压叠加上去,很容易就超了。我在调试一块四层板时,SCL线上的过冲飙到了3.9V(VDD=3.3V),差点把从设备的IO烧掉。后来加了源端串联电阻才压下来。
| 参数 | SDR (12.5MHz) | HDR (30MHz) |
|---|---|---|
| tr (推挽) | ≤ 80 ns | ≤ 12 ns |
| tf (推挽) | ≤ 80 ns | ≤ 12 ns |
| tr (开漏) | ≤ 300 ns | 不适用 |
| tf (开漏) | ≤ 300 ns | 不适用 |
| 总线电容Cb | ≤ 50 pF | ≤ 50 pF |
3.3 信令模式:开漏与推挽的切换秘密
I3C最大的特点之一就是能动态切换开漏(OD)和推挽(PP)模式。你想啊,开漏模式靠上拉电阻充电,速度慢但能实现时钟同步和仲裁;推挽模式速度快但可能有信号竞争。I3C在数据阶段用推挽,在地址和仲裁阶段用开漏,两者来回切换。
但切换瞬间会有电流冲击。具体来说,从OD切换到PP时,驱动器从一个弱上拉瞬间变成强上拉,如果此时总线上还挂着另一个驱动器的低电平,就会产生短路电流。我当年第一次看到这个现象时,示波器上抓到一个尖峰,吓得不轻。解决方法是加一个短暂的“高阻”过渡期。I3C协议里规定了THD和TSU的时序保证,你的PCB走线延迟不能超过这个窗口。
// 伪代码:切换时序示意
OD_to_PP():
拉高驱动使能(高阻)→ 等待t_Hold
切换驱动强度(从弱到强)
输出数据
3.4 PCB阻抗控制:特征阻抗与端接
I3C的上升沿在高速模式下只有几个纳秒,如果走线长度超过1/6的上升沿传输距离,就必须考虑传输线效应。说白了就是要控制特征阻抗,并做端接。
我个人习惯的做法是:
- 走线阻抗目标50Ω(单端),最好用两层以上参考平面。
- 源端串联电阻:在驱动器输出串10–33Ω,可以吸收反射。
- 总线长度尽量短:超过10cm就要谨慎计算延时。
- 避免分支:I3C推荐菊花链,不要用星型拓扑。
你可能会问:I3C不是只有两线吗?为什么还要控阻抗?因为当速率跑到30MHz时,信号边沿已经包含5次以上的谐波,能量集中在100–150MHz频段。如果不匹配,反射回来的信号会导致逻辑误判。我在做ARM+FPGA的I3C链路时,就因为没控阻抗,在距离20cm的排线上出现了误码。后来改成了等长差分对布线(虽然I3C是单端,但等长可以减小共模噪声),问题才解决。
3.5 电气特性关系图
3.6 避坑清单总结
讲了这么多,我帮你总结一下最容易出问题的几个点:
- 电平不匹配:不同VDD的器件混用,一定要看IO电压是否兼容。我曾见过有人把1.2V的传感器直接挂3.3V总线上,结果传感器内部PN结反偏烧了。
- 电容超限:总线寄生电容超过50pF时,上升时间会拉长到协议允许的上限之外。实测如果超过70pF,SDR模式都可能找不到地址。
- 端接缺失:高速HDR模式必须考虑源端串联电阻。10MHz以下可以不管,但30MHz时没有端接的板子误码率指数上升。
- 拓扑选错:星型拓扑的分支短线会产生很大的反射。我建议你无论板子多小都走菊花链,如果实在要分支,分支长度尽量小于1cm。
好了,这一章的内容就是这些。电气特性看似琐碎,但每个参数都可能决定你的I3C总线是否能稳定工作。你只要把电压、时序、阻抗、端接这几个点卡住,设计基本不会出大篓子。