MII、RMII、GMII、RGMII:连接 PHY 的并行接口 · 电接口:MII 系列与 AUI · 网卡与交换机 · 文档 · CodingBox
CodingBox 文档

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 nsrgmii-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 与串行千兆)。

对比

接口引脚(数据 + 控制)时钟最高速率电压典型用途
MII16来自 PHY 的 25 MHz100M3.3/5 VMCU、旧式设备
RMII7–9共用 50 MHz100M3.3 V嵌入式 SoC + PHY
SMII每端口 2–3125 MHz100M3.3 V多端口 PHY(Cisco)
GMII24125 MHz(MAC 发送 / PHY 接收)1G2.5 VFPGA、片内
RGMII12125 MHz DDR1G2.5/1.8/1.5 V板卡上的 SoC ↔ PHY
SGMII4(2 对)内嵌 1.25 GBd1G(10/100 通过复制实现)CMLSoC ↔ PHY、SFP 笼子

PHY 管理:MDIO/MDC

项目Clause 22Clause 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、phylinkphytool read eth0/1:1/0

与之相对,可插拔模块通过 I²C 而非 MDIO 管理(参见双线接口)。铜缆 SFP 内部的 PHY 是例外:在许多设计中,其 MDIO 寄存器可通过模块 I²C 的第二地址访问,厂商正是借此设置 10/100 回退和自动协商行为。

常见 PHY 及其接口

PHY 系列接口典型板卡
Marvell 88E1111 / 88E1512 / 88E1510GMII、RGMII、SGMII、TBI路由器、铜缆 SFP 模块(88E1111)
Realtek RTL8211F / RTL8201RGMII / RMII单板计算机、消费级路由器
Microchip KSZ9031 / KSZ8081 / LAN8720RGMII / RMII / RMII工业设备、MCU 板卡
TI DP83867 / DP83848RGMII、SGMII / MII、RMII工业设备
Broadcom BCM54xxxRGMII、SGMII、QSGMII企业级交换机(四路/八路 PHY)
Marvell 88E1543 / 88E1548QSGMII 四路48 口接入交换机

按接口分类的故障

现象接口原因
从不建立链路,PHY ID 读取正常RMIIREF_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 与串行千兆)。


如果您发现本资料中有不准确之处或错误,请选中相应片段并按 Ctrl+Enter,即可。