在 **2.5GBASE-T** 链路建立过程中,**master 和 slave 设备**之间需要通过一套完整的协议交互流程来协商能力、时钟角色、信号训练,并最终完成链路激活。该过程融合了 **Clause 73(Auto-Negotiation)** 与 **Clause 126(2.5GBASE-T)** 的规范。下面是详细的交互说明:
---
## 🧭 总体流程图(主从角色下的链路建立)
```plaintext
┌────────────┐ ┌────────────┐
│ Master │ │ Slave │
└────┬───────┘ └────┬───────┘
│ 1. 启动自协商 (Clause 73) │
│───────────────────────────►│
│◄───────────────────────────│
│ 2. 双方交换能力信息 │
│ - 支持 2.5GBASE-T │
│ - Master/Slave 能力位 │
│ │
│ 3. Master/Slave 决策 │
│ - 根据优先级/能力确定主从 │
│ │
│ 4. 进入 PMA Training 阶段 │
│───────────────────────────►│
│◄───────────────────────────│
│ - 发送训练信号 │
│ - 接收端调节均衡器参数 │
│ - 完成信号对齐 │
│ │
│ 5. 建立 FEC / PCS 链接 │
│ │
│ 6. Link up, ready │
```
---
## 🔧 协议阶段详解
### ✅ 1. **Clause 73 Auto-Negotiation**
* 基于 Clause 45 MDIO 或 SERDES 协议帧进行;
* 包含 **Ability Exchange**(能力交换) 和 **Master/Slave 角色协商**;
* 能力信息包括:
* 支持速率(1000M / 2.5G / 5G)
* 是否支持 EEE(节能以太网)
* 是否具备 FEC 支持
* **Master/Slave preference**(是否希望担任 master)
🔍 **Master/Slave 角色协商规则**:
* 双方发出 **Ability** 帧(带 master 优先级字段);
* 数值小者为 Master,大者为 Slave;
* 如果一样,则用随机数打破对称。
> **主设备提供时钟,Slave 从主设备接收恢复时钟**。
---
### ✅ 2. **PMA Training(Clause 126.5)**
链路角色确认后进入 **信号训练阶段**,核心为:
* **发送训练信号(Training Pattern)**;
* **对接收链路进行采样、均衡调试**;
* **动态调节前加重、接收 EQ**;
* 确认链路可用性与眼图质量。
🔍 该阶段会触发如下行为:
* Slave 使用 Master 时钟恢复信号;
* 双方发出 PAM-16 或 DSQ128 调制的固定模式;
* 通过内置比较器与测量电路检测信号质量;
* 成功后写入寄存器,告知“Training Complete”。
---
### ✅ 3. **FEC 和 PCS 同步**
在物理层训练完成后:
* 启用 LDPC 或 Firecode FEC(前向纠错);
* 同步 64b/66b 或 128b PCS 编码;
* 建立 Frame Lock;
* 完成数据层链路激活。
链路稳定之后会设置以下位:
* MMD 3, Reg 0x0011(PMA Status 2):Bit 2(Training done)
* MMD 1, Reg 0x0001(Basic Status):Bit 2(Link Status)
* 可选:MMD 3, Reg 0x0020(PMA Loopback / Debug)
---
## ⚙️ 协议交互中用到的重要寄存器(Clause 45)
| 操作 | MMD 地址 | 寄存器 | 含义 |
| --------------- | ------ | ---------- | ---------------------------------- |
| 启用 Auto-Neg | Dev 7 | Reg 0x0000 | Bit 12 |
| 设置 Ability | Dev 7 | Reg 0x0010 | Bit 7 (2.5G) |
| Master/Slave 能力 | Dev 7 | Reg 0x0020 | Bit 11 (MS\_CFG), Bit 12 (MS\_MAN) |
| 读取 Training 状态 | Dev 3 | Reg 0x0011 | Bit 2(PMA Training Done) |
| Link Status | Dev 1 | Reg 0x0001 | Bit 2 |
---
## 🧪 举个例子:如何判断主从角色?
某 PHY 的主从协商能力寄存器(MMD 7,Reg 0x0020)如下:
* Bit 12:Manual Master/Slave Enable
* Bit 11:Configure as Master(1 = Master)
* Bit 8–0:Priority(越小越优先)
Master/Slave 决定算法:
1. 如果两端都手动设置 → 强制决定;
2. 如果一端手动设置,另一端自动协商 → 手动设置生效;
3. 如果都自动 → 比较 Priority,低者胜;
---
## 🔄 Link Training 状态迁移图(简化)
```plaintext
[START]
↓
[Auto-Neg Complete]
↓
[PMA Training in Progress]
↓ (Training Succeed)
[PMA Training Complete]
↓ (PCS Align Done)
[LINK UP]
```
可用定时器 + 状态轮询方式实现驱动中的训练监控。
---
## 💡 提示:裸机驱动要做什么?
你不需要控制主从协商本身(大部分 PHY 自动完成),但你应该:
1. **配置 Auto-Negotiation 能力寄存器**(含 2.5G 和 Master/Slave 能力);
2. **读取 Master/Slave 结果**(如 Marvell PHY 提供);
3. **检查 PMA Training 和 Link Status 状态位**;
4. **等待训练完成再使能 MAC 接口**。
---
## 📘 总结
| 阶段 | 内容 | 是否自动 |
| ---------------- | ------------ | ---------- |
| Auto-Negotiation | 协商速率和主从角色 | 自动(PHY 内部) |
| PMA Training | 链路信号训练 | 自动(PHY 内部) |
| 主从选择 | 通过优先级字段自动协商 | 自动,但可强制 |
| 状态检查 | PMA状态/Link状态 | 手动读取寄存器 |
---
如你告诉我使用的具体 PHY 型号(例如 RTL8221B、YT8521、88E1512 等),我可以进一步列出它具体寄存器的 Master/Slave 协商方式、判断方式及链路状态判断逻辑。
是否需要?