1. USB2.0差分阻抗为什么偏偏是90Ω
很多人画USB2.0的时候,第一反应是“随便连两根线过去就行了,反正全速也就480Mbps”。这个想法在早期低速设备上确实能蒙混过关,但只要板子上跑了USB2.0高速模式,差分阻抗没控住,眼图一塌糊涂,设备枚举失败、传输丢包、偶尔识别偶尔不识别,这些问题就会像幽灵一样缠着你。
先把最核心的问题说清楚:USB2.0的差分阻抗标准值是90Ω±15%,这个数字不是随便定的。它来自USB-IF规范对高速差分信号线的要求,目的是让收发两端在传输线上实现阻抗匹配,把反射降到最低。单端来看,每根线对地的阻抗大约是45Ω,两根线之间的差分阻抗就是90Ω。这个关系可以用一个简化公式理解:
Zdiff ≈ 2 × Z0 × (1 - k)
其中Z0是单端特征阻抗,k是两根线之间的耦合系数。当两根线靠得越近,耦合越强,k越大,差分阻抗就越低。所以差分对的间距和线宽是两个互相拉扯的参数,不能单独调一个。
那为什么不是50Ω或者100Ω?因为USB2.0的驱动器输出阻抗和接收器输入阻抗都是围绕90Ω设计的。你板子上如果做成100Ω,虽然只差了10%,但在480Mbps的速率下,反射系数已经足够让眼图闭合。我实测过一块差分阻抗做到105Ω的板子,低速设备能认,高速U盘插上去十次有三次枚举失败,换成90Ω的板子之后一次通过。
还有一个容易被忽略的点:USB2.0的差分阻抗要求是针对高速模式的。低速(1.5Mbps)和全速(12Mbps)对阻抗没那么敏感,但你不能只按低速设计,因为同一个接口插上高速设备就会切到高速模式。所以只要你的板子上有USB2.0接口,就按90Ω来控,别心存侥幸。
在Altium Designer里做阻抗控制,核心思路是:先确定叠层结构,再根据叠层算出线宽和间距,最后在PCB里用规则约束住。下面我按实际项目流程一步步拆开讲。
2. 四层板叠层设计:阻抗控制的地基
2.1 为什么选四层板而不是两层板
两层板能不能做90Ω差分?理论上可以,但实际很难。两层板没有完整的地平面,差分线对地的参考面不稳定,阻抗会随着走线位置变化而波动。而且两层板要想做到90Ω,线宽和间距的组合会非常极端,要么线太细工厂做不出来,要么间距太小导致耦合过强。
四层板的标准叠层是:顶层信号层 → 内层地平面 → 内层电源平面 → 底层信号层。这个结构的好处是顶层和底层的信号线都有一个完整的地平面作为参考,阻抗可控性大幅提升。内层地平面和电源平面之间的距离可以做得很薄,形成良好的平面电容,对高速信号的回流也有帮助。
我一般推荐的叠层顺序是:
| 层序 | 层名 | 用途 | 铜厚 |
|---|---|---|---|
| L1 | Top | 信号层,走USB差分对 | 1oz |
| L2 | GND | 完整地平面 | 1oz |
| L3 | PWR | 电源平面 | 1oz |
| L4 | Bottom | 信号层 | 1oz |
介质厚度方面,L1到L2的厚度是关键。这个厚度直接决定了差分线对地平面的距离,也就是决定了单端阻抗的基础值。常见的四层板板材是FR-4,介电常数Er大约在4.2到4.6之间(1GHz频率下)。我通常按Er=4.3来算,留一点余量。
2.2 叠层参数怎么定:从板厂能力反推
这里有一个实操中非常重要的经验:不要自己闭门造车算叠层,先问板厂的工艺能力。不同板厂的半固化片(PP)型号和厚度不一样,你算出来的线宽到了板厂那里可能根本做不出来。
我一般会直接找板厂要他们的四层板标准叠层图,上面会标明每层之间的介质厚度和对应的Er值。拿到之后,把L1到L2的介质厚度记下来,比如常见的0.2mm、0.15mm、0.1mm。这个厚度越薄,差分线可以做得越细,对高密度布线越有利,但成本也会略高。
假设板厂给的L1到L2介质厚度是0.2mm,Er=4.3,铜厚1oz(0.035mm)。接下来就要用阻抗计算工具来反推线宽和间距。Altium Designer自带的Layer Stack Manager里有一个阻抗计算器,但说实话,它的精度一般,我更喜欢用Saturn PCB Toolkit或者板厂提供的计算表格。
2.3 用Saturn PCB Toolkit算差分线宽和间距
打开Saturn PCB Toolkit,选“Differential Microstrip”计算器。输入以下参数:
- 介质厚度H:0.2mm
- 介电常数Er:4.3
- 铜厚T:0.035mm
- 目标差分阻抗:90Ω
然后调整线宽W和间距S。我试过几组组合:
| 线宽W (mm) | 间距S (mm) | 计算差分阻抗 (Ω) |
|---|---|---|
| 0.20 | 0.20 | 92.3 |
| 0.22 | 0.20 | 89.7 |
| 0.25 | 0.25 | 88.1 |
| 0.18 | 0.15 | 94.6 |
从表里可以看到,线宽0.22mm、间距0.20mm的组合算出来是89.7Ω,非常接近90Ω。这个组合的线宽和间距都在常规工艺能力范围内(最小线宽/间距0.1mm),板厂做起来没有压力。
但这里有一个坑:计算器算出来的是理论值,实际板厂蚀刻之后线宽会有偏差。蚀刻因子通常会导致线宽比设计值小0.02mm左右。所以我在设计时会把线宽稍微放大一点,比如设计0.24mm,蚀刻后大约0.22mm,阻抗会更接近90Ω。这个补偿量需要根据板厂的蚀刻能力来定,第一次合作的时候可以先按理论值做,回来测一下TDR,再调整。
3. Altium Designer里的差分对设置全流程
3.1 原理图阶段就要定义差分对
很多人是在PCB阶段才开始设置差分对,其实在原理图阶段就可以把差分对定义好,这样导入PCB之后网络类会自动带上差分属性,省去很多手动操作。
具体做法是:在原理图里,把USB的D+和D-网络命名成带差分标识的格式,比如“USB_DP”和“USB_DM”。然后在Altium Designer的菜单里找到“Place → Directives → Differential Pair”,放到这两根线上。或者更简单的方式是直接在PCB里通过网络名来识别。
我习惯用网络名后缀来标识:D+叫“USB1_DP”,D-叫“USB1_DM”。然后在PCB界面的“Design → Classes”里,右键添加一个Differential Pair Class,把这两个网络加进去。Altium Designer会自动根据“_P”和“_N”或者“_DP”和“_DM”的命名规则来配对。
注意:差分对的命名规则在Altium Designer的“Project Options → Class Generation”里可以配置。默认是“_P”和“_N”,如果你用的是“_DP”和“_DM”,需要在这里改一下,否则软件识别不到。
3.2 PCB规则里的差分阻抗约束
这是整个流程里最关键的一步。打开“Design → Rules”,找到“Differential Pairs Routing”这一项。新建一个规则,命名为“USB2.0_90ohm”,然后在“Where The First Object Matches”里选择“Differential Pair Class”,指定到你刚才建的USB差分对类。
接下来设置参数:
- Min Width / Max Width / Preferred Width:填0.22mm(根据前面算出来的值)
- Min Gap / Max Gap / Preferred Gap:填0.20mm
- Target Impedance:填90Ω
这里有一个细节:Altium Designer的“Target Impedance”只是一个参考值,它不会自动帮你调整线宽和间距去匹配阻抗。真正的阻抗控制还是要靠你前面算好的线宽和间距。这个Target Impedance更多是给后续的阻抗分析工具用的。
设置完之后,在PCB里走差分线的时候,按“P → I”启动交互式差分对布线,软件会自动按照规则里的线宽和间距来走。如果你发现走出来的线宽不对,检查一下规则优先级,确保USB差分对的规则优先级高于全局默认规则。
3.3 差分对布线时的实时阻抗显示
Altium Designer有一个很实用的功能:在差分对布线的时候,按“Shift+W”可以调出线宽和间距的快捷菜单,但更直观的是打开“PCB Panel → Differential Pairs”面板,里面会实时显示当前差分对的线宽、间距和计算出来的阻抗。
不过这个实时阻抗是基于Layer Stack Manager里的叠层参数算的,所以前提是你在Layer Stack Manager里把叠层参数填对了。具体位置在“Design → Layer Stack Manager → Impedance”选项卡里,把每层的介质厚度和Er值填进去,软件就能算出阻抗。
我实测下来,Altium Designer自带的阻抗计算和Saturn PCB Toolkit的结果偏差在3%到5%左右。所以我的做法是:用Saturn PCB Toolkit算出一个基准值,然后在Altium Designer里微调线宽,让软件显示的阻抗落在90Ω±5%范围内。最终以板厂打样回来实测的TDR数据为准。
4. 差分对走线的实操细节与避坑
4.1 等长比阻抗更重要吗
这个问题我被问过很多次。答案是:两者都重要,但优先级不同。阻抗不匹配会导致反射,等长不匹配会导致差分信号变成共模信号,两者都会让眼图恶化。
对于USB2.0高速模式,差分对的长度偏差一般要求控制在5mil(0.127mm)以内。这个要求其实挺严格的,因为USB连接器到芯片之间的走线往往要绕来绕去。我的做法是:先保证阻抗连续,再在蛇形绕线的时候保证等长。
蛇形绕线有一个坑:绕线的幅度和间距会影响阻抗。如果你把差分对绕成很密的蛇形,线间的耦合会变化,阻抗会偏离90Ω。所以绕线的时候尽量用大弧度,蛇形间距至少是线宽的3倍以上。我一般用“Accordion”模式,设置绕线幅度为线宽的5倍,间距为线宽的4倍。
4.2 参考平面的完整性怎么保证
差分线的参考平面必须是完整的,不能有跨分割的情况。什么叫跨分割?就是差分线下面的地平面被一条槽或者一个电源区域切断了。一旦跨分割,回流路径被迫绕远,阻抗会突变,信号质量直接崩掉。
在四层板里,L1的参考平面是L2(地平面),L4的参考平面是L3(电源平面)。L3是电源平面,对于USB差分线来说,电源平面也可以作为参考,但前提是这个电源平面是完整的,而且和地平面之间有良好的去耦。
我的习惯是:USB差分线尽量走在L1,参考L2地平面。如果L1实在走不开,走到L4的话,参考L3电源平面,但要在USB连接器附近放足够的去耦电容,保证电源平面在高频下对地是低阻抗的。
还有一个细节:差分线下方不要走其他信号线,尤其是时钟线或者开关电源的走线。这些线会在参考平面上产生噪声,耦合到差分对上。如果实在避不开,至少保证垂直交叉,不要平行走线。
4.3 连接器和ESD器件的处理
USB连接器到芯片之间通常会放一个ESD保护器件。这个器件的选型很关键:寄生电容要小。USB2.0高速模式对寄生电容很敏感,一般要求ESD器件的寄生电容小于1pF。我用过一些便宜的ESD二极管,寄生电容3pF以上,插上U盘直接不识别。
ESD器件的摆放位置也有讲究:尽量靠近连接器,这样ESD电流在进入板子之前就被导走了。但也不能太近,否则连接器的焊盘和ESD器件的焊盘之间的走线会形成 stub,影响阻抗。我一般放在连接器后面5mm到10mm的位置,走线尽量短而直。
连接器的引脚定义也要注意:USB2.0的D+和D-在连接器上是相邻的两个引脚,但有些连接器的引脚间距不均匀,会导致差分对的间距在连接器附近突变。这种情况下,我通常会在连接器焊盘和差分线之间加一段渐变线,让间距慢慢过渡,而不是突然变化。
5. 打样回来怎么验证阻抗是否达标
5.1 TDR测试:最直接的验证手段
板子打样回来之后,最靠谱的验证方法是TDR(时域反射)测试。TDR的原理是发射一个快速上升沿的信号,通过测量反射回来的波形来计算阻抗。如果阻抗是90Ω,反射系数为零,波形是一条平线;如果阻抗偏高,波形会向上凸起;偏低则向下凹陷。
测试的时候需要注意几点:
- 探头校准:TDR探头本身有阻抗,测试前必须用标准件校准,否则测出来的值偏差很大。
- 测试点选择:最好在差分对的末端测试,但USB连接器通常不方便直接测。我一般会在板子上预留测试焊盘,或者在芯片端测试。
- 参考平面:测试时探头的地线要尽量短,最好用同轴探头直接接触测试点和旁边的地焊盘。
我实测过一块板子,设计阻抗90Ω,TDR测出来平均87Ω,偏差3.3%,在可接受范围内。另一块板子设计时线宽算错了,测出来102Ω,高速设备直接不认。
5.2 眼图测试:看整体信号质量
TDR测的是阻抗,眼图测的是整体信号质量。眼图测试需要一台示波器和一个USB2.0信号发生器。把信号发生器接到板子的USB接口上,示波器探头接在芯片端的差分对上,观察眼图的张开程度。
USB2.0高速模式的眼图模板要求:眼高至少150mV,眼宽至少0.3UI(单位间隔)。如果眼图闭合,说明信号质量不达标,可能是阻抗不匹配、损耗过大或者串扰太严重。
我一般会先测TDR,确认阻抗没问题,再测眼图。如果TDR没问题但眼图不好,那就要查串扰或者电源噪声。有一次我遇到眼图闭合,查了半天发现是USB差分线旁边走了一根开关电源的SW节点线,耦合过来的噪声把眼图搞砸了。把那根线移走之后,眼图立刻张开。
5.3 常见问题排查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 高速设备不识别 | 差分阻抗偏差过大 | TDR测试,检查线宽和间距 |
| 偶尔识别偶尔不识别 | 阻抗不连续或串扰 | 检查参考平面完整性和周边走线 |
| 眼图闭合 | 损耗过大或串扰 | 测眼图,检查走线长度和周边信号 |
| 低速设备正常,高速失败 | 高速模式阻抗问题 | 重点检查差分对阻抗和ESD器件 |
| TDR波形有尖峰 | 过孔或连接器阻抗突变 | 检查过孔设计和连接器焊盘 |
6. 几个容易被忽略的实操心得
6.1 过孔对差分阻抗的影响
差分对换层的时候需要打过孔,过孔会引入寄生电容和电感,导致阻抗突变。一个普通的过孔寄生电容大约0.5pF,寄生电感大约1nH。在480Mbps的速率下,这个突变足以让眼图恶化。
我的做法是:差分对尽量不换层。如果必须换层,在过孔旁边加接地过孔,形成回流路径。接地过孔要尽量靠近信号过孔,距离控制在1mm以内。另外,过孔的反焊盘(Anti-pad)尺寸也要注意,反焊盘太大会导致阻抗偏高,太小会导致阻抗偏低。一般反焊盘直径比过孔焊盘大0.2mm左右比较合适。
6.2 阻焊层对阻抗的影响
阻焊层(Solder Mask)的介电常数和空气不一样,覆盖在差分线上会改变阻抗。虽然影响不大,但在高精度要求下需要考虑。Altium Designer的Layer Stack Manager里可以设置阻焊层的厚度和Er值,一般阻焊层厚度0.01mm,Er=3.3。加上阻焊层之后,阻抗会略微下降,大约1Ω到2Ω。所以如果你算出来是90Ω,加上阻焊层之后可能变成88Ω,这时候可以把线宽稍微调细一点补偿。
6.3 板厂沟通的注意事项
和板厂沟通阻抗控制的时候,不要只说“我要90Ω差分”,要把叠层结构、线宽、间距、参考层都写清楚。最好附上一张叠层图,标明每层的介质厚度和Er值。板厂会根据他们的工艺能力调整,如果做不到,他们会反馈给你。
我遇到过板厂擅自调整叠层厚度的情况,导致阻抗偏了10Ω。后来我养成了一个习惯:在PCB文件里用文字标注阻抗要求,在Layer Stack Manager里把参数填好,生成Gerber的时候附上一份阻抗说明文档。这样板厂就不会搞错了。
6.4 成本与性能的平衡
四层板做90Ω差分阻抗,成本比两层板高不少,但比六层板低。对于大多数USB2.0应用来说,四层板是性价比最高的选择。如果你的板子上还有DDR内存或者千兆以太网,那可能要考虑六层板了。但纯粹为了USB2.0做六层板,有点杀鸡用牛刀。
还有一个省钱的技巧:把USB差分对走在顶层,底层走低速信号。这样只需要控制顶层的阻抗,底层不用管。叠层方面,L1到L2的介质厚度可以选标准值,不需要特殊定制,成本更低。
7. 从设计到量产的最后一道关
7.1 小批量试产时的阻抗抽检
设计验证通过之后,小批量试产的时候一定要抽检阻抗。因为板厂的工艺参数会有波动,不同批次的阻抗可能不一样。我一般会要求板厂提供阻抗测试报告,或者自己拿TDR抽测几块板子。
抽检的时候要注意:同一批板子里,不同位置的差分对阻抗可能有差异。比如板子边缘的差分对和板子中心的差分对,由于蚀刻均匀性的问题,阻抗可能差2Ω到3Ω。所以抽检要覆盖不同位置。
7.2 设计文件的归档与复用
USB2.0差分阻抗控制这套流程,一旦跑通之后,可以做成模板复用。我一般会把叠层参数、差分对规则、走线模板都保存下来,下一个项目直接调用。Altium Designer支持把规则导出成文件,在“Design → Rules → Export Rules”里可以导出为.RUL文件,新项目导入即可。
叠层方面,可以把Layer Stack Manager的配置保存成模板,在新建PCB的时候直接套用。这样就不用每次都重新算线宽和间距了。
7.3 一个真实的翻车案例
最后分享一个我早期踩过的坑。有一次做一个USB2.0的板子,四层板,差分对线宽和间距都算好了,规则也设了,走线也等长了。打样回来一测,高速设备死活不识别。查了半天,发现是USB连接器的封装画错了,D+和D-的引脚顺序反了。原理图上D+接的是连接器的D-引脚,D-接的是D+引脚。虽然差分对本身阻抗没问题,但极性反了,高速模式下直接失败。
这个坑让我养成了一个习惯:每次画完连接器封装,都要用万用表蜂鸣档对着实物测一遍引脚通断。原理图检查再仔细,封装画错了一样翻车。后来我在Altium Designer里建了一个连接器封装的检查清单,每次调用之前都过一遍,再也没犯过这个错误。
USB2.0差分阻抗控制这件事,说难不难,说简单也不简单。核心就是三点:叠层算对、规则设对、走线走对。但每一个环节都有细节,细节没处理好,板子就是不稳定。希望这篇内容能帮你少走几个弯路,一次把板子跑通。