3、硬件架构设计:主控芯片选型(PHY与MAC)、SGMII/RGMII接口详解、参考时钟电路设计

好,咱们进入第三章。这一章我打算聊聊硬件架构设计里最核心的几个决策点。说白了,就是主控芯片怎么选,PHY和MAC怎么搭,以及那些让人头疼的接口和时钟。

很多刚入行的工程师,拿到一个100BASE-T1的项目,第一反应就是「找个带MAC的MCU,再配个PHY不就完了?」。嗯,理论上没错,但实际坑不少。我这些年踩过的雷,今天一并倒给你们。

3.1 主控芯片选型:MAC与PHY的「分」与「合」

先讲个基本概念。MAC(媒体访问控制层)负责数据帧的封装、解封装、流控这些「脑力活」。PHY(物理层)负责把数字信号变成模拟信号,怼到双绞线上。两者缺一不可。

选型时,你面临第一个选择题:用集成MAC的SoC,还是外挂MAC?

我个人习惯,优先选集成MAC的SoC。为什么?

  • 成本低:少一颗芯片,BOM和PCB面积都省了。
  • 可靠性高:内部总线通信,比外部走线稳定得多。
  • 开发简单:驱动和BSP通常厂商都帮你搞定了。

但凡事有例外。如果你需要极高的灵活性,比如要自定义MAC层的某些协议,或者要跑非标准的帧格式,那外挂一个独立的MAC芯片(比如用FPGA实现)会更合适。不过,100BASE-T1这种场景,我几乎没见过这么玩的。

核心建议:对于99%的车载100BASE-T1项目,选一颗集成100BASE-T1 MAC的SoC,比如NXP的S32K3系列、TI的TDA4VM系列,或者瑞萨的R-Car系列。这些芯片内部已经集成了符合IEEE 802.3bw的MAC层,你只需要配一个外部的100BASE-T1 PHY即可。

那PHY怎么选?

PHY的选型,我主要看三点:

  1. 兼容性:必须通过OPEN Alliance TC10或TC12的认证。别买那些小厂没认证的,我在项目里吃过亏,兼容性问题能让你调到头秃。
  2. 功耗:车载环境对功耗敏感,尤其是休眠模式下的电流。我一般选待机功耗低于10μA的PHY。
  3. 封装和引脚:QFN封装是主流,但要注意散热。100BASE-T1虽然功耗不高,但如果你板子空间小,散热还是得考虑。

举个例子,我最近一个项目用了Marvell 88Q2112这颗PHY。它支持100BASE-T1,功耗低,而且和NXP的S32K3配合得非常好。嗯,这里要注意,PHY和MAC的厂商最好用同一家,或者至少是经过验证的搭配。否则,你可能会在调试时遇到一些莫名其妙的时序问题。

3.2 SGMII与RGMII接口详解:选哪个?怎么连?

MAC和PHY之间怎么通信?靠的就是MII(媒体独立接口)。100BASE-T1常用的有两种:RGMIISGMII

先说说RGMII。它是个并行接口,用4根数据线(D0-D3)加上时钟和控制信号。优点是简单、成熟、成本低。但缺点也很明显:

  • 信号线多:至少需要12根线(数据、时钟、控制)。
  • 对PCB走线要求高:等长、阻抗控制,一个不小心就容易出时序问题。
  • 速率受限:RGMII理论上能跑到1Gbps,但实际在100Mbps下,它的时序裕量并不大。

我刚开始做车载以太网时,就用的RGMII。有一次,板子打样回来,死活ping不通。查了三天,最后发现是RGMII的时钟走线长了2mm,导致建立时间不够。从那以后,我对RGMII的走线就格外小心。

再说SGMII。它是串行接口,只用一对差分线(TX和RX)加一个参考时钟。优点:

  • 信号线极少:总共就4根线(TX_P/N, RX_P/N, 时钟)。
  • 抗干扰能力强:差分信号,共模抑制比高。
  • 速率高:原生支持1.25Gbps,向下兼容100Mbps。

但SGMII也有代价:需要额外的SerDes(串化/解串器),这会增加一点点成本和功耗。不过,对于车载环境,我强烈推荐优先选SGMII

我的经验:如果你用的是集成MAC的SoC,它通常同时支持RGMII和SGMII。我建议优先使用SGMII,尤其是当你的PCB空间紧张,或者对EMC要求很高时。SGMII的差分走线比RGMII的并行走线好处理得多。

下面给个简单的对比表:

特性 RGMII SGMII
信号线数量 12+ 4
最大速率 1Gbps 1.25Gbps
PCB走线难度 高(需等长、阻抗控制) 低(差分对即可)
EMC性能 一般 优秀
成本 略高(需SerDes)
推荐场景 低成本、低速、空间充裕 车载、高速、高EMC要求

3.3 参考时钟电路设计:别让时钟成为瓶颈

时钟,是数字电路的「心跳」。100BASE-T1对时钟的要求,比普通以太网要严格得多。为什么?因为车载环境温度范围宽(-40°C到+125°C),而且EMC干扰大。

参考时钟通常有两种来源:

  1. 晶振(Crystal):便宜,但精度和稳定性一般。
  2. 振荡器(Oscillator):贵,但精度高,温漂小。

我个人习惯,100BASE-T1的PHY参考时钟,一定要用振荡器。晶振的精度在车载环境下不够用,尤其是当温度变化时,频率偏移会导致链路不稳定。我曾经在一个项目中,用了晶振给PHY提供25MHz时钟,结果在高温测试时,链路频繁断开。换成振荡器后,问题立刻解决。

时钟频率怎么选?

100BASE-T1的PHY,通常需要25MHz50MHz的参考时钟。具体看PHY的数据手册。我建议统一用25MHz,因为大多数SoC和PHY都支持这个频率,而且25MHz的振荡器选择更多、价格更低。

时钟电路设计时,有几个坑要避开:

  • 走线要短:时钟信号是高频信号,走线越长,反射和干扰越大。我一般把振荡器放在离PHY引脚5mm以内
  • 包地处理:时钟线两侧要铺地铜,并打上过孔。这能有效抑制EMI。
  • 串联电阻:在时钟输出端串一个22Ω或33Ω的电阻,可以抑制过冲。这个电阻值需要根据实际波形调整,我一般先用33Ω,然后看示波器波形再微调。
  • 去耦电容:振荡器的电源引脚,一定要加0.1μF和10μF的去耦电容,且要靠近引脚放置。

注意:千万不要把PHY的参考时钟和SoC的参考时钟共用同一个振荡器!除非你确认两者对时钟抖动的容忍度一致。否则,一个抖动大的时钟会同时影响两个器件。我见过有人这么干,结果SoC和PHY都工作不稳定。老老实实各用各的,或者用专用的时钟缓冲器。

最后,给一个典型的时钟电路参考设计:

// 时钟电路连接示意(以25MHz振荡器为例)
// 振荡器输出 -> 33Ω电阻 -> PHY_XTAL_IN
// 振荡器GND -> 直接连到地平面
// 振荡器VCC -> 0.1μF电容 -> 10μF电容 -> 3.3V电源
// PHY_XTAL_OUT -> 悬空(或接一个10pF电容到地,视PHY手册而定)

嗯,这一章的内容就这些。总结一下:

  • 主控选型:优先集成MAC的SoC,PHY选经过认证的。
  • 接口选择:能上SGMII就别用RGMII,省心。
  • 时钟设计:用振荡器,走线短,包地好,去耦足。

下一章,咱们聊聊PCB布局和电源设计。那才是真正考验硬件工程师功底的地方。到时候见。