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