动态地址分配中的EMI问题

我记得刚接触I3C那会儿,第一次做整机EMC摸底测试,辐射频谱在150MHz附近直接冒了个尖峰,超标将近6dB。排查了半天,发现罪魁祸首居然是动态地址分配(DAA)那几十毫秒的过程。说实话,当时挺意外的——一个初始化阶段的“握手”动作,竟然能把整块板子的EMI搞崩。

动态地址分配,说白了就是I3C主设备给挂在上面的从设备——传感器、陀螺仪、麦克风等等——挨个分配唯一地址。流程很短,但通信密度极高。为什么会在这个时候产生电磁干扰?咱们把流程拆开看看就清楚了。

DAA流程里藏着哪些“雷区”

I3C的DAA大致分三步:

  1. 主设备发广播命令——先来一句“所有设备注意,准备报UID”。
  2. 从设备逐个发送UID——每个从设备把自己48位或128位的唯一标识码拍上来。
  3. 主设备确认并分配地址——收到UID后,主设备回一个ACK,再给个新地址。

嗯,看起来挺清晰。但你想想看,这里面至少有三个地方容易出问题:

核心矛盾:DAA阶段所有数据都采用推挽模式(push-pull)传输,速率高、边沿陡、电流瞬间变化大——EMI的三大“温床”全占了。

原因一:UID传输带来高频跳变

每个从设备必须完整暴露出自己的UID。48位就是一个48比特的随机序列,128位更不用说了。一串连续的高低电平变化,在时域上看就是一串陡峭的脉冲。这些脉冲的频谱非常丰富,尤其是当UID中出现“1010...”这种交替模式时,基波和谐波能量会集中到某个频点,正好怼上接收机带宽。

我在项目中遇到过一块带有6个传感器的模组,DAA阶段辐射超标点恰好是UID中重复出现的“0b110011”模式对应的三次谐波。当时我们试着在从设备端稍微展缓一下发送边沿,就压下去快3dB。

个人建议:先拿近场探头扫一下UID传输那一小段的频谱,锁定是哪个比特模式在“捣乱”。很多时候不是整个DAA都有问题,而是某几个跳变间隔。

原因二:多个从设备同时响应造成电流尖峰

DAA的第二阶段,所有从设备会同时监听广播命令,然后逐次发送UID。但麻烦在于:主设备发出“准备发UID”的命令后,多个从设备可能同时开始驱动总线。虽然I3C有冲突检测机制,但这个“同时驱动”的过程本身就等于在总线上施加了一个大电流脉冲。

你想想看,总线上挂着5个从设备,每个设备的IO口驱动能力大致相同。一旦同时拉低或释放,瞬间电流能冲到几十毫安甚至上百毫安,回流路径上的寄生电感立刻产生压降和辐射。

阶段 通信模式 电流变化幅度 EMI风险等级
广播命令 开漏(SDR) 中等 中
UID传输 推挽(HDR) 大 高
地址冲突仲裁 推挽+开漏混合 极大(电流竞赛) 极高
分配确认 开漏(SDR) 小 低

原因三:地址冲突仲裁阶段的“电流竞赛”

I3C的冲突检测是靠“线与”机制:多个从设备同时驱动低电平,谁先释放谁就退出。这个过程中,总线上可能同时有多个设备在拉低,而另一个设备在释放。释放瞬间,总线电压从低跳高,产生一个极陡的上升沿。上冲幅度常常超过VDD,形成振铃。

我记得有一次帮客户分析一款机械臂的I3C接口,DAA阶段总是出现间歇性辐射超标。用示波器抓冲突时刻的SCL和SDA波形,发现电压过冲高达3.8V(VDD才1.8V)。这种过冲就是一根完美的“天线”,高频能量直接辐射出去。

注意:地址冲突仲裁阶段不仅会产生EMI,还会引起地址分配失败。如果你发现某个设备始终分配不到地址,先别急着怀疑协议层,看看是不是总线反射和过冲导致逻辑误判。

一张图看懂DAA的EMI“爆发点”

下面这张流程图把DAA过程中主要的EMI风险区域标注了出来。每个节点对应的信号边沿或电流变化,都是我们做EMC整改时需要重点关注的。

I3C动态地址分配EMI风险流程图 DAA流程中各阶段EMI风险 广播命令 从设备准备UID UID推挽传输 高频跳变 · 强辐射 地址冲突仲裁 电流尖峰 · 过冲 分配确认(ACK) DAA完成 说明: 红色/橙色节点为EMI高风险区域, 需重点做滤波、展频或边沿整型。 绿色/紫色节点风险相对较低。

从根上想——为什么偏偏是DAA敏感?

你可能会问:正常工作状态下I3C也一直在传输数据啊,为什么DAA特别容易出问题?有两层原因:

  • 数据不可预测:正常通信时,数据内容可以由软件做相位对齐或加padding,但UID是硬件固定的,我们没法改。那些“坏”的比特模式没法避免。
  • 总线竞争叠加:DAA是整个总线所有从设备第一次集体登场,而且是在没有地址区分的情况下同时争夺总线控制权。这种“混战”在其他工作模式下不会出现。

一个小经验:如果你在设计阶段就知道主板上挂的从设备UID,可以先用仿真工具跑一下DAA过程的频谱。有些厂商会提供UID的典型模式,提前扫一遍能省去后面不少整改时间。

避坑指南

最后给几个我踩过的坑:

  • 曾经我以为DAA只跑一次,辐射大点也没关系,结果认证实验室测的就是那几十毫秒的峰值。现在我做方案时,会专门给DAA阶段留单独的时钟展频配置。
  • 曾经我在从设备端加了很大的串联电阻想抑制边沿,结果UID传输时信号幅度不够,导致地址分配出错。后来我改成在靠近连接器位置加RC低通,效果不错。
  • 曾经我忽略了一件事:DAA时总线上的上拉电阻必须用较小阻值(比如1kΩ),否则推挽模式下上拉与驱动器的竞争会产生持续振荡。改小之后过冲和辐射都降了。

嗯,说到底,动态地址分配就是I3C系统里第一个“硬仗”。搞透它的EMI机理,后面整板整改会轻松很多。