MII, RMII, GMII, RGMII: interfejsy równoległe do PHY
Równoległe interfejsy niezależne od medium łączą MAC z miedzianym układem PHY na dystansie kilku centymetrów ścieżek PCB — wewnątrz routerów, małych przełączników, punktów dostępowych, sterowników przemysłowych i każdej płytki wbudowanej z RJ45. Nigdy nie docierają do klatki transceivera, ale są punktem odniesienia dla wszystkiego, co do niej dociera: SGMII to „GMII zserializowane”, XGMII to „GMII przy 10G”, a PHY wewnątrz miedzianego SFP wewnętrznie posługuje się jednym z nich. Ta strona podaje piny, zegary i wymagania czasowe dla MII, RMII, GMII i RGMII, problem opóźnienia RGMII, status in-band, zarządzanie MDIO oraz usterki, jakie generuje każdy interfejs.
MII (IEEE 802.3 Clause 22)
| Pozycja | Wartość |
|---|---|
| Szybkości | 10 i 100 Mb/s |
| Dane | 4-bitowe TXD[3:0], 4-bitowe RXD[3:0] |
| Zegary | TX_CLK i RX_CLK od PHY: 25 MHz (100M), 2,5 MHz (10M) |
| Sterowanie | TX_EN, TX_ER, RX_DV, RX_ER, CRS (wykrywanie nośnej), COL (kolizja) |
| Zarządzanie | MDC, MDIO (współdzielone) |
| Liczba sygnałów | 16 dane/sterowanie + 2 zarządzanie |
| Poziomy | 5 V / 3,3 V TTL |
| Zasięg | kilka cm; jeden PHY na MAC |
Wciąż spotykany w mikrokontrolerach i FPGA; wyparty przez RMII ze względu na liczbę pinów.
RMII (specyfikacja RMII Consortium v1.2)
| Pozycja | Wartość |
|---|---|
| Szybkości | 10 i 100 Mb/s |
| Dane | 2-bitowe TXD[1:0], RXD[1:0] |
| Zegar | pojedynczy REF_CLK 50 MHz, współdzielony przez MAC i PHY; źródłem jest oscylator, MAC albo PHY (tryb PHY-clock-out) |
| Sterowanie | TX_EN, CRS_DV (wykrywanie nośnej + ważność danych multipleksowane), RX_ER (opcjonalny) |
| Liczba sygnałów | 7–9 |
| Tryb 10 Mb/s | każdy nibble powielony 10× przy 50 MHz |
| Zasięg | cm |
Topologia zegara odniesienia 50 MHz to klasyczny błąd RMII: PHY oczekujący zegara zewnętrznego, podczas gdy SoC oczekuje, że to PHY będzie go generować, daje martwy interfejs przy zdrowej diodzie łącza.
GMII (Clause 35)
| Pozycja | Wartość |
|---|---|
| Szybkości | 1000 Mb/s; przy 10/100 wraca do sygnalizacji MII |
| Dane | 8-bitowe TXD[7:0], RXD[7:0] |
| Zegary | GTX_CLK 125 MHz od MAC dla nadawania; RX_CLK 125 MHz od PHY dla odbioru; TX_CLK od PHY używany tylko przy fallbacku do 10/100 |
| Sterowanie | TX_EN, TX_ER, RX_DV, RX_ER, CRS, COL |
| Liczba sygnałów | 24 + zarządzanie |
| Poziomy | 2,5 V (wiele toleruje 3,3 V) |
| Zasięg | cm; budżet czasowy napięty przy 125 MHz single-data-rate |
Dziś to głównie interfejs on-chip albo FPGA; na płytkach jego miejsce zajęło RGMII.
RGMII (Reduced GMII, specyfikacja HP/Marvell v1.3 i v2.0)
| Pozycja | Wartość |
|---|---|
| Szybkości | 10/100/1000 |
| Dane | 4-bitowe TXD[3:0] i RXD[3:0] double data rate: młodszy nibble na zboczu narastającym, starszy na opadającym |
| Zegary | TXC 125 MHz (od MAC), RXC 125 MHz (od PHY); 25 / 2,5 MHz dla 100M / 10M |
| Sterowanie | TX_CTL (TX_EN na zboczu narastającym, TX_EN xor TX_ER na opadającym), RX_CTL (RX_DV / RX_DV xor RX_ER) |
| Liczba sygnałów | 12 |
| Poziomy | 2,5 V (v1.3), 1,5 V HSTL albo 1,8 V (opcja v2.0); 3,3 V na niektórych PHY |
| Zasięg | ≤ 10–15 cm, ścieżki o dopasowanej długości |
Problem opóźnienia
RGMII wymaga, żeby zegar docierał do odbiornika 1,5–2,0 ns po zboczach danych (okno setup/hold). Trzy sposoby, żeby to uzyskać:
| Tryb | Kto dodaje opóźnienie | phy-mode w device tree | Uwagi |
|---|---|---|---|
| Opóźnienie na PCB (v1.3) | ~5 cm dodatkowej ścieżki zegara | rgmii | klasyczne, kruche |
| Opóźnienie wewnętrzne w PHY (RGMII-ID, v2.0) | PHY dodaje 2 ns na zegarach TX i RX | rgmii-id | dziś najczęstsze |
| Opóźnienie wewnętrzne w MAC/SoC | dodaje je SoC | rgmii z rejestrem opóźnienia po stronie MAC | — |
| Mieszane | PHY tylko w jednym kierunku | rgmii-txid, rgmii-rxid | gdy tylko jedna strona to obsługuje |
Dodanie opóźnienia dwukrotnie (PCB i PHY) albo wcale daje charakterystyczną usterkę RGMII: łącze aktywne przy 1G z błędami CRC albo bez ruchu, podczas gdy 100M działa (100M ma okres 40 ns i toleruje przesunięcie). Napraw, zmieniając rejestr opóźnienia PHY albo phy-mode.
Status in-band
W stanie bezczynności PHY wystawia stan łącza, prędkość i dupleks na RXD[3:0], dzięki czemu MAC może przekonfigurować swój dzielnik zegara bez odczytu MDIO: RXD[0] łącze, RXD[2:1] prędkość (00 = 10, 01 = 100, 10 = 1000), RXD[3] dupleks. Niektóre MAC to ignorują i polegają na odpytywaniu MDIO; niezgodne oczekiwania dają łącze aktywne na PHY, a nieaktywne na MAC.
TBI i RTBI
Ten-Bit Interface (interfejs dziesięciobitowy): zakodowane w 8b/10b symbole 1000BASE-X (10 bitów przy 125 MHz, RTBI w DDR z 5 bitami) między MAC/PCS a zewnętrznym SerDes albo optycznym PHY. Przestarzały na płytkach; jego szeregowym następcą jest 1000BASE-X/SGMII (SGMII i szeregowy gigabit).
Porównanie
| Interfejs | Piny (dane + sterowanie) | Zegar | Maks. szybkość | Napięcie | Typowe zastosowanie |
|---|---|---|---|---|---|
| MII | 16 | 25 MHz od PHY | 100M | 3,3/5 V | MCU, starsze rozwiązania |
| RMII | 7–9 | 50 MHz współdzielony | 100M | 3,3 V | wbudowany SoC + PHY |
| SMII | 2–3/port | 125 MHz | 100M | 3,3 V | PHY wieloportowe (Cisco) |
| GMII | 24 | 125 MHz (MAC tx / PHY rx) | 1G | 2,5 V | FPGA, on-chip |
| RGMII | 12 | 125 MHz DDR | 1G | 2,5/1,8/1,5 V | SoC ↔ PHY na płytkach |
| SGMII | 4 (2 pary) | 1,25 GBd wbudowany | 1G (10/100 przez powielanie) | CML | SoC ↔ PHY, klatki SFP |
Zarządzanie PHY: MDIO/MDC
| Pozycja | Clause 22 | Clause 45 |
|---|---|---|
| Adresowanie | 5-bitowy adres PHY, 5-bitowy rejestr (32 rejestry) | 5-bitowy port, 5-bitowe urządzenie (PMA/PMD, PCS, PHY XS, DTE XS, AN, vendor), 16-bitowy rejestr |
| Kluczowe rejestry | 0 sterowanie (reset, prędkość, włączenie AN, loopback), 1 status (łącze, AN zakończone), 2–3 PHY ID (OUI + model), 4 zgłoszenie AN, 5 zdolności partnera łącza, 9/10 sterowanie/status 1000BASE-T, 17+ producenta (opóźnienie RGMII, diody LED) | 1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x producenta |
| Prędkość | MDC ≤ 2,5 MHz (w praktyce często szybciej) | tak samo |
| Narzędzia Linuksa | mii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; sterownik przez phylib, phylink | phytool read eth0/1:1/0 |
W przeciwieństwie do modułów wpinanych, którymi zarządza się przez I²C, a nie MDIO (Interfejs dwuprzewodowy). Wyjątkiem jest wewnętrzny PHY miedzianego SFP: jego rejestry MDIO są w wielu konstrukcjach dostępne przez I²C modułu pod drugim adresem, i tak właśnie producenci ustawiają zachowanie fallbacku 10/100 i autonegocjacji.
Popularne PHY i ich interfejsy
| Rodzina PHY | Interfejsy | Typowa płytka |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII, RGMII, SGMII, TBI | routery, miedziane moduły SFP (88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | SBC, routery konsumenckie |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | przemysłowe, płytki MCU |
| TI DP83867 / DP83848 | RGMII, SGMII / MII, RMII | przemysłowe |
| Broadcom BCM54xxx | RGMII, SGMII, QSGMII | przełączniki enterprise (poczwórne/ośmiokrotne PHY) |
| Marvell 88E1543 / 88E1548 | QSGMII poczwórny | 48-portowe przełączniki dostępowe |
Usterki według interfejsu
| Objaw | Interfejs | Przyczyna |
|---|---|---|
| Łącze nigdy się nie podnosi, PHY ID odczytuje się poprawnie | RMII | niezgodność kierunku/źródła REF_CLK |
| 100M działa, 1G brak ruchu / CRC | RGMII | zły albo podwójny tryb opóźnienia (ID) |
| Dioda łącza na PHY aktywna, MAC pokazuje brak łącza | RGMII/SGMII | status in-band wyłączony po jednej stronie albo brak odpytywania MDIO |
| Połowa pakietów gubiona przy 1G | GMII/RGMII | przesunięcie długości ścieżek, zły poziom napięcia |
| PHY niewidoczny na MDIO | dowolny | zły adres PHY (piny strapujące), brak pull-upu na MDIO |
| Prędkość zablokowana na 10/100 | dowolny | ograniczony rejestr zgłoszenia AN, kabel albo phy-mode bez obsługi 1G |
W CodingBox
Nic na tej stronie nie przechodzi przez EEPROM modułu — z wyjątkiem miedzianego SFP, którego wewnętrzny PHY (zwykle układ klasy 88E1111) siedzi za tym samym I²C, które odczytuje CodingBox. Gdy miedziany moduł działa przy 1G, ale nie przy 10/100, odpowiedź leży w konfiguracji tego PHY i trybie SGMII/1000BASE-X hosta, a nie w bajtach danych identyfikacyjnych A0h (Miedziany Ethernet i DAC, SGMII i szeregowy gigabit).