4、自动协商的时钟与时序
自动协商能跑通,背后其实是时钟和时序在撑着。你想想看,链路两端要是时钟对不上,哪怕协议栈再完美也是白搭。这一节咱们就聊聊时钟容差、定时器参数,还有100BASE-T和100BASE-TX(哦,这里其实是100BASE-T与1000BASE-T)那些时序差别。
4.1 时钟容差要求
先说说时钟精度。IEEE 802.3里写得明明白白:发送端时钟频率容差必须在±50 ppm以内。100BASE-T和1000BASE-T都适用这个标准。什么叫ppm?百万分之一。50 ppm就是0.005%,换算下来,100 MHz的时钟允许偏差只有5 kHz。
我早年调试一块百兆网卡,发现偶尔丢包。抓波形一看,时钟偏差跑到了75 ppm。嗯,当时用的是廉价的RC振荡器,换了个有源晶振立马就稳了。说白了,时钟精度直接决定链路能不能长期锁定。
| 速率标准 | 标称时钟频率 | 容差要求 | 典型晶振精度 |
|---|---|---|---|
| 100BASE-TX | 125 MHz | ±50 ppm | ±25 ppm 或 ±50 ppm |
| 1000BASE-T | 125 MHz(4对线同时) | ±50 ppm | ±50 ppm(常用) |
注意,接收端PLL的捕获范围通常要比±50 ppm更宽一点,留出余量。但发送端必须严格遵守规范,否则对方PLL可能无法锁定。
4.2 定时器参数:Link Fail、Break Link 等
自动协商过程中,有好几个关键定时器。它们的值如果设错了,轻则协商时间变长,重则直接断链。我习惯把这三个定时器叫作“三剑客”:
- Link Fail 定时器(Break Link 检测)
- Break Link 定时器(即强制断链时序)
- Auto-Negotiation 完整超时
咱们逐个看。
Link Fail 定时器
用来判断物理链路是否失效。在100BASE-T里,一般设置为 750 μs ~ 1000 μs。当接收端连续这么长时间没收到有效信号,就认为链路断开。
我为啥强调这个值?因为在恶劣的EMI环境中,偶尔有短时脉冲干扰。如果定时器设得太短,比如300 μs,正常信号丢了一小段就会误判为链路失效,导致频繁重协商。我个人建议按规范上限设置,留出抗扰余量。
Break Link 定时器
这是手动断开链路的“核按钮”。PHY可以通过发送特定的Break Link信号(通常是连续的低电平或特殊码型)强制对端进入断链状态。Break Link 信号宽度一般要求 ≥ 1500 μs,对端检测到后立即停止协商。
你可能要问:什么时候用这个?比如系统进入低功耗模式,主动切断PHY链路。我在项目中设计过睡眠唤醒方案,就是先发Break Link信号,然后关掉时钟,让设备进入深度睡眠。
Auto-Negotiation 完整超时
整个协商过程不能无限等下去。规范规定:FLP Burst 的发送间隔是 16 ms ± 8 ms,每轮协商最多等待 150 ms 没收到有效FLP就超时。
4.3 100BASE-T 与 1000BASE-T 时序差异
别看都是125 MHz的符号率,100BASE-T和1000BASE-T的时序细节差别很大。我整理了一张对比表,你对照着看会更清楚:
| 维度 | 100BASE-TX | 1000BASE-T |
|---|---|---|
| 信号编码 | MLT-3(三电平) | PAM-5(五电平) |
| 每对线速率 | 125 MBaud | 125 MBaud |
| 同时使用线对数 | 1对(另1对用于接收) | 4对全双工 |
| 时钟恢复方式 | 从单一数据流提取 | 从4对线分别恢复,再同步 |
| Link Fail 检测时长 | 750 μs ~ 1000 μs | 750 μs ~ 1000 μs(基本相同) |
| 自动协商 FLP 编码 | 基础页 + 自定义页 | 基础页 + next page 扩展(更丰富) |
| 时钟抖动容忍 | 典型 0.7 ns RMS | 更严,要求 ≤ 0.35 ns RMS |
你注意到没——1000BASE-T的时钟抖动容忍只有百兆的一半。为什么会这样?因为千兆采用四对线同时传输,每对线之间的相对时延必须严格控制,否则解串器会出现skew。我当年调千兆板子时,遇到过PCB走线不等长导致抖动超标,换了好几版layout才搞定。
知识架构:时钟与时序全景
下面这张SVG图把这一节的核心逻辑串了起来。你顺着时钟容差→定时器→不同速率时序差异这条线看,就比较清晰了:
实战要点:
- 调试自动协商时,先测时钟频率偏差,确认在±50 ppm以内。
- 用示波器抓FLP Burst间隔,看看是否严格在16 ms ± 8 ms范围。
- 遇到千兆链路不稳定,重点量每对线的skew和时钟抖动,往往问题出在PCB走线不等长。