2、PHY芯片核心原理:从OSI模型到MII接口
做车载以太网调试,第一件事就是搞清楚PHY芯片到底在干什么。很多工程师上来就抓波形、调寄存器,折腾半天发现方向错了——说白了,你连PHY在协议栈里站哪个位置都没搞明白。
这一章,我带你把PHY的核心原理捋一遍。不扯虚的,全是你在调试台上会用到的知识。
2.1 OSI模型与PHY层:物理层的真正职责
先看这张经典的OSI七层模型。咱们车载以太网主要用TCP/IP协议族,但底层物理介质决定了信号能不能传得稳。
核心认知:PHY芯片只负责OSI模型的第一层——物理层。它不关心你传的是CAN报文还是DoIP诊断,它只负责把比特流变成电信号,再从电信号还原成比特流。
我遇到过不少工程师,拿着示波器量PHY输出波形,然后问我“为什么数据不对”。我说你先看看MAC层配没配对吧——他一脸懵。记住:PHY只管物理信号,数据链路层的事归MAC管。
物理层内部又分了几个子层,咱们一个个说。
2.2 PMA/PCS/PMD子层详解:PHY内部的黑盒
PHY芯片内部不是铁板一块。它拆开来看,有三个关键子层:
| 子层 | 全称 | 职责 | 调试关注点 |
|---|---|---|---|
| PCS | Physical Coding Sublayer | 编码/解码、8B/10B或4B/5B转换 | 编码错误计数、链路状态 |
| PMA | Physical Medium Attachment | 串行化/解串行、时钟恢复 | 时钟抖动、信号眼图 |
| PMD | Physical Medium Dependent | 驱动介质、信号电平转换 | 差分电压、共模噪声 |
我习惯把这三个子层比作一个通信链路:PCS是翻译官,把MAC来的并行数据编成串行码流;PMA是收发器,负责把码流变成高速差分信号;PMD是接口适配器,匹配不同的物理介质——双绞线、同轴电缆还是光纤。
实战经验:调试时如果发现链路能建起来但丢包严重,先查PCS层的编码错误寄存器。我曾在某T1项目上,就是因为PCB走线阻抗不匹配导致PCS层持续报错,折腾了两天才定位到。
为什么会这样?因为PCS层做了8B/10B编码——每8位数据变成10位码流,多出来的2位用于直流平衡和时钟同步。如果信号质量差,解码就会出错,PCS层会丢弃错误码组,上层看到的就是丢包。
2.3 MII接口家族:RMII/RGMII/SGMII
PHY和MAC之间怎么通信?靠MII接口。这个家族有好几个成员,选哪个取决于你的带宽需求和PCB布局约束。
我画了张图,帮你理清它们的关系:
2.3.1 MII(Media Independent Interface)
MII是原始标准,4位数据总线,25MHz时钟,支持10/100Mbps。引脚多,现在新车载设计基本不用了。但调试时偶尔会遇到老平台,你得认识它。
2.3.2 RMII(Reduced MII)
RMII把数据线从4位砍到2位,时钟提到50MHz。引脚少了一半,PCB布线轻松很多。我建议车载百兆以太网优先选RMII——省引脚、省空间,对EMC也有好处。
注意:RMII需要50MHz参考时钟,这个时钟必须由MAC或外部晶振提供,两边要同步。我曾经见过一个案子,MAC和PHY各用各的晶振,结果频率偏差导致链路时断时续——这种坑踩一次就够了。
2.3.3 RGMII(Reduced GMII)
千兆以太网的主流选择。4位数据总线,但用DDR(双沿采样)技术——时钟上升沿和下降沿各采一次,等效8位数据,时钟125MHz。
RGMII调试有个关键点:时钟相位对齐。因为DDR采样对时序要求高,MAC和PHY之间通常需要加可调延迟。我习惯在PCB设计时预留RC延迟网络,或者用PHY内部的TX/RX延迟寄存器来调。
调试技巧:RGMII出问题,90%是时序问题。先查时钟抖动,再看数据相对于时钟的建立/保持时间。示波器上看到眼图闭合了,那就调延迟吧。
2.3.4 SGMII(Serial GMII)
SGMII把并行总线变成了串行差分对——一对发送、一对接收,再加一对参考时钟。引脚最少,速率最高,适合高速背板或长距离传输。
SGMII内部用了8B/10B编码,所以实际线速率是1.25Gbps(千兆数据+编码开销)。调试SGMII时,重点看信号完整性——差分摆幅、共模电压、抖动。
我做过一个项目,SGMII链路死活建不起来,最后发现是AC耦合电容放错了位置——电容应该靠近接收端,结果放在了发送端。这种细节,手册上不会特意提醒你。
2.4 接口对比速查表
这张表我建议你存着,调试时翻出来对照:
| 接口 | 数据宽度 | 时钟频率 | 速率 | 引脚数 | 调试难点 |
|---|---|---|---|---|---|
| MII | 4位 | 25MHz | 10/100M | 16~18 | 引脚多,布线麻烦 |
| RMII | 2位 | 50MHz | 10/100M | 9~10 | 时钟同步 |
| RGMII | 4位DDR | 125MHz | 10/100/1000M | 12~14 | 时序对齐、延迟调整 |
| SGMII | 1位串行 | 625MHz | 10/100/1000M | 4~6 | 信号完整性、AC耦合 |
2.5 调试思路小结
搞懂PHY核心原理,调试时你就能快速缩小范围:
- 链路建不起来?先查PMD层——看差分信号有没有、电平对不对。
- 链路能建但丢包?查PCS层——读编码错误计数器。
- 速率协商失败?查MII接口——时钟、数据线、控制信号。
- 千兆上不去?重点查RGMII时序或SGMII信号质量。