MII、RMII、GMII、RGMII:连接 PHY 的并行接口
并行媒体独立接口通过几厘米长的 PCB 走线,把 MAC 连接到铜缆 PHY 芯片——存在于路由器、小型交换机、接入点、工业控制器以及每一块带 RJ45 的嵌入式板卡中。它们从不到达光模块笼子,但却是所有到达笼子的接口的参照点:SGMII 是"串行化的 GMII",XGMII 是"10G 下的 GMII",铜缆 SFP 内部的 PHY 在内部使用其中一种。本页给出 MII、RMII、GMII 和 RGMII 的引脚、时钟与时序,RGMII 延迟问题,带内状态,MDIO 管理,以及每种接口产生的故障。
MII(IEEE 802.3 Clause 22)
| 项目 | 值 |
|---|---|
| 速率 | 10 和 100 Mb/s |
| 数据 | 4 位 TXD[3:0],4 位 RXD[3:0] |
| 时钟 | TX_CLK 和 RX_CLK 来自 PHY:25 MHz(100M)、2.5 MHz(10M) |
| 控制 | TX_EN、TX_ER、RX_DV、RX_ER、CRS(载波侦听)、COL(冲突) |
| 管理 | MDC、MDIO(共用) |
| 信号数 | 16 个数据/控制信号 + 2 个管理信号 |
| 电平 | 5 V / 3.3 V TTL |
| 传输距离 | 几厘米;一个 MAC 对应一个 PHY |
仍见于微控制器和 FPGA 中;因引脚数量原因被 RMII 取代。
RMII(RMII Consortium 规范 v1.2)
| 项目 | 值 |
|---|---|
| 速率 | 10 和 100 Mb/s |
| 数据 | 2 位 TXD[1:0]、RXD[1:0] |
| 时钟 | 单一 REF_CLK 50 MHz,由 MAC 和 PHY 共用;由晶振、MAC 或 PHY(PHY 时钟输出模式)提供 |
| 控制 | TX_EN、CRS_DV(载波侦听与数据有效复用)、RX_ER(可选) |
| 信号数 | 7–9 |
| 10 Mb/s 模式 | 每个半字节在 50 MHz 下重复 10 次 |
| 传输距离 | cm |
50 MHz 参考时钟的拓扑结构是 RMII 的经典故障源:如果 PHY 期望外部时钟,而 SoC 却期望由 PHY 驱动时钟,就会出现接口不通、但链路指示灯正常的情况。
GMII(Clause 35)
| 项目 | 值 |
|---|---|
| 速率 | 1000 Mb/s;10/100 时回退到 MII 信令 |
| 数据 | 8 位 TXD[7:0]、RXD[7:0] |
| 时钟 | 发送用 GTX_CLK 125 MHz,来自 MAC;接收用 RX_CLK 125 MHz,来自 PHY;TX_CLK 来自 PHY,仅在 10/100 回退时使用 |
| 控制 | TX_EN、TX_ER、RX_DV、RX_ER、CRS、COL |
| 信号数 | 24 + 管理信号 |
| 电平 | 2.5 V(许多器件可耐受 3.3 V) |
| 传输距离 | cm;在 125 MHz 单倍数据速率下时序余量紧张 |
如今主要用作片内或 FPGA 接口;在板卡上已被 RGMII 取代。
RGMII(Reduced GMII,HP/Marvell 规范 v1.3 和 v2.0)
| 项目 | 值 |
|---|---|
| 速率 | 10/100/1000 |
| 数据 | 4 位 TXD[3:0] 和 RXD[3:0],双倍数据速率:低半字节在上升沿,高半字节在下降沿 |
| 时钟 | TXC 125 MHz(来自 MAC)、RXC 125 MHz(来自 PHY);100M / 10M 时为 25 / 2.5 MHz |
| 控制 | TX_CTL(上升沿为 TX_EN,下降沿为 TX_EN 异或 TX_ER)、RX_CTL(RX_DV / RX_DV 异或 RX_ER) |
| 信号数 | 12 |
| 电平 | 2.5 V(v1.3)、1.5 V HSTL 或 1.8 V(v2.0 选项);部分 PHY 为 3.3 V |
| 传输距离 | ≤ 10–15 cm,等长走线 |
延迟问题
RGMII 要求时钟在接收端比数据沿晚到 1.5–2.0 ns(建立/保持窗口)。有三种实现方式:
| 模式 | 谁添加延迟 | 设备树 phy-mode | 说明 |
|---|---|---|---|
| PCB 延迟(v1.3) | 约 5 cm 额外时钟走线 | rgmii | 经典方式,较脆弱 |
| PHY 内部延迟(RGMII-ID,v2.0) | PHY 在 TX 和 RX 时钟上各加 2 ns | rgmii-id | 目前最常见 |
| MAC/SoC 内部延迟 | 由 SoC 添加 | rgmii,配合 MAC 侧延迟寄存器 | — |
| 混合方式 | 仅 PHY 单方向添加 | rgmii-txid、rgmii-rxid | 仅一侧支持时使用 |
延迟添加两次(PCB 和 PHY 都加)或完全不加,都会产生 RGMII 的典型故障:1G 下链路已建立但出现 CRC 错误或无流量,而 100M 正常(100M 周期为 40 ns,能容忍偏斜)。解决方法是修改 PHY 的延迟寄存器或 phy-mode。
带内状态
空闲时,PHY 在 RXD[3:0] 上驱动链路、速率和双工状态,使 MAC 无需读取 MDIO 就能重新配置分频器:RXD[0] 为链路,RXD[2:1] 为速率(00 = 10,01 = 100,10 = 1000),RXD[3] 为双工。部分 MAC 忽略该信息,依赖 MDIO 轮询;双方预期不一致时,会出现 PHY 端链路已建立而 MAC 端显示断开的情况。
TBI 与 RTBI
十位接口(Ten-Bit Interface):在 MAC/PCS 与外部 SerDes 或光 PHY 之间传输 8b/10b 编码的 1000BASE-X 符号(125 MHz 下 10 位,RTBI 为 DDR 下 5 位)。在板卡上已过时;其串行后继是 1000BASE-X/SGMII (参见SGMII 与串行千兆)。
对比
| 接口 | 引脚(数据 + 控制) | 时钟 | 最高速率 | 电压 | 典型用途 |
|---|---|---|---|---|---|
| MII | 16 | 来自 PHY 的 25 MHz | 100M | 3.3/5 V | MCU、旧式设备 |
| RMII | 7–9 | 共用 50 MHz | 100M | 3.3 V | 嵌入式 SoC + PHY |
| SMII | 每端口 2–3 | 125 MHz | 100M | 3.3 V | 多端口 PHY(Cisco) |
| GMII | 24 | 125 MHz(MAC 发送 / PHY 接收) | 1G | 2.5 V | FPGA、片内 |
| RGMII | 12 | 125 MHz DDR | 1G | 2.5/1.8/1.5 V | 板卡上的 SoC ↔ PHY |
| SGMII | 4(2 对) | 内嵌 1.25 GBd | 1G(10/100 通过复制实现) | CML | SoC ↔ PHY、SFP 笼子 |
PHY 管理:MDIO/MDC
| 项目 | Clause 22 | Clause 45 |
|---|---|---|
| 寻址 | 5 位 PHY 地址,5 位寄存器(32 个寄存器) | 5 位端口,5 位设备(PMA/PMD、PCS、PHY XS、DTE XS、AN、厂商),16 位寄存器 |
| 关键寄存器 | 0 控制(复位、速率、AN 使能、环回)、1 状态(链路、AN 完成)、2–3 PHY ID(OUI + 型号)、4 AN 通告、5 链路对端能力、9/10 1000BASE-T 控制/状态、17+ 厂商(RGMII 延迟、LED) | 1.x PMA、3.x PCS、7.x AN、30.x/31.x 厂商 |
| 速率 | MDC ≤ 2.5 MHz(实际中常更快) | 相同 |
| Linux 工具 | mii-tool -v eth0、phytool read eth0/1/0、ethtool eth0;驱动通过 phylib、phylink | phytool read eth0/1:1/0 |
与之相对,可插拔模块通过 I²C 而非 MDIO 管理(参见双线接口)。铜缆 SFP 内部的 PHY 是例外:在许多设计中,其 MDIO 寄存器可通过模块 I²C 的第二地址访问,厂商正是借此设置 10/100 回退和自动协商行为。
常见 PHY 及其接口
| PHY 系列 | 接口 | 典型板卡 |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII、RGMII、SGMII、TBI | 路由器、铜缆 SFP 模块(88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | 单板计算机、消费级路由器 |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | 工业设备、MCU 板卡 |
| TI DP83867 / DP83848 | RGMII、SGMII / MII、RMII | 工业设备 |
| Broadcom BCM54xxx | RGMII、SGMII、QSGMII | 企业级交换机(四路/八路 PHY) |
| Marvell 88E1543 / 88E1548 | QSGMII 四路 | 48 口接入交换机 |
按接口分类的故障
| 现象 | 接口 | 原因 |
|---|---|---|
| 从不建立链路,PHY ID 读取正常 | RMII | REF_CLK 方向/来源不匹配 |
| 100M 正常,1G 无流量 / CRC 错误 | RGMII | 延迟模式(ID)错误或重复添加 |
| PHY 指示灯显示链路建立,MAC 显示断开 | RGMII/SGMII | 一侧禁用了带内状态,或缺少 MDIO 轮询 |
| 1G 下丢失一半数据包 | GMII/RGMII | 走线长度偏斜、电压电平错误 |
| MDIO 上找不到 PHY | 任意 | PHY 地址错误(strap 引脚)、缺少 MDIO 上拉 |
| 速率停留在 10/100 | 任意 | AN 通告寄存器受限、线缆问题,或 phy-mode 不支持 1G |
在 CodingBox 中
本页内容都不经过模块的 EEPROM——铜缆 SFP 除外,其内部 PHY(通常是 88E1111 类芯片)位于 CodingBox 所读取的同一条 I²C 之后。当铜缆模块在 1G 下工作但 10/100 不工作时,原因在于该 PHY 的配置和主机的 SGMII/1000BASE-X 模式,而不在 A0h 身份字节中(参见铜缆以太网与 DAC、 SGMII 与串行千兆)。