车载 PHY 硬件基础:常用芯片、引脚与功能归纳
做车载以太网量产测试,你最先打交道的不是软件协议栈,而是那块小小的 PHY 芯片。说白了,PHY 就是物理层的翻译官——把数字信号变成能在双绞线上跑的电平脉冲。我手头接触过的项目,十有八九都绕不开 Marvell 和 Broadcom 这两家的车规级芯片。今天咱们就掰开揉碎聊聊它们。
2.1 主流车载 PHY 芯片一览
车规级 PHY 和消费级不一样。温度范围要 –40°C 到 +125°C,EMC 抗扰性得过 ISO 11452,还得支持单对以太网(100BASE-T1 或 1000BASE-T1)。目前市面上最常用的就这几款:
| 厂商 | 型号 | 速率 | 接口 | 车规认证 | 我见过的量产项目 |
|---|---|---|---|---|---|
| Marvell | 88Q2112 | 100BASE-T1 | RGMII / SGMII | AEC-Q100 | OBD 诊断仪、域控制器 |
| Marvell | 88Q2220 | 1000BASE-T1 | RGMII / SGMII | AEC-Q100 | 智能摄像头、激光雷达 |
| Broadcom | BCM89811 | 100BASE-T1 | RGMII / MII | AEC-Q100 | 车机娱乐系统、网关 |
| Broadcom | BCM89610 | 1000BASE-T1 | RGMII / SGMII | AEC-Q100 | ADAS 域控、雷达 |
| TI | DP83TG720 | 1000BASE-T1 | RGMII / SGMII | AEC-Q100 | 车身域控、CCU |
我个人习惯把 Marvell 的 88Q 系列当首选。为什么?它的寄存器布局比较规整,尤其是 MDIO 的寻址方式很清晰,写自动化脚本时不容易踩雷。不过 Broadcom 的抗干扰能力更强,在逆变器附近测过几次,误码率确实低。
2.2 必须认识的引脚
不管哪家的 PHY,核心引脚就那么几类。你想想看,一个 48 脚的 QFN 封装,真正测起来需要关注的也就 20 个左右。我按功能分组给你列一下:
2.2.1 MDI 差分对(介质相关接口)
- MDI+ / MDI–:100BASE-T1 只需要一对差分线。接地屏蔽必须焊好,不然 EMC 过不了。
- Transformer 中心抽头:部分芯片要求外接 Bob Smith 端接,我曾在 OBD 线束上忽略了这端,结果辐射超标,嗯,教训深刻。
2.2.2 主机接口(MAC 侧)
- TXC / RXC:RGMII 时钟,125 MHz(千兆)或 25 MHz(百兆)。注意时钟相位偏移,我遇到过一把因为走线不等长导致 TX 时钟边缘错位,死活 link 不上。
- TXD[3:0] / RXD[3:0]:GMII 数据总线,百兆只用 [1:0]。
- TX_CTL / RX_CTL:控制信号,在 RGMII 里复用为 TX_EN 和 TX_ER。
2.2.3 管理接口
- MDC:管理时钟,最高 12.5 MHz。
- MDIO:管理数据,双向。这里有个坑——有些 PHY 的 MDIO 内部弱上拉不够,需要外部上拉 2.2kΩ,否则读寄存器全是 0xFFFF。我曾经因为这个查了整整两天,最后发现是原理图少画了一个电阻。
2.2.4 控制与状态
- RST_N:复位,低电平有效。上电后需保持至少 10 ms 低电平。
- INT_N:中断输出。我个人习惯用它来检测 link down 事件,比轮询效率高。
- CLK_REQ / CLK_OUT:时钟相关。部分芯片需要外部晶振,但 Broadcom 的型号内置了振荡器,省一个元件。
2.2.5 电源与地
- AVDD / DVDD / VDDIO:模拟、数字、IO 电源。电压可能有 3.3V 和 1.8V 混用,上电时序很关键——VDDIO 不能先于 DVDD 上电,不然锁死。
- GND:别小看地。多层设计时建议把模拟地和数字地单点连接,否则底噪会让 BER 升高 2 个数量级。
我的避坑建议:量产测试时,每个 PHY 引脚务必对地测一次阻抗(用万用表二极管档)。焊连、虚焊是量产中最高发的故障,比芯片本身体问题多 3 倍以上。
2.3 核心功能模块归纳
PHY 芯片内部其实不复杂,说白了就是三大块:模拟前端、数字信号处理器(DSP)、管理控制模块。我用一张图把结构梳理清楚。
你看,核心的 PCS 和 PMA 其实就是做编解码和扰码。自动协商(Auto-Neg)负责和对面握手,决定速率和工作模式。功能模块之间的交互基本都通过寄存器读写来驱动,这就是我们自动化脚本的入口点。
2.4 常用功能与校准场景
量产测试时,我们一般会用到以下功能:
- 链接状态检测:读寄存器 0x01(Status 寄存器)的 bit 2。我习惯每秒读一次,连续 3 次 down 则报错。
- 环回模式:写 0x00 的 bit 14,实现内部数字环回。用于验证 MAC 到 PHY 的数据通路。
- 节能以太网(EEE):寄存器 3.16,量产时需要关闭 EEE 以免延迟不稳定。
- MDIO 预写校准:有些 PHY 需要先写 0x1F 扩展页,再操作具体寄存器。我用 Python 写了个 helper 函数封装这个步骤。
实战经验:有一次产线反馈某批次 88Q2112 全都不 link。我远程进去读了寄存器 0x01,发现 link 状态一直是 0。最终定位是电源噪声太大(纹波 120mVpp),PHY 内部 PLL 失锁。后来在电源入口并了个 100nF+10μF 的电容,问题解决。
2.5 对自动化脚本的影响
了解硬件底子,写脚本才不心虚。比如:
- 你知道 MDIO 读操作需要等待 16 个时钟周期,那么
time.sleep(0.01)就是错的,应该用循环读 status 的方式等待。 - 你知道不同 PHY 的寄存器映射可能不一样(Marvell 用扩展地址 31,Broadcom 用 0x1C 影子寄存器),那么脚本就要设计成可配置的。
- 你知道 RGMII 有内部延迟(ODT),脚本里就得保留一个校准步骤——先发一个测试包,如果错误率很高就尝试调整 TX 延迟。
注意:千万不要盲目相信 PHY 的默认配置。我见过同一个型号的 PHY,不同批次出厂默认寄存器值都不一样。量产前一定要做一次“配置写入验证”——写个关键寄存器再读回来确认。
说实话,把这些硬件细节吃透了,写脚本就是个熟练活。你想想看,脚本无非是替代手动操作,如果你连被测对象有几个引脚、每个引脚做什么都不知道,那脚本写得再漂亮也扛不住现场 bug。