第三章:反射与阻抗匹配
讲到信号完整性,反射是绕不开的话题。很多PHY寄存器异常,比如链路频繁断开、误码率飙升,根源其实就是反射。我入行没多久就吃过这个亏,当时板子调不通,查了半天发现是走线阻抗没控好,反射直接把信号弄“糊”了。今天咱们就彻底把反射这件事搞清楚,顺便把阻抗匹配的方法落地到调试里。
3.1 反射是怎么产生的?
信号在传输线上高速奔跑,遇到阻抗变化的地方就会“弹回来”。这个现象物理上也叫回波。你可以想象一下,一个球在管道里滚动,管道突然变粗或变细,球就会反弹。电信号也一样。
反射的严重程度由反射系数决定:
Γ = (Z_load - Z_0) / (Z_load + Z_0)
- Γ 为反射系数,范围 -1 到 +1
- Z_load 是负载或跳变点的阻抗
- Z_0 是传输线特性阻抗
当 Γ = 0 时,没有反射,能量完全吸收,这是理想情况。Γ 为正值表示同相反射(信号叠加变高),负值表示反相反射(信号被抵消变低)。
3.2 什么时候需要关注反射?
不是所有走线都需要做阻抗匹配。关键在于信号的上升时间 vs 传输线长度。我们一般用“临界长度”来判断:
L_critical ≈ t_r × v_p / 6
其中 t_r 是信号上升时间(10%~90%),v_p 是传输线上的传播速度(约 0.6c ~ 0.7c)。
当走线长度超过临界长度的1/6时,就必须按传输线处理,否则反射会引起过冲、振铃、台阶,直接导致PHY时钟/数据采样错位。
| 信号标准 | 典型上升时间 | 临界长度(FR4) | 是否需要匹配 |
|---|---|---|---|
| RGMII (125MHz) | ~0.6 ns | ~1.5 英寸(~3.8cm) | 通常需要 |
| DDR3/DDR4 | ~0.3 ns | ~0.75 英寸(~1.9cm) | 必须匹配 |
| I²C (400kHz) | ~几十ns | 很长,一般不考虑 | 不需要 |
举个例子,你调试一块PHY板子,MDIO时钟才几MHz,上升时间好几ns,走线再长也不会出反射问题。但RGMII时钟是125MHz,上升沿就那零点几纳秒,超过一英寸就得认真对待了。
3.3 阻抗匹配的几种常用招数
匹配的核心只有一个:让信号的瞬时阻抗处处相等。常见的做法有这些:
- 串联匹配——在信号源端串一个小电阻(典型22Ω ~ 33Ω),吸收反射回来的能量。适合点对点传输。
- 并联匹配——在接收端对地接一个电阻(阻值等于特性阻抗),把多余能量泄放到地。缺点是直流功耗大。
- AC匹配——并联匹配串一个小电容,避免直流功耗,但会引入低频成分衰减。
- Thevenin匹配——用两个电阻分压,同时匹配共模与差模。常用于差分信号。
- 差分匹配——在差分线对之间加电阻(典型100Ω),匹配差分阻抗。
我个人最常用的是串联匹配,简单有效,功耗又低。不过要注意,电阻必须放在靠近源端的位置,而且走线要尽量短,别让它本身又变成一个新的阻抗点。
3.4 反射与PHY寄存器异常的直接关联
反射信号叠加到原信号上,会造成以下几种典型的眼图问题:
- 过冲(Overshoot)——超过接收端耐压,长期会损伤PHY内部晶体管,寄存器出现不可恢复的硬错误。
- 振铃(Ringing)——信号在逻辑电平附近来回振荡,导致采样时出现毛刺,CRC或FCS错误计数增加。
- 台阶(Step)——信号到达后先跳到一个中间电平,再缓慢上升到满幅。这会让时钟采样误判数据位置,引起链路同步失败。
调试时,你可以直接读PHY的自协商状态寄存器(比如BCM50610的0x01寄存器),如果经常在“Link Up”与“Link Down”之间跳变,很可能就是反射造成的。另一个热门的寄存器是误码计数寄存器,比如“Symbol Error Count”,反射引起的误码通常是突发性的,不是随机单比特。
| PHY寄存器 | 异常特征 | 反射嫌疑度 |
|---|---|---|
| 链路状态(0x01) | 反复跳变、间歇丢失 | ⭐⭐⭐ |
| 误码计数 | 突发骤增,且随温度/电压变化 | ⭐⭐⭐⭐ |
| 信号质量指示(SQI) | 值偏低且抖动大 | ⭐⭐⭐ |
反射导致寄存器读数“忽好忽坏”,其实就是信号质量游走在合格线边缘。你微调一下匹配电阻,可能就稳定了。
3.5 调试反射问题的实操流程
你拿到一块板子,PHY寄存器报错,怀疑反射。怎么办?我的习惯是这样:
- 读寄存器的“快照”——先读链路状态、误码计数、SQI,记录异常发生的频率和条件。
- 观察波形——拿示波器测PHY与MAC之间的关键信号(如TX_CLK, TXD, RX_CLK, RXD),看有没有振铃或台阶。探头要用地弹簧,别用接地夹子。
- 计算反射系数——如果你能测到信号线上的阻抗(用TDR更准),直接算Γ。看不到TDR的话,眼图开度也能反映问题。
- 尝试匹配——根据走线模型,先加串联电阻(22Ω起步),看寄存器是否稳定。记得每次改完焊接或换电阻后,重新上电读寄存器。
- 验证全温——反射导致的寄存器异常,在高温下更容易暴露。用热风枪局部加热,看寄存器读数是否变差。如果变差,大概率反射匹配还没做到位。
上面这张图你大概能看明白:信号从源端出发,只要阻抗不匹配,反射就来了。反射直接破坏眼图,PHY寄存器跟着异常。我们做匹配,本质上就是在“断点”处把阻抗补上,让反射消失。然后回去看寄存器,稳定了,问题就解决了。
3.6 匹配阻值的估算与微调
理论计算是一回事,实际电路板上的阻抗会因为PCB工艺偏差、温湿度变化而漂移。所以我一般先估算再验证:
- 串阻值 = Z_0 - 源端输出阻抗(驱动器的Ro),典型取22Ω ~ 33Ω
- 并阻值 = Z_0(直接对地),但需要确认驱动器能否提供足够电流
- 差分支路 = 2×Z_0(单端),实际常用100Ω跨接在差分对之间
调完之后,用示波器看过冲幅度。过冲最好控制在信号摆幅的10%以内。如果调到+15%以内,而且寄存器不报错了,也可以接受。没必要追求完美,但一定要留余量。
好了,这部分内容就讲到这里。反射和阻抗匹配是PHY调试的“地基活儿”,地基不牢,寄存器读数永远飘忽不定。你之后遇到板子偶尔断链、误码忽高忽低,先查反射,别急着换芯片。