第2章 I3C物理层:信号线定义、电压规范与上拉电阻选择

咱们做I3C信号测量,首先得把物理层搞清楚。物理层就像房子的地基,地基没打好,后面时序分析再漂亮也是白搭。我个人习惯是,拿到一个新的I3C器件,第一件事就是翻数据手册看它的物理层参数——SCL和SDA到底怎么接、电压范围多少、上拉电阻选多大。

2.1 信号线定义:SCL与SDA

I3C和I2C一样,也是两根线:SCL(时钟)和SDA(数据)。但你别觉得它俩跟I2C一模一样,没那么简单。

  • SCL:时钟线,由主设备驱动。数据跳变沿的采样基准全靠它。
  • SDA:数据线,双向的。主设备发地址、命令,从设备回ACK或者数据。

嗯,这里要注意:I3C的SDA在高速模式(HDR)下会有不同的驱动强度要求,后面时序部分我们会细说。我遇到过一款从设备,SDA上升沿特别慢,结果在4MHz下读数据全是错的——后来发现是PCB走线太长,寄生电容太大。

📌 小贴士:SCL和SDA在PCB上尽量等长、等宽,差分走线对I3C不是必须的,但两根线间距保持一致能减少串扰。个人建议控制在5~10mil间距。

2.2 电压电平规范

I3C的电压范围比I2C宽泛不少。标准化组织规定了几个关键电平阈值,咱们直接看表。

参数 1.2V (VDD=1.2V) 1.8V (VDD=1.8V) 3.3V (VDD=3.3V) 说明
VIL (低电平输入) ≤ 0.3×VDD ≤ 0.3×VDD ≤ 0.3×VDD 固定比例,不是固定电压
VIH (高电平输入) ≥ 0.7×VDD ≥ 0.7×VDD ≥ 0.7×VDD 同上
VOL (低电平输出) ≤ 0.2×VDD ≤ 0.2×VDD ≤ 0.2×VDD 一般≤0.4V (3.3V下)
VOH (高电平输出) ≥ 0.8×VDD ≥ 0.8×VDD ≥ 0.8×VDD 注意是弱上拉,不是rail-to-rail
上升/下降时间 ≤ 3ns@10pF ≤ 3ns@10pF ≤ 6ns@10pF 负载不同会变

为什么用比例而不是固定电压?说白了就是为了兼容不同电压域。你想想看,1.2V系统里0.36V就是低电平了,但在3.3V系统里0.36V还是低电平——比例设计让IP核可以跨电压复用。

⚠️ 避坑指南:我曾经碰到一个项目,主设备用1.8V,从设备用3.3V,中间没有电平转换。结果从设备死活不响应——因为它认为主设备输出的“高电平”0.9V根本达不到它的VIH门槛(2.31V)。老老实实加了TXB0104电平转换芯片才搞定。

2.3 上拉电阻选择

上拉电阻这事,看着简单,实际坑很多。I3C总线上拉电阻的取值直接影响上升沿时间,进而影响时序裕量。

基本公式还是RC充放电:

t_rise ≈ 2.2 × R_pullup × C_bus
其中 C_bus = C_pin_master + ΣC_pin_slave + C_trace

I3C规范要求上升时间在不同速度模式下有上限(比如10MHz SDR模式要求t_rise ≤ 8ns)。我们反推一下R_pullup的上下限:

  • 下限:由驱动器的灌电流能力决定。比如驱动器能拉4mA,VDD=1.8V,那R_min = (VDD - VOL_max) / I_OL ≈ (1.8 - 0.36)/0.004 ≈ 360Ω。别选比这个还小的,否则数据线拉不低。
  • 上限:由上升时间要求决定。假定C_bus=30pF,t_rise_max=8ns,则R_max = t_rise / (2.2 × C_bus) ≈ 8e-9 / (2.2 × 30e-12) ≈ 121Ω。嗯,这里要注意——这么小的电阻意味着总线静态功耗会比较大,但为了时序只能忍。

我整理了一个常见场景的推荐值,大家可以参考:

VDD (V) 总线电容 C_bus (pF) 推荐 R_pullup (Ω) 备注
1.2 10~20 1k ~ 2k 低频≤1MHz可用
1.8 20~30 500 ~ 1k 普通SDR模式
3.3 30~50 200 ~ 500 高速HDR模式推荐取小
❌ 常见误区:有人直接套I2C的4.7kΩ上拉电阻给I3C用。在3.3V、50pF负载下,4.7kΩ算出来上升沿时间约517ns——I3C在10MHz下周期才100ns,上升沿就占掉5个周期,根本没法用。记住:I3C的上拉电阻通常比I2C小一个数量级!

2.4 知识结构图

下面这张图把物理层三个核心模块的关系串起来了,方便你对照理解。

I3C物理层核心要素 I3C物理层 信号线定义 SCL (时钟) / SDA (数据) 电压电平规范 VIL/VIH/VOL/VOH 上拉电阻选择 Rmin / Rmax / 推荐值 SCL: 时钟 → 采样基准 SDA: 数据 → 双向 输入:VIL≤0.3VDD, VIH≥0.7VDD 输出:VOL≤0.2VDD, VOH≥0.8VDD Rmin由灌电流限制 Rmax由上升时间限制 ⚠️ 三者相互关联:上拉电阻影响上升沿时间 → 上升沿时间决定电压阈值采样点 → 信号线负载又反过来影响电阻选择

2.5 关于上拉电阻的实操建议

选电阻不能光看计算,还得看实际测试波形。我教大家一个土办法:用示波器钩住SDA,看上升沿是不是干净的单斜率,有没有回勾、台阶。如果有台阶,说明阻值偏大,寄生电容在某个阈值附近充不上电。

  1. 先估算:拿到总线电容(查器件手册,PCB寄生按4~5pF/inch估算),用公式算出R的理论范围。
  2. 再仿真:用LTspice搭个简单RC网络,把驱动器open-drain模型带上,跑瞬态看上升沿。
  3. 最后实测:在板上焊个可调电阻或者预留多个焊盘,换不同阻值看波形。我通常备0402封装的220Ω、470Ω、1kΩ各两个,现场换着测。
🛠️ 我的实测习惯:在总线上挂一个逻辑分析仪(比如Saleae),同时看SCL和SDA。如果SDA的上升沿超过了SCL半个周期,那时序肯定出问题。这时候别纠结理论值,直接降阻,直到上升沿小于1/4周期为止。