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的选型,我主要看三点:
- 兼容性:必须通过OPEN Alliance TC10或TC12的认证。别买那些小厂没认证的,我在项目里吃过亏,兼容性问题能让你调到头秃。
- 功耗:车载环境对功耗敏感,尤其是休眠模式下的电流。我一般选待机功耗低于10μA的PHY。
- 封装和引脚:QFN封装是主流,但要注意散热。100BASE-T1虽然功耗不高,但如果你板子空间小,散热还是得考虑。
举个例子,我最近一个项目用了Marvell 88Q2112这颗PHY。它支持100BASE-T1,功耗低,而且和NXP的S32K3配合得非常好。嗯,这里要注意,PHY和MAC的厂商最好用同一家,或者至少是经过验证的搭配。否则,你可能会在调试时遇到一些莫名其妙的时序问题。
3.2 SGMII与RGMII接口详解:选哪个?怎么连?
MAC和PHY之间怎么通信?靠的就是MII(媒体独立接口)。100BASE-T1常用的有两种:RGMII和SGMII。
先说说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干扰大。
参考时钟通常有两种来源:
- 晶振(Crystal):便宜,但精度和稳定性一般。
- 振荡器(Oscillator):贵,但精度高,温漂小。
我个人习惯,100BASE-T1的PHY参考时钟,一定要用振荡器。晶振的精度在车载环境下不够用,尤其是当温度变化时,频率偏移会导致链路不稳定。我曾经在一个项目中,用了晶振给PHY提供25MHz时钟,结果在高温测试时,链路频繁断开。换成振荡器后,问题立刻解决。
时钟频率怎么选?
100BASE-T1的PHY,通常需要25MHz或50MHz的参考时钟。具体看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布局和电源设计。那才是真正考验硬件工程师功底的地方。到时候见。