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 上,很可能被误判为低电平未达标。所以测量时别光看直流电平,还要看波形上的毛刺。

我曾经踩过的坑:I3C 的 VIH/VIL 阈值百分比虽然和 I2C 一样,但 I2C 允许 5V 输入,I3C 不允许。直接把 5V I2C 设备往 I3C 总线上挂,会烧 IO。切记先查数据手册的最大额定值。

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 规范才发现确实如此——高速模式需要极快的上升沿,必须用小电阻。

实测建议:我手头一般备一组 330Ω、470Ω、680Ω 的贴片电阻。实测时先上 470Ω,用示波器看上升沿是否在 12ns 以内。如果过冲大,再换成 680Ω 试,但得保证 t_r 不超限。

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) 时序要求不同。推挽阶段上升沿由主机驱动,非常陡;开漏阶段靠上拉电阻缓慢上升。测量时要分清楚是在哪个阶段抓的数据。

为什么这么高速还要开漏?因为 I3C 需要动态地址分配和带内中断(In-Band Interrupt),这些场景下从机可能同时驱动 SDA 或 SCL,必须用开漏实现线与。所以 I3C 是混合拓扑:正常数据传输用推挽,仲裁和中断用开漏。

2.4 知识体系图

下面这张 SVG 把电气参数、上拉电阻选择、时序要求之间的关系画出来了。我画图的时候习惯把主线放在中间,分支往外挂。这样扫一眼就能抓住重点。

I3C 物理层特性核心结构 I3C 物理层 信号电平 上拉电阻 时序要求 传统模式 1.2-3.6V 高速模式 0.8-1.3V Rpu_min 计算 Rpu_max 计算 电容 Cbus 约束 tSU:DAT / tHD:DAT tr / tf 边沿速率 tLOW / tHIGH 脉宽 关键:三者耦合,上拉电阻决定了上升时间,上升时间影响了建立/保持时间裕量

2.5 实测时的注意事项

最后聊几个实际调试时容易翻车的地方:

  1. 示波器探头地线要短。I3C 高速边沿在 ns 级,长地线会引入大电感,波形上出现振铃。我一般用弹簧地线,尽量靠近测试点。
  2. 测量推挽阶段的上升沿时,别把上拉电阻算进去。推挽阶段主机内部驱动管拉高,上拉电阻基本不起作用。上升时间直接看主机驱动能力。
  3. 开漏阶段判断斜率是否符合要求:用公式 t_r = 0.8473 × R_pu × C_bus 估算。如果实测比计算慢很多,检查走线电容是否偏大,或者上拉电阻有没有焊错。
一个小技巧:我习惯先测量 SCL 和 SDA 的静态电平(总线空闲时),然后发送一个已知的地址帧(比如 0x7E),看触发后的波形。只要上升沿、下降沿、电平阈值都落在规格内,物理层就算通过了。后面再测地址分配时序就心里有底。