第1章:PHY 概述 —— 你好,物理层
第一次接触 PHY 芯片,很多人会觉得它就是个小黑盒。
一边接网口,一边接 MAC,中间塞了一堆寄存器。说白了,PHY 就是数字世界和模拟世界的「翻译官」。你发给它的数字信号,它得变成能在网线上跑的模拟差分信号;反过来,网线上微弱的模拟信号,它得解码成芯片能识别的 0 和 1。
我刚开始做嵌入式时,觉得这玩意儿就是个“自动的”——插上就能用。直到有一次产品量产返修率奇高,排查了两周才发现是 PHY 的自动协商配置没收敛。嗯,从那以后我再也不敢小看这片小小的芯片了。
1.1 PHY 到底干了什么?
咱们用最简单的话说:把数据从MAC搬到网线上,再从网线搬到MAC。但中间的过程其实不简单。
- 编码/解码:把 MAC 送来的并行数据变成串行码流,再用特定的线路编码(比如 4B/5B、8B/10B、64B/66B)去保证 DC 平衡和时钟恢复。
- 信号调制:把编码后的数字信号调制成适合线缆传输的模拟信号(MLT-3、PAM5、NRZ 等)。
- 自动协商:和对端设备握手,协商出双方都支持的最高速率和工作模式(全双工/半双工)。
- 链路管理与状态检测:实时监测链路是否正常、有没有断开、信号质量怎样。
- 寄存器接口:通过 MDIO/MDC 总线让 CPU 能读写 PHY 的内部状态和控制寄存器。
一句话总结:PHY 是协议栈的第 1 层(物理层)的硬件实现。没有它,你的以太网驱动只能对着空气发数据包。
1.2 常见标准一览
以太网 PHY 标准太多了,但咱们初学者先把最常见的几个搞清楚就行。我按速率排了个表,你记下来后面调试经常碰到。
| 标准 | 速率 | 编码方式 | 常见介质 | 个人笔记 |
|---|---|---|---|---|
| 10BASE-T | 10 Mbps | Manchester | Cat3/Cat5 双绞线 | 古董级,但兼容性测试时还要测 |
| 100BASE-TX | 100 Mbps | 4B/5B + MLT-3 | Cat5 双绞线 | 最经典,项目里80%是它 |
| 1000BASE-T | 1 Gbps | 4D-PAM5 | Cat5e/Cat6 双绞线 | 四对线同时传,调试时要看回声消除 |
| 10GBASE-T | 10 Gbps | DSQ128 + LDPC | Cat6a/Cat7 双绞线 | 功耗大,PCB 设计要小心 |
| 1000BASE-X | 1 Gbps | 8B/10B | 光纤 | 光模块(SFP)常用 PHY 集成在模块内部 |
| 10GBASE-R | 10 Gbps | 64B/66B | 光纤 | 万兆以太网的标准方式 |
一个小技巧:你在调试 1000BASE-T 时,重点看寄存器 0(基本控制)、寄存器 1(基本状态)、寄存器 4(自动协商通告)、寄存器 5(自动协商链路能力)。我每次调千兆卡死,十有八九是自动协商没对齐。
1.3 为什么需要了解这些标准?
你想想看,PHY 寄存器有上百个,不同标准下的寄存器含义、速率配置位、自动协商时序都不一样。比如 100BASE-TX 的自动协商只需要两对线,而 1000BASE-T 需要四对线同时协商。如果拿 100M 的思维去调千兆,肯定调不出来。
我记得有一次给一个工控主板换 PHY 芯片,从百兆换成千兆,结果设备总是协商成百兆。查了两天,发现是变压器中心抽头电容选型不对,导致千兆模式下的信号幅值不够。这就是标准差异带来的实际坑。
避坑指南:千万不要觉得 PHY 芯片“通用”就能随便换型号。不同标准的 PHY 对 PCB 布局、隔离变压器、共模电感的寄生参数要求完全不同。我曾经因为偷懒直接替换,结果整板重新打样,交期延了两周。
1.4 PHY 在系统里的位置
来,我用一张图把整个链路画清楚。这是本章唯一一张 SVG 结构图,也是后面 29 章反复引用的基本框架。
上图里你可以看到:MAC 和 PHY 之间通过 MII 族接口通信,PHY 再通过隔离变压器连接到 RJ45。CPU 通过 MDIO/MDC 总线直接操作 PHY 里的寄存器——这就是我们后面 29 章要反复做的事情:读写寄存器,分析状态,定位问题。
1.5 调试 PHY 的思维起点
很多工程师上来就翻 datasheet 找寄存器地址,我的习惯是先搞清楚三件事:
- 当前链路协商结果是什么?(读寄存器 1 的 Link Status 位,以及寄存器 5 的协商能力)
- 信号质量怎样?(看寄存器 1 的接收错误计数,或者百兆千兆下的 CRC 错误统计)
- 硬件连接对了吗?(时钟有没给、复位有没释放、电源纹波超不超标)
说白了,寄存器只是信息的「窗口」。真正的问题往往在窗口外面——PCB 布线、电源、变压器、连接器。但你需要透过窗口(寄存器)去推断外面发生了什么。这就是 PHY 寄存器调试的核心思维。
给你一个实战胜率最高的套路:遇到 PHY 不通,先看 Link Status(寄存器1.2位)是不是 1。如果是 0,再看自动协商中断寄存器,看是不是协商失败。如果是 1 但仍然不通,查 RX_ERR 和 CRC 错误寄存器。我用了这个方法,至少省了 70% 的排查时间。
1.6 本章小结
第一章没有让你背任何一个寄存器地址,而是先把 PHY 的定位、标准、系统位置理清楚。你心里要有这个框架:
- PHY 是物理层的硬件实现,负责编码/解码、调制/解调、自动协商
- 标准从 10M 到 10G,编码和调试关注点不同
- 调试的核心入口是 MDIO 寄存器,但根因经常在硬件设计上
- 自动协商是所有链路问题的第一排查点
下一章开始我会带你手把手读寄存器、写驱动、抓波形。但别急,先把这章的概念消化掉,后面我们会反复用到这张系统框图。
再次提醒:如果你手头有开发板,现在就去找到 PHY 芯片的型号,下载它的 datasheet,翻到寄存器描述章节,大致看看控制寄存器和状态寄存器的布局。不一定要看懂,先混个脸熟。