MII, RMII, GMII, RGMII: parallele Schnittstellen zum PHY
Die parallelen medienunabhängigen Schnittstellen verbinden einen MAC mit einem Kupfer-PHY-Chip über eine Handvoll Zentimeter Leiterplatte — in Routern, kleinen Switches, Access Points, Industriesteuerungen und jedem eingebetteten Board mit einem RJ45. Sie erreichen nie einen Transceiver-Käfig, sind aber der Bezugspunkt für alles, was es dorthin schafft: SGMII ist „serialisiertes GMII“, XGMII ist „GMII bei 10G“, und der PHY in einem Kupfer-SFP spricht intern eine von ihnen. Diese Seite nennt Pins, Takte und Timing für MII, RMII, GMII und RGMII, das RGMII-Delay-Problem, In-Band-Status, MDIO-Management und die Fehler, die jede Schnittstelle erzeugt.
MII (IEEE 802.3 Clause 22)
| Punkt | Wert |
|---|---|
| Raten | 10 und 100 Mb/s |
| Daten | 4-Bit TXD[3:0], 4-Bit RXD[3:0] |
| Takte | TX_CLK und RX_CLK vom PHY: 25 MHz (100M), 2,5 MHz (10M) |
| Steuerung | TX_EN, TX_ER, RX_DV, RX_ER, CRS (Carrier Sense), COL (Kollision) |
| Management | MDC, MDIO (gemeinsam genutzt) |
| Signalanzahl | 16 Daten/Steuerung + 2 Management |
| Pegel | 5 V/3,3 V TTL |
| Reichweite | wenige cm; ein PHY pro MAC |
Noch auf Mikrocontrollern und FPGAs zu finden; bei der Pin-Anzahl von RMII abgelöst.
RMII (RMII-Consortium-Spezifikation v1.2)
| Punkt | Wert |
|---|---|
| Raten | 10 und 100 Mb/s |
| Daten | 2-Bit TXD[1:0], RXD[1:0] |
| Takt | ein einzelner REF_CLK 50 MHz, gemeinsam genutzt von MAC und PHY; erzeugt von einem Oszillator, dem MAC oder dem PHY (Modus PHY-Clock-Out) |
| Steuerung | TX_EN, CRS_DV (Carrier Sense + Data Valid gemultiplext), RX_ER (optional) |
| Signalanzahl | 7–9 |
| 10-Mb/s-Modus | jedes Nibble wird bei 50 MHz 10× wiederholt |
| Reichweite | cm |
Die 50-MHz-Referenztakt-Topologie ist der klassische RMII-Bug: Erwartet ein PHY einen externen Takt, während das SoC erwartet, dass der PHY ihn liefert, ergibt das eine tote Schnittstelle bei gesunder Link-LED.
GMII (Clause 35)
| Punkt | Wert |
|---|---|
| Raten | 1000 Mb/s; fällt für 10/100 auf MII-Signalisierung zurück |
| Daten | 8-Bit TXD[7:0], RXD[7:0] |
| Takte | GTX_CLK 125 MHz vom MAC für Transmit; RX_CLK 125 MHz vom PHY für Receive; TX_CLK vom PHY nur im 10/100-Fallback verwendet |
| Steuerung | TX_EN, TX_ER, RX_DV, RX_ER, CRS, COL |
| Signalanzahl | 24 + Management |
| Pegel | 2,5 V (bei vielen 3,3-V-tolerant) |
| Reichweite | cm; Timing-Budget bei 125 MHz Single-Data-Rate eng |
Heute meist eine On-Chip- oder FPGA-Schnittstelle; auf Boards hat RGMII ihren Platz eingenommen.
RGMII (Reduced GMII, HP/Marvell-Spezifikation v1.3 und v2.0)
| Punkt | Wert |
|---|---|
| Raten | 10/100/1000 |
| Daten | 4-Bit TXD[3:0] und RXD[3:0] Double Data Rate: niedriges Nibble bei steigender Flanke, hohes Nibble bei fallender Flanke |
| Takte | TXC 125 MHz (vom MAC), RXC 125 MHz (vom PHY); 25/2,5 MHz für 100M/10M |
| Steuerung | TX_CTL (TX_EN bei steigender Flanke, TX_EN XOR TX_ER bei fallender), RX_CTL (RX_DV / RX_DV XOR RX_ER) |
| Signalanzahl | 12 |
| Pegel | 2,5 V (v1.3), 1,5 V HSTL oder 1,8 V (Option v2.0); bei manchen PHYs 3,3 V |
| Reichweite | ≤ 10–15 cm längenangepasste Leiterbahnen |
Das Delay-Problem
RGMII verlangt, dass der Takt beim Empfänger 1,5–2,0 ns nach den Datenflanken eintrifft (Setup-/Hold-Fenster). Drei Wege, das zu erreichen:
| Modus | Wer fügt das Delay hinzu | Device-Tree phy-mode | Hinweise |
|---|---|---|---|
| PCB-Delay (v1.3) | ~5 cm zusätzliche Taktleiterbahn | rgmii | klassisch, fragil |
| Internes Delay im PHY (RGMII-ID, v2.0) | PHY fügt 2 ns auf TX- und RX-Takt hinzu | rgmii-id | heute am häufigsten |
| Internes Delay in MAC/SoC | SoC fügt es hinzu | rgmii mit Delay-Register auf der MAC-Seite | — |
| Gemischt | PHY nur in einer Richtung | rgmii-txid, rgmii-rxid | wenn nur eine Seite es unterstützt |
Das Delay zweimal hinzuzufügen (PCB und PHY) oder gar nicht erzeugt den typischen RGMII-Fehler: Link bei 1G oben mit CRC-Fehlern oder ohne Traffic, während 100M funktioniert (100M hat eine Periode von 40 ns und toleriert den Versatz). Beheben durch Ändern des Delay-Registers im PHY oder des phy-mode.
In-Band-Status
Im Leerlauf legt der PHY Link, Speed und Duplex auf RXD[3:0], damit der MAC seinen Taktteiler ohne MDIO-Lesevorgang neu konfigurieren kann: RXD[0] Link, RXD[2:1] Speed (00 = 10, 01 = 100, 10 = 1000), RXD[3] Duplex. Manche MACs ignorieren das und verlassen sich auf MDIO-Polling; widersprüchliche Erwartungen ergeben einen Link, der am PHY oben und am MAC unten ist.
TBI und RTBI
Ten-Bit Interface: die 8b/10b-kodierten 1000BASE-X-Symbole (10 Bit bei 125 MHz, RTBI im DDR-Modus mit 5 Bit) zwischen einem MAC/PCS und einem externen SerDes oder optischen PHY. Auf Boards veraltet; sein serieller Nachfolger ist 1000BASE-X/SGMII (SGMII & serielles Gigabit).
Vergleich
| Schnittstelle | Pins (Daten + Steuerung) | Takt | Max. Rate | Spannung | Typische Nutzung |
|---|---|---|---|---|---|
| MII | 16 | 25 MHz vom PHY | 100M | 3,3/5 V | MCUs, Legacy |
| RMII | 7–9 | 50 MHz gemeinsam genutzt | 100M | 3,3 V | eingebettetes SoC + PHY |
| SMII | 2–3/Port | 125 MHz | 100M | 3,3 V | Multiport-PHYs (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 auf Boards |
| SGMII | 4 (2 Paare) | 1,25 GBd eingebettet | 1G (10/100 per Replikation) | CML | SoC ↔ PHY, SFP-Käfige |
PHY-Management: MDIO/MDC
| Punkt | Clause 22 | Clause 45 |
|---|---|---|
| Adressierung | 5-Bit-PHY-Adresse, 5-Bit-Register (32 Register) | 5-Bit-Port, 5-Bit-Device (PMA/PMD, PCS, PHY XS, DTE XS, AN, Vendor), 16-Bit-Register |
| Schlüsselregister | 0 Control (Reset, Speed, AN-Enable, Loopback), 1 Status (Link, AN Complete), 2–3 PHY-ID (OUI + Modell), 4 AN-Advertisement, 5 Link-Partner-Ability, 9/10 1000BASE-T Control/Status, 17+ Vendor (RGMII-Delay, LEDs) | 1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x Vendor |
| Geschwindigkeit | MDC ≤ 2,5 MHz (in der Praxis oft schneller) | gleich |
| Linux-Tools | mii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; Treiber über phylib, phylink | phytool read eth0/1:1/0 |
Im Gegensatz dazu werden steckbare Module über I²C verwaltet, nicht über MDIO (Zweidraht-Schnittstelle). Der interne PHY eines Kupfer-SFP ist die Ausnahme: Seine MDIO-Register sind bei vielen Designs über das I²C des Moduls unter einer sekundären Adresse erreichbar, worüber Hersteller das 10/100-Fallback- und Autonegotiation-Verhalten einstellen.
Gängige PHYs und ihre Schnittstellen
| PHY-Familie | Schnittstellen | Typisches Board |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII, RGMII, SGMII, TBI | Router, Kupfer-SFP-Module (88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | SBCs, Consumer-Router |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | industriell, MCU-Boards |
| TI DP83867 / DP83848 | RGMII, SGMII / MII, RMII | industriell |
| Broadcom BCM54xxx | RGMII, SGMII, QSGMII | Enterprise-Switches (Quad-/Oktal-PHYs) |
| Marvell 88E1543 / 88E1548 | QSGMII Quad | 48-Port-Access-Switches |
Fehler nach Schnittstelle
| Symptom | Schnittstelle | Ursache |
|---|---|---|
| Nie ein Link, PHY-ID liest korrekt | RMII | REF_CLK-Richtung/-Quelle stimmt nicht |
| 100M funktioniert, bei 1G kein Traffic/CRC | RGMII | Delay-Modus (ID) falsch oder doppelt |
| Link an der PHY-LED oben, MAC meldet unten | RGMII/SGMII | In-Band-Status auf einer Seite deaktiviert, oder MDIO-Polling fehlt |
| Hälfte der Pakete bei 1G verloren | GMII/RGMII | Versatz durch Leiterbahnlänge, falscher Spannungspegel |
| PHY nicht auf MDIO gefunden | beliebig | falsche PHY-Adresse (Strapping-Pins), MDIO-Pull-up fehlt |
| Geschwindigkeit bei 10/100 hängengeblieben | beliebig | AN-Advertisement-Register eingeschränkt, Kabel, oder phy-mode ohne 1G-Unterstützung |
In CodingBox
Nichts auf dieser Seite läuft über das EEPROM des Moduls — außer dem Kupfer-SFP, dessen interner PHY (typischerweise ein Bauteil der 88E1111-Klasse) hinter demselben I²C sitzt, das CodingBox liest. Funktioniert ein Kupfermodul bei 1G, aber nicht bei 10/100, liegt die Antwort in der Konfiguration dieses PHY und im SGMII-/1000BASE-X-Modus des Hosts, nicht in den A0h-Identitätsbytes (Kupfer-Ethernet & DAC, SGMII & serielles Gigabit).