2. 车载网络基础

做车载以太网调试,第一件事就是搞清楚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布局约束。

我画了张图,帮你理清它们的关系:

MII接口家族关系图 MAC控制器 MII (4位数据) RMII (2位数据) RGMII (4位DDR) SGMII (串行) 时钟频率:MII=25MHz | RMII=50MHz | RGMII=125MHz | SGMII=625MHz(串行) 引脚数:16~18 引脚数:9~10 引脚数:12~14 引脚数:4~6 应用场景:MII→百兆 | RMII→百兆(省引脚) | RGMII→千兆 | SGMII→千兆(高速串行)

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信号质量。