MII, RMII, GMII, RGMII: giao diện song song tới PHY
Các giao diện độc lập với môi trường truyền dạng song song kết nối một MAC với một chip PHY đồng qua vài centimet đường mạch PCB — bên trong router, switch nhỏ, access point, bộ điều khiển công nghiệp và mọi board nhúng có cổng RJ45. Chúng không bao giờ chạm tới một cage transceiver, nhưng lại là điểm quy chiếu cho mọi thứ có chạm tới nó: SGMII là “GMII được nối tiếp hóa”, XGMII là “GMII ở 10G”, và PHY bên trong một SFP đồng nói một trong số các giao diện này ở bên trong. Trang này trình bày chân tín hiệu, xung nhịp và định thời cho MII, RMII, GMII và RGMII, vấn đề trễ của RGMII, trạng thái trong băng, quản lý qua MDIO, và các lỗi mà mỗi giao diện gây ra.
MII (IEEE 802.3 Clause 22)
| Mục | Giá trị |
|---|---|
| Tốc độ | 10 và 100 Mb/s |
| Dữ liệu | TXD[3:0] 4 bit, RXD[3:0] 4 bit |
| Xung nhịp | TX_CLK và RX_CLK từ PHY: 25 MHz (100M), 2,5 MHz (10M) |
| Điều khiển | TX_EN, TX_ER, RX_DV, RX_ER, CRS (dò sóng mang), COL (xung đột) |
| Quản lý | MDC, MDIO (dùng chung) |
| Số tín hiệu | 16 dữ liệu/điều khiển + 2 quản lý |
| Mức điện áp | 5 V / 3,3 V TTL |
| Cự ly | vài cm; một PHY cho mỗi MAC |
Vẫn còn xuất hiện trên vi điều khiển và FPGA; đã bị RMII thay thế nhờ số chân ít hơn.
RMII (đặc tả RMII Consortium v1.2)
| Mục | Giá trị |
|---|---|
| Tốc độ | 10 và 100 Mb/s |
| Dữ liệu | TXD[1:0] 2 bit, RXD[1:0] |
| Xung nhịp | một REF_CLK 50 MHz duy nhất, dùng chung giữa MAC và PHY; lấy từ một bộ dao động, từ MAC, hoặc từ PHY (chế độ PHY-clock-out) |
| Điều khiển | TX_EN, CRS_DV (dò sóng mang + dữ liệu hợp lệ ghép kênh), RX_ER (tùy chọn) |
| Số tín hiệu | 7–9 |
| Chế độ 10 Mb/s | mỗi nibble được lặp lại 10× ở 50 MHz |
| Cự ly | cm |
Cấu trúc xung nhịp tham chiếu 50 MHz chính là lỗi kinh điển của RMII: một PHY đang chờ xung nhịp từ bên ngoài trong khi SoC lại kỳ vọng chính PHY phải tạo ra xung nhịp đó sẽ cho ra một giao diện chết hoàn toàn dù đèn LED liên kết vẫn sáng bình thường.
GMII (Clause 35)
| Mục | Giá trị |
|---|---|
| Tốc độ | 1000 Mb/s; lùi về tín hiệu kiểu MII cho 10/100 |
| Dữ liệu | TXD[7:0] 8 bit, RXD[7:0] |
| Xung nhịp | GTX_CLK 125 MHz từ MAC cho chiều phát; RX_CLK 125 MHz từ PHY cho chiều thu; TX_CLK từ PHY chỉ dùng khi lùi về 10/100 |
| Điều khiển | TX_EN, TX_ER, RX_DV, RX_ER, CRS, COL |
| Số tín hiệu | 24 + quản lý |
| Mức điện áp | 2,5 V (chịu được 3,3 V trên nhiều chip) |
| Cự ly | cm; quỹ thời gian eo hẹp ở 125 MHz single-data-rate |
Ngày nay chủ yếu là một giao diện trên chip hoặc trong FPGA; RGMII đã thay thế vị trí của nó trên các board.
RGMII (Reduced GMII, đặc tả HP/Marvell v1.3 và v2.0)
| Mục | Giá trị |
|---|---|
| Tốc độ | 10/100/1000 |
| Dữ liệu | TXD[3:0] và RXD[3:0] 4 bit, double data rate: nibble thấp ở sườn lên, nibble cao ở sườn xuống |
| Xung nhịp | TXC 125 MHz (từ MAC), RXC 125 MHz (từ PHY); 25 / 2,5 MHz cho 100M / 10M |
| Điều khiển | TX_CTL (TX_EN ở sườn lên, TX_EN xor TX_ER ở sườn xuống), RX_CTL (RX_DV / RX_DV xor RX_ER) |
| Số tín hiệu | 12 |
| Mức điện áp | 2,5 V (v1.3), 1,5 V HSTL hoặc 1,8 V (tùy chọn v2.0); 3,3 V trên một số PHY |
| Cự ly | ≤ 10–15 cm, đường mạch đã cân chỉnh độ dài |
Vấn đề trễ
RGMII yêu cầu xung nhịp phải đến sau các sườn dữ liệu 1,5–2,0 ns tại phía thu (cửa sổ thời gian thiết lập/giữ). Có ba cách để đạt được điều đó:
| Chế độ | Ai thêm độ trễ | phy-mode trong device tree | Ghi chú |
|---|---|---|---|
| Trễ trên PCB (v1.3) | ~5 cm đường mạch xung nhịp thêm vào | rgmii | kiểu kinh điển, dễ hỏng |
| Trễ nội bộ trong PHY (RGMII-ID, v2.0) | PHY tự thêm 2 ns vào xung nhịp TX và RX | rgmii-id | phổ biến nhất hiện nay |
| Trễ nội bộ trong MAC/SoC | SoC tự thêm vào | rgmii với thanh ghi trễ phía MAC | — |
| Kết hợp | PHY chỉ thêm trễ ở một chiều | rgmii-txid, rgmii-rxid | khi chỉ một phía hỗ trợ |
Thêm trễ hai lần (cả PCB lẫn PHY) hoặc không thêm trễ nào cả sẽ gây ra lỗi đặc trưng của RGMII: liên kết lên ở 1G nhưng có lỗi CRC hoặc không có lưu lượng, trong khi 100M vẫn hoạt động bình thường (100M có chu kỳ 40 ns nên chịu được độ lệch). Khắc phục bằng cách đổi thanh ghi trễ của PHY hoặc đổi phy-mode.
Trạng thái trong băng
Khi rảnh, PHY đưa trạng thái liên kết, tốc độ và duplex lên RXD[3:0] để MAC có thể cấu hình lại bộ chia xung nhịp của mình mà không cần đọc MDIO: RXD[0] là liên kết, RXD[2:1] là tốc độ (00 = 10, 01 = 100, 10 = 1000), RXD[3] là duplex. Một số MAC bỏ qua thông tin này và dựa vào việc truy vấn định kỳ MDIO; khi hai bên kỳ vọng khác nhau sẽ tạo ra một liên kết mà PHY thấy up còn MAC thấy down.
TBI và RTBI
Ten-Bit Interface: các ký hiệu 1000BASE-X được mã hóa 8b/10b (10 bit ở 125 MHz, RTBI ở DDR với 5 bit) giữa một MAC/PCS và một SerDes hoặc PHY quang bên ngoài. Đã lỗi thời trên các board; hậu duệ dạng nối tiếp của nó là 1000BASE-X/SGMII (SGMII và serial gigabit).
So sánh
| Giao diện | Chân (dữ liệu + điều khiển) | Xung nhịp | Tốc độ tối đa | Điện áp | Nơi dùng phổ biến |
|---|---|---|---|---|---|
| MII | 16 | 25 MHz từ PHY | 100M | 3,3/5 V | MCU, thế hệ cũ |
| RMII | 7–9 | 50 MHz dùng chung | 100M | 3,3 V | SoC nhúng + PHY |
| SMII | 2–3/cổng | 125 MHz | 100M | 3,3 V | PHY đa cổng (Cisco) |
| GMII | 24 | 125 MHz (MAC tx / PHY rx) | 1G | 2,5 V | FPGA, trên chip |
| RGMII | 12 | 125 MHz DDR | 1G | 2,5/1,8/1,5 V | SoC ↔ PHY trên board |
| SGMII | 4 (2 cặp) | 1,25 GBd nhúng | 1G (10/100 bằng nhân bản) | CML | SoC ↔ PHY, cage SFP |
Quản lý PHY: MDIO/MDC
| Mục | Clause 22 | Clause 45 |
|---|---|---|
| Đánh địa chỉ | địa chỉ PHY 5 bit, thanh ghi 5 bit (32 thanh ghi) | cổng 5 bit, thiết bị 5 bit (PMA/PMD, PCS, PHY XS, DTE XS, AN, riêng của nhà sản xuất), thanh ghi 16 bit |
| Thanh ghi quan trọng | 0 control (reset, tốc độ, bật AN, loopback), 1 status (liên kết, AN hoàn tất), 2–3 PHY ID (OUI + model), 4 AN advertisement, 5 khả năng của link-partner, 9/10 control/status của 1000BASE-T, 17+ riêng của nhà sản xuất (trễ RGMII, đèn LED) | 1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x riêng của nhà sản xuất |
| Tốc độ | MDC ≤ 2,5 MHz (trong thực tế thường nhanh hơn) | như nhau |
| Công cụ Linux | mii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; driver qua phylib, phylink | phytool read eth0/1:1/0 |
Khác với module cắm rút, vốn được quản lý qua I²C chứ không phải MDIO (Giao diện hai dây). PHY bên trong của SFP đồng là trường hợp ngoại lệ: các thanh ghi MDIO của nó có thể truy cập được qua I²C của module ở một địa chỉ thứ hai trên nhiều thiết kế, đây chính là cách các nhà sản xuất đặt hành vi fallback 10/100 và tự động đàm phán.
Các PHY phổ biến và giao diện của chúng
| Họ PHY | Giao diện | Board tiêu biểu |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII, RGMII, SGMII, TBI | router, module SFP đồng (88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | SBC, router gia dụng |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | công nghiệp, board MCU |
| TI DP83867 / DP83848 | RGMII, SGMII / MII, RMII | công nghiệp |
| Broadcom BCM54xxx | RGMII, SGMII, QSGMII | switch doanh nghiệp (PHY quad/octal) |
| Marvell 88E1543 / 88E1548 | QSGMII quad | switch access 48 cổng |
Lỗi theo từng giao diện
| Triệu chứng | Giao diện | Nguyên nhân |
|---|---|---|
| Không bao giờ lên liên kết, đọc PHY ID vẫn bình thường | RMII | lệch hướng/nguồn REF_CLK |
| 100M hoạt động, 1G không có lưu lượng / lỗi CRC | RGMII | sai chế độ trễ (ID) hoặc bị nhân đôi |
| Đèn LED của PHY báo liên kết lên, MAC báo down | RGMII/SGMII | trạng thái trong băng bị tắt ở một phía, hoặc thiếu truy vấn định kỳ MDIO |
| Mất một nửa gói tin ở 1G | GMII/RGMII | lệch độ dài đường mạch, sai mức điện áp |
| Không tìm thấy PHY trên MDIO | bất kỳ | sai địa chỉ PHY (chân strap), thiếu điện trở pull-up cho MDIO |
| Tốc độ bị kẹt ở 10/100 | bất kỳ | thanh ghi AN advertisement bị giới hạn, do cáp, hoặc phy-mode không hỗ trợ 1G |
Trong CodingBox
Không có gì trên trang này đi qua EEPROM của module — ngoại trừ SFP đồng, có PHY bên trong (thường thuộc lớp 88E1111) nằm ngay sau cùng đường I²C mà CodingBox đọc. Khi một module đồng hoạt động ở 1G nhưng không hoạt động ở 10/100, câu trả lời nằm ở cấu hình của PHY đó và chế độ SGMII/1000BASE-X của host, chứ không nằm trong các byte nhận dạng ở A0h (Ethernet đồng và DAC, SGMII và serial gigabit).