1. 课程导引:一次RGMII通信失败的惨痛教训

做硬件的人,最怕什么?

不是原理图画错了,也不是PCB走线太绕。最怕的是——板子打回来,上电,灯不亮,数据不通。然后你拿着示波器,盯着一堆波形,脑子里一片空白。

嗯,我经历过。而且是RGMII接口,千兆以太网,通信完全失败。

1.1 事情是怎么开始的

那是一个普通的项目交付节点。主控芯片用的是一个国产ARM Cortex-A7,PHY芯片是市场上很常见的RTL8211。照理说,RGMII是很成熟的接口了,参考设计一抓一大把,原理图也没啥特别的地方。

结果板子回来后,在实验室里一测:

  • PHY能Link up,灯也亮了。
  • 但是ping包,100%丢包。
  • 用示波器看TX_CLK和TXD[3:0]的波形,信号质量看着还行。
  • MAC侧反复复位,结果都一样——不通。

我当时第一反应是:是不是PHY初始化没配好?寄存器写错了?于是花了两天时间,把PHY的datasheet翻了个遍,反复核对寄存器配置。然而,问题依旧。

惨痛的教训1: 不要一开始就怀疑软件配置。如果是纯软件问题,接口通常能通但性能差,而不是完全不通。

1.2 为什么RGMII这么容易出问题

RGMII,全称是Reduced Gigabit Media Independent Interface。它是在千兆以太网时代,为了减少引脚数而设计的。把原来的8位数据线砍成了4位,同时用时钟的双沿采样来补偿。

说白了,就是偷了个懒,但代价是时序要求极其苛刻。

来看看RGMII的核心时序约束:

时序参数 最小值 典型值 最大值 说明
Tskew(T) -500 ps 0 ps +500 ps 时钟与数据的相对偏斜
Tsetup 1 ns — — 数据在时钟沿前稳定的时间
Thold 1 ns — — 数据在时钟沿后保持的时间
Tcycle — 8 ns — 125 MHz时钟周期

你想想看,Tskew的容限只有±500ps。而普通FR4板材上,每英寸走线的延迟大约是160ps到180ps。这意味着什么?

只要时钟线和数据线的走线长度差超过3英寸,信号就已经不在有效窗口内了。更何况,PCB上还有过孔、拐角、阻抗不连续,分分钟吃掉你几百ps。

1.3 我是怎么找到根因的

当时我做了三件事,一步步把问题锁死:

  1. 先测MAC侧输出时序——用示波器看TX_CLK和TXD[0]的相位关系。结果发现时钟边沿几乎和数据边沿对齐了。RGMII要求时钟沿在数据有效窗口的中央,而不是边界。这就是问题!
  2. 再看PHY侧的RX时序——反过来看PHY送给MAC的RX_CLK和RXD。发现同样存在相位偏移,而且方向还不一致。MAC侧输出是时钟超前,PHY侧输出是时钟滞后。
  3. 确认延迟是走线造成的——查PCB设计文件,量了实际的走线长度。结果发现:TX_CLK走线比TXD[0]长了不少,而RX_CLK又比RXD短了不少。

你看,问题其实很简单——就是走线长度不一致导致的skew。但难就难在,你一开始不觉得是这么低级的问题。总想着是不是芯片选型不对,是不是电源纹波太大。

我的习惯: 遇到RGMII不通,先不查代码,先拿示波器看时钟和数据的关系。10分钟能判断的问题,别花2天去猜。

1.4 这个案例到底教会了我们什么

这次失败,虽然丢了几周的项目进度,但也让我彻底弄清楚了RGMII的脾气。

让我总结一下核心的教训,共3点:

  • 时序是RGMII的生命线——你不能只关心信号能传多远,更要关心信号到得及不及时。skew哪怕差300ps,在125MHz下就是致命的。
  • 走线等长不是口号,是硬指标——我后来养成了习惯,所有RGMII信号组,在layout guide里必须标注±50mil的等长约束。别再相信“大概差不多”,高频信号不会给你留情面。
  • 先测量,再分析,最后才改设计——遇到问题,第一反应应该是拿示波器去看真实波形,而不是去重读手册。真实世界的信号,往往和理想模型不一样。
核心观点: RGMII的失败,90%可以归结为时序走偏。而时序走偏,90%又是因为PCB走线没做好。所以,这篇课程的所有内容,都是围绕如何发现、测量和修正这些时序偏差展开的。

我曾经在另一个项目里,遇到完全相同的现象。但这次我有经验了——直接在原理图上把PHY的时钟延迟引脚拉出来,用电阻分压配置延迟档位。调了几个电阻值,问题就解决了。前后不到半天。

但如果没有那次惨痛的失败打底,我肯定还是会在示波器前面发呆。

1.5 本章知识框架

我把这次教训背后的知识体系整理成了一张图。你可以先看一下整体结构,后面的章节会一步步拆解每个环节。

RGMII时序调校知识框架——从失败到成功 问题现象:100%丢包 根因分析:时序skew超标 RGMII核心时序参数 Tsetup / Thold / Tskew 测量手段 示波器 / 眼图 / 抖动分析 解决方案 PCB等长 / 延迟配置 预防措施:约束 + 仿真 进阶话题:延迟链调校 / 温度漂移 / 量产一致性 最终:通信成功

这张图里,从顶部的”100%丢包“问题出发,经过”时序skew超标“的根因分析,分支出核心参数理解、测量手段和解决方案三大知识块。最后汇合到预防措施和进阶话题。整个课程就沿着这条线往下走。

说白了,这就是我当初踩坑后,重新梳理出来的RGMII调试方法论。不是从教科书上抄来的,是真金白银的实战经验。

避坑指南: 我曾经见过一个团队,花了整整一个月去排查RGMII问题,换了三版PCB,换了两种PHY芯片,最后发现——只是电阻匹配不对,导致时钟信号幅度不足。所以,永远先确认物理层的信号完整性,再往上层去猜。