链路协商基本原理
各位好,今天我们来聊聊车载PHY的链路协商。这东西说白了,就是两个PHY芯片在握手,决定用什么样的“语言”和“语速”来交流。我刚开始接触以太网时,觉得自协商很玄乎。后来在车厂调试一个项目,发现两台设备的百兆口怎么都连不上,折腾了半天,结果就是协商没完成。嗯,从那以后我就把这部分原理摸透了。
什么是自协商(Auto-Negotiation)
自协商是IEEE 802.3标准里定义的一套机制。它让链路两端的PHY自动选择最合适的速率和双工模式,还能判断直连线还是交叉线。车载以太网目前主流是100BASE-T1或1000BASE-T1,但原理还是类似的。
我个人习惯把自协商理解成一个“讨价还价”的过程:
- 两端PHY先互相打招呼(发送快速连接脉冲,FLP Burst)
- 然后各自报出自己能支持的速率和双工模式
- 最后取双方都支持的“最大公约数”
你想想看,要是没有这个机制,工程师得手动去配置每对PHY的速率,那车间的线束要是接错了,排查起来多费劲。
核心要点:自协商是一个自动的、在物理层完成的链路参数匹配过程。它发生在PHY初始化阶段,不需要上层协议参与。
速度与双工协商流程
协商流程其实不复杂。我记个简化版给你们看:
- 链路建立:两端PHY上电或复位后,开始发送FLP Burst。
- 能力交换:每个PHY把自己的能力编码成一串二进制位,通过FLP Burst发出去。
- 优先级裁决:收到对端的能力后,按照“千兆 > 百兆 > 十兆”这个优先级,找出双方都支持的最高速率。
- 双工模式选择:在选定的速率下,再按照“全双工 > 半双工”的优先级,确定双工模式。
- 确认完成:双方各自确认链路建好,可以正常传数据了。
我记得有一次调试,发现一边是百兆全双工,另一边是千兆半双工,结果协商出来什么?对,失败!因为千兆根本不支持半双工。所以说,优先级表一定要记准。
| 优先级 | 速率 | 双工模式 | 备注 |
|---|---|---|---|
| 1(最高) | 1000M | 全双工 | 车载以太网常见 |
| 2 | 1000M | 半双工 | 几乎不用 |
| 3 | 100M | 全双工 | 传统车载常用 |
| 4 | 100M | 半双工 | 老设备偶尔见 |
| 5(最低) | 10M | 全/半双工 | 很少用于车载 |
小经验:调试时抓一下FLP Burst的波形,能直接看到双方报的能力值。我曾经用示波器截到过一个不对的配置,发现是PHY寄存器被写错,导致它只报了10M的能力。
MDI/MDI-X自动交叉
这个功能在传统的百兆/千兆以太网里很重要。MDI是介质相关接口的直连模式,MDI-X是交叉模式。老规矩:同类设备互联要用交叉线,不同类设备用直连线。但自协商里的Auto MDI/MDI-X能自动完成这个交换。
简单说,就是PHY在协商时,会尝试检测对端是MDI还是MDI-X,然后自动切换自己的引脚极性。我之前在产线上遇到一种情况:明明线序做错了,但有些网口照样能通。后来查了才知道,是因为两端的PHY都支持自动交叉,它们自己把引脚换过来了。
核心流程图
下面是整个协商流程的SVG图,可以帮你快速理清逻辑:
踩坑提醒:我曾经遇到一个案例,PHY的MDI/MDI-X引脚没拉对,导致自协商一直“假成功”。链路指示灯亮了,但实际数据传不过去。所以调试时不要只看指示灯,要拿工具测一下真实的通信状态。
避坑指南:常见问题
- 协商失败:最常见的原因是有一端不支持自协商。比如有些老设备固定死在100M全双工,不参与协商过程。
- 速率不匹配:我见过有人把百兆PHY和千兆PHY强行连在一起,结果协商出来的速率是10M半双工——因为优先级表里它俩的交集最小。
- MDI/MDI-X冲突:两端的PHY都默认是MDI,又没有Auto Cross功能,这时直连线就没法用,必须换成交叉线。
说实话,这些坑我都踩过。后来我养成了一个习惯:在电路设计阶段,就把PHY的配置寄存器写好,用默认的自协商模式,并开启Auto MDI/MDI-X。这样能省掉很多后期debug的麻烦。
总结:自协商的核心是“交换能力→对比优先级→自动匹配”。MDI/MDI-X则是解决线缆极性问题的。两者配合,能让PHY链路在未知环境下自动调通。掌握了这些,你在排查车载网络问题时就有的放矢了。