1. PHY 基础概念:PHY 在以太网中的角色与功能概述

说到以太网,大家第一反应可能是那根八芯网线,或者交换机上的闪烁灯。但真正让数据跑起来的,是藏在接口后面的一个芯片——PHY(Physical Layer,物理层收发器)。

我刚开始做嵌入式网络产品时,总觉得 PHY 就是个“信号转换器”,没什么技术含量。直到有一次,某批板子上电后链路死活不亮,排查了一整天,最后发现是 PHY 的自动协商寄存器没配置对。嗯,从那以后我就再也不敢小看这颗小芯片了。

这一章,我就带你从底层视角捋一捋:PHY 到底是什么,它在以太网里扮演什么角色,以及为什么搞硬件的人必须搞懂它。

1.1 以太网分层模型中的 PHY

先看最经典的 OSI 七层模型。以太网一般只涉及下面两层:

OSI 层以太网实现典型芯片/接口
数据链路层(Layer 2)MAC(介质访问控制)CPU 集成 MAC / 独立 MAC 芯片
物理层(Layer 1)PHY(物理层收发器)独立 PHY 芯片(如 RTL8211、KSZ9031)

说白了,MAC 负责把数据打包成帧、做 CRC 校验、控制发送时机;而 PHY 负责把这些数字信号变成能在网线上传输的模拟信号,再把接收到的模拟信号变回数字信号。

核心结论:MAC 管“逻辑”,PHY 管“物理”。你写的网络协议栈跑到 MAC 层就停了,剩下的事全交给 PHY。

我个人习惯把 MAC 和 PHY 的关系比作“司机”和“车”。MAC 是司机,知道怎么踩油门、打方向盘(协议);PHY 是发动机、轮胎和悬挂(物理层),负责真正在路上跑。司机再牛,车不行也跑不起来——反过来,车再好,司机不会开也白搭。

1.2 PHY 到底干了哪些活儿?

PHY 的功能并不只是“数模转换”。我把它拆成五大核心任务:

  1. 编码与解码:把 MAC 送过来的 4-bit 或 8-bit 并行数据,按照特定编码(如 100BASE-TX 用 4B5B + MLT-3)变成串行信号;接收端反向解码。这样可以降低直流分量,利于变压器耦合。
  2. 线路驱动与接收:把编码后的信号通过差分线驱动到网线(100Ω 平衡对),同时从网线上接收微弱的差分信号,经均衡和放大后恢复数据。
  3. 时钟恢复(CDR):从接收到的数据流里提取同步时钟。网线上没有单独的时钟线,PHY 必须自己从边沿跳变中“猜”出时钟。我记得有次用低质量晶振,CDR 频繁失锁,导致丢包率暴增。
  4. 自动协商(Auto-Negotiation):上电后自动和对端 PHY 交换能力信息,协商出双方都支持的最高速率和双工模式。这是以太网“即插即用”的关键。
  5. 链路状态检测(Link Status):持续发送和接收链路脉冲(快速链路脉冲 FLP),判断物理连接是否完好。一旦断开,MAC 层立刻知道。

一个小经验:调试 PHY 时,第一步永远是读寄存器 0x01(Basic Status)看看 Link Status 位(bit 2)是不是 1。如果不是,别急着调上层——先查硬件连接、晶振和供电。

1.3 PHY 与 MAC 的接口

PHY 和 MAC 之间通常通过标准的介质独立接口(MII)连接。不同速率、不同物理介质会用不同的接口。下表列出最常见的几种:

接口数据位宽时钟频率典型速率备注
MII4bit25MHz (100M) / 2.5MHz (10M)10/100Mbps最经典,引脚多(16根)
RMII2bit50MHz10/100Mbps节省引脚,常用在 MCU
RGMII4bit (DDR)125MHz1000Mbps25/125MHz 双沿采样
GMII8bit125MHz1000Mbps引脚多,老设计用
SGMII串行差分625MHz1000MbpsSerDes 方式,高速信号

为什么要有这么多接口?说白了就是成本和性能的平衡。MII 容易布线但占 PCB 空间,RMII 省引脚但时钟频率高,RGMII 可以跑千兆但时序要求更严苛。

踩坑提醒:我曾经在 RMII 接口上翻过车。MAC 和 PHY 的参考时钟方向搞反了——有的 PHY 需要 MAC 提供 50MHz,有的 PHY 自己输出。结果连上去指示灯亮但 ping 不通,调了两天才发现时钟极性不匹配。所以画板子前一定先看手册里 clock scheme 章节。

1.4 PHY 的寄存器基础:MDIO/MDC 管理接口

配置 PHY 和控制 PHY,全靠一个叫 MDIO(Management Data Input/Output)的串行总线。它只有两根线:

  • MDC(Management Data Clock):时钟,由 MAC 或主控提供,最高约 2.5MHz。
  • MDIO(Management Data Input/Output):双向数据线。

通过 MDIO 总线,我们可以读写 PHY 内部最多 32 个寄存器(0x00 ~ 0x1F),每个寄存器 16 位。IEEE 802.3 标准定义了前几个寄存器的含义:

寄存器地址名称功能简述
0x00Basic Control软复位、环回、速率选择、双工设置、自动协商使能
0x01Basic Status链路状态、自动协商完成、能力指示
0x02 ~ 0x03PHY IdentifierOUI 和型号,用来识别厂商
0x04Auto-Negotiation Advertisement本端支持的能力(10/100/1000M、半双工/全双工)
0x05Auto-Negotiation Link Partner Ability对端能力(只读)
0x0A ~ 0x0FVendor Specific厂商自定义,如均衡、省电、中断等

你想想看,整个 PHY 的行为控制其实就是通过这 MDIO 接口读写几个 16 位寄存器。搞懂了它们,就等于拿到了 PHY 的“遥控器”。

1.5 一张图看明白 PHY 在系统里的位置

下面我用 SVG 画了个示意图,展示典型千兆以太网节点里 MAC、PHY、变压器(Ethernet Transformer)、RJ45 之间的连接关系。这样你能直观看到 PHY 在信号路径中的位置。

以太网节点中 MAC、PHY、变压器和 RJ45 的连接关系 以太网节点物理层信号链 MAC GMII / RGMII PHY 寄存器 + CDR + 编码 变压器 信号隔离 RJ45 TX/RX 数据 差分对 隔离后 MDIO/MDC 管理总线 25MHz 晶振给 PHY 提供参考时钟

从图上可以看到,MAC 通过 GMII/RGMII 总线与 PHY 交换并行数据,同时通过 MDIO 管理 PHY 的寄存器。PHY 将数据编解码后,经差分对送往变压器(隔离共模干扰、改变电平),最后从 RJ45 座子接入网线。

重点记住:MDIO 是工控嵌入式里最常用的外设调试手段。你写驱动、调链路、修丢包,90% 的工作量都花在操作 PHY 寄存器上。所以后面我们会花好几章专门讲 MDIO 时序和寄存器读写实现。

1.6 本章小结

这一章我们搭了个大框架:

  • PHY 在 OSI 模型里是物理层,处理信号编码/解码、线路驱动、时钟恢复、自动协商。
  • PHY 通过 MII/RMII/RGMII 等接口与 MAC 连接,通过 MDIO 总线配置。
  • 标准 PHY 寄存器(0x00~0x05)定义了控制、状态和协商参数——它们是我们后续操作的基础。
  • 实际开发中,链路不亮的排查路径:先读寄存器 0x01 确认 Link 状态,再看自动协商寄存器,最后检查硬件连接和时钟。