第1章 PHY寄存器基础:定义、分类与作用
1.1 什么是PHY寄存器
PHY寄存器,说白了就是物理层芯片内部的一块“控制面板”+“仪表盘”。
你通过它告诉PHY芯片:
– 工作速率选多少?
– 要不要自动协商?
– 功率怎么控制?
同时,它也把当前状态反馈给你:
– 链路有没有起来?
– 信号质量怎么样?
– 有没有发生碰撞?
每个寄存器通常是16位宽,地址从0到31。前16个地址(0~15)由IEEE 802.3标准规定,后16个(16~31)留给芯片厂商自己折腾。
1.2 PHY寄存器的分类
按功能分,PHY寄存器大概可以分成这几类:
| 类别 | 地址范围 | 典型寄存器 | 作用 |
|---|---|---|---|
| 基本控制/状态 | 0~1 | 控制寄存器(CR)、状态寄存器(SR) | 软复位、速率选择、自协商启停、链路状态 |
| PHY标识 | 2~3 | PHY ID寄存器 | 厂商和型号识别,调试时确认芯片型号 |
| 能力通告 | 4~5 | 自协商能力寄存器 | 本端和对端支持的速率/双工模式 |
| 扩展状态 | 6~15 | 1000Base-T控制、特定状态 | 千兆参数、EEE、唤醒等 |
| 厂商自定义 | 16~31 | 各种测试/诊断寄存器 | 信号质量、眼图、链路诊断等 |
你想想看,前两个寄存器就是“门面”,后面那些才是真正干活的。我曾经在项目里只盯着寄存器0和1,结果链路频繁断连,死活找不到原因。后来发现是厂商自定义寄存器里的一个信号检测阈值设得太高,改了一点点就好了。所以,别忽略那些“非标”的角落。
1.3 核心寄存器功能解析
咱们挑几个常用的细说一下。
寄存器0(控制寄存器,BMCR)
- Bit 15:软复位(写1触发)
- Bit 13~12:速度选择(00=10M, 01=100M, 10=1000M)
- Bit 8:双工模式(1全双工,0半双工)
- Bit 12:自协商使能(1使能)
我第一次调PHY的时候,总觉得软复位要手动清0。后来发现芯片自己会在复位完成后自动清掉Bit 15。嗯,不要反复去写它,不然PHY会一直处于复位状态。
寄存器1(状态寄存器,BMSR)
- Bit 2:链路状态(1表示链接正常)
- Bit 5:自协商完成
- Bit 11~15:各种能力指示
寄存器4(自协商能力寄存器,ANAR)
- Bit 8~15:本端支持的能力编码
- Bit 4~7:技术选择(通常为0001表示以太网)
自协商时,你和对方交换各自的能力,最后选定双方都支持的最高速率。我曾经碰到过一端只配了100M全双工,另一端却自动协商成了10M半双工。查了半天,发现是自协商能力寄存器写错了,少设了一个bit。
1.4 寄存器的作用与调试意义
PHY寄存器对调试来说,就像医生的听诊器。没有它,你只能干瞪眼。
- 配置物理层行为:设定速率、双工、自协商、流控、节能模式等。
- 监控链路状态:实时判断有没有连上、有没有断开、有没有翻转。
- 诊断问题根源:通过错误计数器、信号质量指标定位是线缆问题、EMI干扰还是芯片本身问题。
- 读取芯片信息:验证型号、版本,确保板子上的芯片和BOM一致。
我举个例子吧。有一次产线反馈某批板子网口不通,拿回来测发现链路能起来但丢包严重。读寄存器0正常,读寄存器1链路状态也OK。后来翻厂商手册,找到寄存器27(自定义),里面有个RSSI信号强度字段,读出来只有30多(正常值应该在80以上)。这才发现是RJ45座子虚焊导致的信号衰减。要是没有那个自定义寄存器,这块板子可能要换芯片查半天。
标准寄存器帮你完成基本配置和状态监控;
扩展寄存器帮你定位链路层和物理层问题;
自定义寄存器是厂商的“私藏宝库”,关键时候能救命。
上面这张图把整个流程串起来了。主控通过MDIO总线读写PHY寄存器,按不同地址访问不同功能块。不管你是新手还是老手,记住这个分层思路就够了。
嗯,到这里,PHY寄存器的基础概念、分类和作用就讲完了。后面的章节我们会逐个深入每类寄存器的具体用法,以及实际调试时怎么“读”出问题、“写”出对策。