在裸机环境下,两个 **支持 10GBASE-T** 的 PHY 芯片通过 Clause 73 协议完成自协商(Auto-Negotiation,AN),它们在 **无操作系统控制** 的条件下,完成以下 **完整的点对点数据交互流程**:
---
## 🎯 目标
让两个 PHY 互相通过线缆,自动协商出都支持的最高速率(如 10G / 5G / 2.5G / 1G),并同步启用相关功能(如 FEC、Master/Slave、DFE 等)。
---
## ⚙️ 术语说明(来自 IEEE 802.3 Clause 73)
| 缩写 | 含义 |
| ------------- | ----------------------------- |
| **MP** | Message Page(标准能力页) |
| **NP** | Next Page(是否还有下一页) |
| **Toggle** | 翻转位,每次页内容变化时翻转 |
| **ACK2** | 确认页同步用 |
| **Base Page** | 基础能力页(Clause 28 兼容页) |
| **Next Page** | 后续页,用于传递 10G/5G/2.5G/FEC/厂商能力 |
| **LP** | Link Partner,对端 |
---
## 📡 自协商阶段间交互过程
以下以两端:**Master(A)** 与 **Slave(B)** 为例,进行详解。
---
### 🧭 阶段 0:电缆连接 & PHY 通电
* 每端 PHY 检测线缆状态。
* 初始化 AN 状态机,准备发出 Base Page。
---
### 🔄 阶段 1:Base Page 交换(Clause 28)
* 双方发送 16-bit Base Ability(如 0x0020 表示 1000Base-KX,全双工)。
* Base Page 带有 `NP = 1` 表示后面还有页。
```
Master → 发送 Base Page: 0x3020 (NP=1, Toggle=1)
Slave → 发送 Base Page: 0x3020 (NP=1, Toggle=1)
```
* 双方检测到对方页,返回 ACK。
* Base Page ACK 成功后,转入 Next Page 交换。
---
### 🔁 阶段 2:Next Page 交换(Clause 73)
每一页结构如下:
```
Bit 15: NP(1 表示后续还有页)
Bit 14: ACK2
Bit 13: Toggle(每页变化后翻转)
Bit 12: MP(1 = Message Page,0 = Vendor/Unformatted)
Bit 11~0: Payload(内容)
```
#### 📨 双方页交互如下:
```
Master 发送:0x9804 (MP=1, Message Code = 0x004 = 10G)
Slave 发送:0x9804
Master 发送:0x9803 (5G)
Slave 发送:0x9803
Master 发送:0x9802 (2.5G)
Slave 发送:0x9802
Master 发送:0x8402 (Vendor Page,含FEC或MS偏好)
Slave 发送:0x8402
Master 发送:0x0000 (NP=0,最后一页)
Slave 发送:0x0000
```
* 每个页都要通过对端返回 ACK2 位进行确认;
* 每一页都检测 Toggle 位变化来判断是否有效;
* NP=0 时表示页交换完毕。
---
### ✅ 阶段 3:协商结果一致 & 链路建立
* 双方比较对端页中能力,确定**最高共同支持速率**(如都支持 10G,则选用 10G)。
* 处理附加协商参数(FEC、Master/Slave、EEE、Training);
* 设置内部状态机为 `link_ready`,进入 Training(训练)阶段。
---
### 📉 阶段 4:Training & Link Up
* 双方启动 **PMA Training(PMA-Tx/Rx 调谐)**
* DFE(判决反馈均衡器)系数交换
* THP(前馈预加重)系数计算
* 线对延迟测量
* 回声/串扰抑制调整
* 完成后启用数据通道,链路正式 up。
---
## 🧠 总结:裸机自协商全过程的数据交互结构
| 阶段 | 交互类型 | 内容 |
| ------------ | ------------ | -------------------------- |
| Base Page | Clause 28页交换 | 全双工能力、是否支持下一页 |
| Next Page | Clause 73页交换 | 10G/5G/2.5G能力、FEC/MS偏好、厂商页 |
| Toggle/ACK2 | 控制字段 | 确保页同步与有效性 |
| Finalization | 结果确认 | 双方确定最终速率与FEC配置 |
| Training | 模拟自适应 | 通道补偿、均衡器设置、误码调整 |
---
## 📌 附加建议
* **调试建议**:
* 在裸机下可每隔 Xms 打印 `0x07.0x14/0x18` 读取到的页;
* 若 Toggle 不变说明对方页没更新;
* 若 AN 无法完成,注意对端是否缺页、Toggle未翻转、或 ACK2 不匹配。
* **抓包调试工具**:
* Marvell/Aquantia PHY 可通过 MDIO trace 或开发工具查看页交互;
* Clause 73 数据页通常可在 `0x07.0x18` 中每次读取确认。