3. 链路训练概念:自动协商与链路训练的区别,链路训练目的

好,咱们进入第3章。说实话,很多人一上来就把「自动协商」和「链路训练」混为一谈。我刚开始接触RGMII时也犯过这个错。两个概念确实有关系,但干的活完全不同。

今天咱们就把这事掰扯清楚。搞明白它们各自管什么,以及链路训练到底要解决什么核心问题。

3.1 自动协商——老把式,管的是「能不能通」

自动协商是什么?说白了,是两个PHY芯片见面之后的第一次握手。它负责回答一个问题:咱俩以什么速度、什么双工模式来通信?

你想想看,一块百兆网卡和一块千兆交换机连在一起,总得有个商量。自动协商就是干这个的。

我个人习惯:把自动协商理解成「商务谈判」——双方先交换名片,确认彼此支持的能力,最后选一个双方都能接受的方案。

具体到RGMII场景,自动协商完成以下几件事:

  • 确定链路速度(10/100/1000 Mbps)
  • 确定双工模式(半双工/全双工)
  • 确定流控能力(是否支持PAUSE帧)
  • 基于 Clause 28 标准,通过MDI/MDIX接口发快速连接脉冲(FLP)

好了,到此为止。自动协商的工作就结束了。它不管信号延时,不管时钟相位,不管数据对齐。它只负责搭起一座桥,至于这座桥具体怎么走——那是别人的事。

注意:自动协商不是必须的。很多时候为了减少握手时间,我们会在两端强制设置成固定速率和双工模式,把自动协商关掉。我在一个千兆以太网项目里就这么干过,确实能节省几百毫秒的启动时间。

3.2 链路训练——精细活,管的是「通得好不好」

好,现在链路物理上是通了。但问题来了——信号在PCB走线上、在连接器上、在电缆上,会有延时。这个延时如果你不处理,接收端采样时就会采到错误的比特。

链路训练就是干这个精细活的。它不关心速率(那个自动协商已经定好了),它只关心每个焊盘、每个比特的延时校准。

对比维度 自动协商 链路训练
目的 建立物理链路,确定速率和双工模式 校准信号延时,保证数据正确采样
工作阶段 链路建立前期 链路建立后、数据传输前
处理对象 速率、双工、流控 时钟相位、数据对齐、延时偏差
触发方式 硬件自动或软件手动触发 通常由MAC或PHY的寄存器控制
执行时间 毫秒级(几百ms) 微秒级到毫秒级
标准支持 IEEE 802.3 Clause 28 RGMII v2.0 / v2.1 或自有协议

看到没有?一个管宏观,一个管微观。我特别喜欢这个类比:自动协商好比两个人确定用中文聊天,链路训练则是调整麦克风的音量、消除回音,让每个字都听得清楚。

3.3 链路训练到底要干什么?三个核心目的

说到这,你应该已经猜到链路训练的目的了。但为了严谨,咱们还是列清楚:

  1. 消除焊盘延时偏差
    每根数据线(D0~D3,还有控制线)的PCB走线长度不可能完全相等。就算你画等长线,过孔、连接器、阻抗突变也会引入微小差异。链路训练就是一组一组地测,把每个焊盘的附加延时找出来。
  2. 锁定时钟与数据的相位关系
    RGMII双沿采样,对时钟边沿要求很严格。如果时钟到达接收端的时刻正好落在数据跳变沿上,那就直接GG。链路训练会微调时钟相位,保证采样点落在数据眼的正中间。
  3. 补偿温度和电压波动
    这是很多人忽略的。设备运行一段时间后,温度升高,或者电源电压轻微波动,走线的延时都会变。链路训练可以周期性地重新校准,让延时补偿一直有效。

核心一句话:链路训练的目的,就是让每个比特在正确的时间被正确的电路采样到。 其他所有动作都是为这个目标服务。

3.4 一张图看懂:自动协商 + 链路训练的协作关系

下面这张SVG图,把刚才讲的两个概念在链路中的作用位置画出来了。你一看就知道谁先谁后、各自管什么。

自动协商与链路训练的协作关系 RGMII链路建立:自动协商 → 链路训练 MAC PHY 自动协商:确定速率、双工、流控能力 链路训练:校准焊盘延时、时钟相位、补偿波动 RGMII 数据通道 (D[3:0] + Ctrl) 时钟通道 (RXC / TXC) 问题场景 PCB走线不等长 | 温漂 | 连接器引入偏差 链路训练输出:各焊盘精确延时值 + 时钟相位偏移量

3.5 避坑指南:我踩过的坑

我曾经在一个FPGA驱动RGMII PHY的项目中,把自动协商的完成当成链路可用的标志。结果呢?PHY显示链路Up了,但MAC发出去的包收不到正确响应。

查了三天。最后发现是链路上的数据位D2比D0多走了半英寸,导致采样出错。那时候FPGA内部没有做链路训练,问题就是解决不了。

这个坑的关键在于:很多人想当然地以为RGMII是同步接口,时钟和数据天然对齐。实际上走线延时、器件延时都会破坏这个对齐。链路训练就是专门来弥补这个缺陷的。

我建议:在设计阶段就把链路训练的寄存器接口、状态读取逻辑、校准结果存储都预先规划好。不要等到板子调不通了再把这些东西加进去,那时候排插飞线都来不及。

3.6 本章小结

这一章没有复杂公式,但概念层级非常重要。我习惯用一句话帮自己记忆:

自动协商决定「能不能通」,链路训练保证「通得稳」。

这两个阶段一前一后,缺一不可。自动协商搞定后,链路训练才开始干活——校准每一个比特的延时,消除误差,让RGMII在高速下还能稳定工作。