I3C 总线物理层特性:信号电平、上拉电阻、时序要求
咱们做 I3C 总线测量,第一步不是看协议怎么跑,而是先摸清楚它在物理底子上长什么样。说白了,电平怎么判、电阻怎么选、边沿多快,这些东西要是搞错了,抓出来的波形全是废的。我自己刚接触 I3C 那会儿就吃过这个亏——以为跟 I2C 差不多,结果波形一直乱七八糟,后来才发现是上拉电阻用错了。
2.1 信号电平:不再兼容 5V 了
I3C 的电压域比 I2C 窄得多。I2C 还能跑 5V,I3C 最高只允许 3.6V。而且它定义了两套电平标准:
- 传统电平(1.2V – 3.6V):向下兼容 I2C 设备,但 I3C 主机的 VIH 和 VIL 要求更严。
- HDR(高速模式)电平(0.8V – 1.3V):针对高速数据传输,信号摆幅小,功耗低。
我建议你在测量前先确认待测设备的工作电压。拿万用表测一下 VDD 就完事了。别凭经验猜。
| 参数 | 传统模式 | 高速模式 |
|---|---|---|
| VDD 范围 | 1.2V – 3.6V | 0.8V – 1.3V |
| VIH(输入高) | ≥ 0.7×VDD | ≥ 0.7×VDD |
| VIL(输入低) | ≤ 0.3×VDD | ≤ 0.3×VDD |
| 输出低电平(VOL) | ≤ 0.4V @ 4mA | ≤ 0.2V @ 2mA |
| 输出高电平(VOH) | ≥ 0.8×VDD | ≥ 0.8×VDD |
这里有个坑。我在调试一个 1.8V 的传感器时发现,它的 VOL 在 4mA 下拉时跃到了 0.45V,虽然还在 I3C 规定内,但噪声裕量几乎没了。嗯,你想想看,总线上的振铃如果叠加到 VOL 上,很可能被误判为低电平未达标。所以测量时别光看直流电平,还要看波形上的毛刺。
2.2 上拉电阻:这个值不能随便选
I2C 的标准上拉电阻通常选 4.7kΩ 或 10kΩ。I3C 可不一样,它要同时满足低速轮询和高速数据传输。电阻选太大,上升沿太慢,时序不满足;选太小,驱动电流过大,功耗超标。
具体怎么算?我习惯用下面这个公式:
R_pu_min = (V_DD - V_OL) / I_OL_max
R_pu_max = t_r_max / (0.8473 × C_bus)
其中:
V_DD:总线供电电压V_OL:输出低电平最大值(通常 0.4V)I_OL_max:IO 驱动能力(I3C 典型 4mA)t_r_max:高速模式下上升时间要求(通常 12ns 以内)C_bus:总线等效负载电容(包含 IO 引脚、走线、过孔等)
举个例子。1.8V 系统,C_bus 约 30pF,t_r_max 要求 12ns:
R_pu_min = (1.8 – 0.4) / 0.004 = 350Ω
R_pu_max = 12e-9 / (0.8473 × 30e-12) ≈ 472Ω
你看看,算出来 350~472Ω 之间。这和 I2C 常用的 4.7k 差了一个数量级。我当时第一次看到这个结果也吓了一跳,后来查了 I3C 规范才发现确实如此——高速模式需要极快的上升沿,必须用小电阻。
2.3 时序要求:边沿、建立保持时间
I3C 的时序参数比 I2C 更紧凑。特别是 SCL 时钟周期、SDA 数据建立时间、保持时间。我列个表对比一下:
| 参数 | 标准模式 I2C | I3C 传统模式 | I3C 高速模式 |
|---|---|---|---|
| SCL 最大频率 | 100 kHz | 12.5 MHz | 12.5 MHz(更高可达 50 MHz 依赖实现) |
| SDA 建立时间 tSU:DAT | 250 ns | 5 ns | 2 ns |
| SDA 保持时间 tHD:DAT | 0 ns | 0 ns | 0 ns(但信号过冲受限) |
| SCL 上升时间 tr | 1000 ns | 20 ns | 12 ns |
| SCL 下降时间 tf | 300 ns | 15 ns | 8 ns |
| SCL 低电平时间 tLOW | 4.7 μs | 50 ns | 30 ns |
| SCL 高电平时间 tHIGH | 4.0 μs | 50 ns | 30 ns |
看到没?I3C 高速模式下的建立时间只有 2ns。这意味着示波器的采样率和探头带宽必须跟得上。我习惯用 1GHz 带宽的探头,采样率至少 5GSa/s,不然根本看不清边沿。
另外,I3C 的 推挽阶段(Push-Pull) 和 开漏阶段(Open-Drain) 时序要求不同。推挽阶段上升沿由主机驱动,非常陡;开漏阶段靠上拉电阻缓慢上升。测量时要分清楚是在哪个阶段抓的数据。
2.4 知识体系图
下面这张 SVG 把电气参数、上拉电阻选择、时序要求之间的关系画出来了。我画图的时候习惯把主线放在中间,分支往外挂。这样扫一眼就能抓住重点。
2.5 实测时的注意事项
最后聊几个实际调试时容易翻车的地方:
- 示波器探头地线要短。I3C 高速边沿在 ns 级,长地线会引入大电感,波形上出现振铃。我一般用弹簧地线,尽量靠近测试点。
- 测量推挽阶段的上升沿时,别把上拉电阻算进去。推挽阶段主机内部驱动管拉高,上拉电阻基本不起作用。上升时间直接看主机驱动能力。
- 开漏阶段判断斜率是否符合要求:用公式 t_r = 0.8473 × R_pu × C_bus 估算。如果实测比计算慢很多,检查走线电容是否偏大,或者上拉电阻有没有焊错。