2. I3C 物理层与电气特性:总线拓扑、信号电平、上拉电阻归纳总结

聊 I3C 的验证,绕不开物理层。

很多人都先去看协议栈上层,觉得地址分配、CCC 命令才是重点。但我个人习惯,拿到一个 I3C 模块,第一件事先看电气参数。为什么?因为物理层不对,上层跑得再欢也是白搭——我曾经被这个坑过。

2.1 总线拓扑:到底谁在线上?

I3C 总线是典型的多主多从架构。说白了,一条总线上可以挂多个 Master 和多个 Slave,但同一时间只有一个 Master 做总线控制。

  • Master:负责发起交易、产生时钟、分配地址。通常主控芯片扮演这个角色。
  • Slave:响应 Master 的请求,被动通信。传感器、EEPROM 等都是 Slave。
  • Secondary Master:一种特殊的「备份」角色,平时当 Slave,需要时能接管总线。我遇到过的一个项目里,MCU 和一个协处理器就用的这种模式搞定双控。

总线结构很简单——一条 SCL(时钟线)+ 一条 SDA(数据线),再加上所有设备共地的 GND。没有片选线,没有额外的中断线(虽然 I3C 引入了带内中断,但属于协议层,这里不扯远)。

注意: I3C 是多主总线,但地址分配时必须保证总线空闲。验证时别忽略仲裁阶段——我见过几份测试报告就是在 SDA 上敲了两个 Master 同时发地址,结果总线锁死了。

2.2 信号电平:不再是 5V 的天下了

I3C 的信号电平比经典 I²C 低得多。看看这张表:

参数 I²C(标准模式) I3C(SDR 模式) I3C(HDR 模式)
VIH(输入高电平) 0.7×VDD 0.85×VDD 0.85×VDD
VIL(输入低电平) 0.3×VDD 0.3×VDD 0.3×VDD
VOL(输出低电平) 0.4V @ 3mA 0.4V @ 4mA 0.4V @ 6mA
VOH(输出高电平) 开漏 + 上拉 推挽(SDR)/ 开漏(HDR) 推挽
电压范围 1.8V ~ 5.5V 1.0V ~ 3.6V 1.0V ~ 3.6V

你想想看,I²C 的 VIH 才 0.7×VDD,I3C 要求 0.85×VDD。这意味着什么?噪声容限变小了。我遇到过一块板子,走线有点长,I²C 跑得好好的,换 I3C 就不行了——就是电平阈值卡得太紧,稍微振铃就误判。

2.3 上拉电阻:不是越大越好

I3C 和 I²C 一样,SDA / SCL 线上需要上拉电阻。但 I3C 有推挽模式,所以上拉电阻的选型要更讲究。

推挽模式下,Master 会主动驱动高电平,此时上拉电阻几乎不影响上升沿——真正的影响在开漏阶段(比如总线空闲、从机应答、HDR 退出等场景)。

计算公式:

R_pullup(min) = (V_DD - V_OL) / I_OL
R_pullup(max) = t_r / (C_bus × 0.8473)

其中:

  • VOL 是输出低电平(0.4V 典型)
  • IOL 是灌电流(4mA~6mA)
  • tr 是上升时间(I3C SDR 要求 ≤ 120ns)
  • Cbus 是总线上总电容(包括器件引脚电容 + 走线电容)
实战经验: 我个人偏好先算最小值,再根据总线电容选一个中间值。比如 1.8V 系统,总线电容 50pF,算出来 Rp 大概在 450Ω~2.2kΩ。我通常先焊 1kΩ,然后上示波器看边沿,再微调。曾经有一次我直接上了 4.7kΩ,结果 SCL 上升沿超过 200ns —— 协议直接超时。

2.4 总线电容与信号完整性

I3C 标准规定 SDR 模式最大总线电容为 50pF(包括所有器件引脚电容)。HDR 模式更苛刻,一般建议不超过 30pF。

嗯,这里要注意:每个 I3C 设备引脚电容通常在 3~6pF。如果挂 10 个从机,光器件电容就 30~60pF 了——很容易超标。所以布局时尽量短走线,减少过孔。我以前测试过一块板子,为了迁就结构走线绕了 15cm,结果 SDA 上全是振铃,最后只能降速跑。

避坑指南: 我曾经在验证时发现一台从机始终回答 NACK,排查两天发现是总线电容超过 80pF,上升沿太缓导致边沿采样错误。从那以后我验证里必测的一项就是「总线电容实测」,用小探头+ TDR 看一眼。

2.5 I3C 物理层知识体系

我把上面这些整理成一张图。你看一眼就明白了各要素之间的关系。

I3C 物理层知识体系 I3C 物理层 总线拓扑 多主架构 SCL+SDA 无片选线 信号电平 Vih/Vil Vol 推挽/开漏 上拉电阻 最小值计算 最大值计算 上升时间约束 总线电容 SDR 50pF HDR 30pF 引脚电容 验证核心检查项 拓扑结构确认 → 信号电平测试 → 上拉电阻计算 → 总线电容实测 → 信号完整性

你看,四个分支:拓扑、电平、上拉电阻、总线电容。它们之间有耦合——比如上拉电阻的选择受总线电容影响,而电容又受拓扑(设备数量)制约。做验证时一定要把它们串起来看。

2.6 实战验证清单(物理层)

  1. 用示波器测量 SCL/SDA 高电平:确认 ≥ 0.85×VDD。
  2. 测量低电平:VOL 不应超过 0.4V。
  3. 测上升时间 tr:SDR 模式下 ≤ 120ns,HDR 模式下 ≤ 60ns。
  4. 计算总线电容:可以用公式 tr = 0.8473 × Rp × Cbus 反推。
  5. 检查推挽/开漏切换时序:从 SDR 被拉到 Low 的瞬间,推挽驱动器必须关闭。
我的小诀窍: 验证物理层时,先拿一个空板子测一遍上拉电阻下的静态电平,再挂设备测动态波形。这样能快速隔离出「板子问题」还是「器件问题」。

好,I3C 物理层就聊到这儿。这些基础参数是后面所有验证步骤的基石。你拿着这份清单去测板子,物理层出不了大毛病。