1. PHY 概述与基础——从物理层聊起

做嵌入式网络开发这么多年,我每次拿到一块新板子,最先关注的不是 CPU 主频有多高,而是 PHY 芯片的型号和它周围的阻容器件。为什么?因为物理层要是没搞定,上层协议栈调得再漂亮也白搭。说白了,PHY 就是数字世界和模拟世界的“翻译官”——它负责把 MAC 发过来的数字信号变成能在网线上跑的模拟差分信号,反过来也一样。

1.1 PHY 芯片到底是干什么的?

你可以把 PHY 理解成网口的“物理层收发器”。它的核心任务其实就两个:发送时,把 MAC 通过 MII/RGMII 接口送来的并行数据,编码、调制、加上同步头,再通过差分线对扔到网线上;接收时,从网线上把微弱的模拟信号恢复出来,经过均衡、时钟恢复、解码,最后变成干净的并行数据送给 MAC。

我记得有一次调试一块交换机板子,网络偶尔丢包,查了三天才发现是 PHY 的 MDI 交叉配置搞反了。 你想想看,信号在 PCB 走线上绕了个大弯,眼图都快闭了。从那以后,我拿到新板子第一件事就是拿示波器看 PHY 输出的差分信号质量——比读寄存器快得多。

具体到功能,PHY 芯片通常包含以下模块:

  • PCS(物理编码子层):负责 8B/10B、4B/5B 等编码,保证直流平衡和时钟嵌入。
  • PMA(物理介质接入子层):负责并串转换、时钟恢复、加扰/解扰。
  • PMD(物理介质相关子层):直接与介质打交道,比如 1000BASE-T 的混合电路、回声抵消。
  • Auto-Negotiation(自动协商):上电后跟对端交换能力信息,决定速度和双工模式。
  • MDIO 管理接口:通过两线(MDC/MDIO)让 CPU 或者 MAC 读写内部寄存器。

小提示:调试 PHY 时,我通常先确认时钟是否稳定(25MHz 或 125MHz),再用 MDIO 读寄存器 0x00(控制寄存器)和 0x01(状态寄存器),看 Link 状态和速度协商结果。如果这两步正常,基本能排除物理层问题。

1.2 常见 PHY 型号——我接触过的三款“老兵”

市面上 PHY 芯片型号多得让人眼花,但工作中最常碰到的也就那几款。我自己在项目里用过 RTL8211、KSZ9031 和 BCM5461,各有各的脾气。下面这张表可以帮你快速上手:

型号 厂商 接口类型 速率 特色
RTL8211 Realtek RGMII / SGMII 10/100/1000 Mbps 价格便宜,兼容性极好,业内用得最多
KSZ9031 Microchip RGMII / RMII 10/100/1000 Mbps 内置 EEPROM 加载,省外部存储;信号质量调节灵活
BCM5461 Broadcom SGMII / RGMII 10/100/1000 Mbps 支持同步以太网(SyncE),常用于电信设备

这里我多说两句个人体会。RTL8211 是入门首选,几乎所有的国产开发板都在用它,驱动和参考设计都很好找。KSZ9031 我当初在一个车载项目里用过,它有一个很贴心的功能——可以通过 Pin-strap 配置一些默认值,省去了上电初始化时写寄存器的麻烦。BCM5461 性能最强,但功耗也高,而且需要仔细调它的 DFE(判决反馈均衡)参数,我曾经踩过坑:默认设置下长线缆时误码率很高,后来在寄存器 0x1C 里调了一组系数才稳定下来。

注意:不同厂家的 PHY 寄存器地址空间虽然都遵循 802.3 标准(寄存器 0~15 是强制统一的),但扩展寄存器(16~31)每家都不一样。比如 RTL8211 的扩展寄存器用于高级诊断,而 KSZ9031 的扩展寄存器控制信号摆幅。千万不要拿 A 家的初始化流程直接套在 B 家上——我曾经亲眼见过有人把 KSZ9031 的寄存器 0x1F 当成 RTL8211 的掉电模式来写,结果芯片直接不工作了。

1.3 物理层协议基础——别被“差分信号”吓住

物理层协议听上去很抽象,但核心概念其实就几个。我习惯先记住这三件事:

  1. 编码:比如千兆以太网用 4D-PAM5 编码,把 8 位数据映射成 4 个 5 电平符号,效率高但实现复杂。百兆则用 MLT-3 编码,简单但最高只到 100M。
  2. 时钟恢复:接收端要从数据流里提取出时钟信号,没有单独的时钟线。这全靠 PLL 和锁相环。如果 PHY 的时钟抖动太大或者终端匹配不好,接收端就容易失锁。
  3. 自动协商:上电后 PHY 会发出一串 FLP(快速链路脉冲)告诉对端:“我能跑千兆全双工,你行不行?”两边最后握手选一个双方都支持的最高能力。这个过程的细节我建议大家去读 802.3 第 28 章,但日常调试只需要会读寄存器 0x05(自动协商状态)就够了。

你可能会问:“为什么我 PHY 的 Link 灯亮了,但 ping 不通?”嗯,这种情况多半是自动协商没协商对——比如一端强制设成了千兆全双工,另一端在自动协商,结果双方认知不一致。我遇到过一次,最后在 MAC 侧把速度也强制成一样才解决。

1.4 一张图看懂本章知识脉络

下面这张 SVG 图帮你把 PHY 的定位、主要芯片、核心协议概念串起来。先看整体结构,再逐块深入,思路会清晰很多。

PHY 芯片知识体系框架 PHY 物理层芯片 发送路径 接收路径 管理接口 常见 PHY 型号 RTL8211 KSZ9031 BCM5461 物理层协议基础 编码方式 时钟恢复 自动协商 说明:本框架图仅展示本章重点内容,后续章节将逐一深入每一模块的寄存器配置细节。

1.5 小结——先站稳再出发