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-txidrgmii-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 eth0phytool read eth0/1/0ethtool eth0;驅動通過 phylibphylinkphytool 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 身份位元組中(參見銅纜以太網與 DACSGMII 與串行千兆)。


如果您發現本文有不準確之處或錯誤,請選取相應片段並按 Ctrl+Enter,即可