MII, RMII, GMII, RGMII: parallelle interfaces naar de PHY
De parallelle mediaonafhankelijke interfaces verbinden een MAC met een koperen PHY-chip over enkele centimeters PCB, in routers, kleine switches, accesspoints, industriële controllers en elk embedded board met een RJ45. Ze bereiken nooit een transceivercage, maar zijn wel het referentiepunt voor alles wat dat doet: SGMII is ‘geserialiseerde GMII’, XGMII is ‘GMII op 10G’ en de PHY in een koperen SFP spreekt er intern een van. Deze pagina beschrijft pinnen, klokken en timing voor MII, RMII, GMII en RGMII, het RGMII-vertragingsprobleem, in-bandstatus, MDIO-beheer en de storingen die elke interface veroorzaakt.
MII (IEEE 802.3 Clause 22)
| Onderdeel | Waarde |
|---|---|
| Snelheden | 10 en 100 Mb/s |
| Data | 4-bit TXD[3:0], 4-bit RXD[3:0] |
| Klokken | TX_CLK en RX_CLK van de PHY: 25 MHz (100M), 2,5 MHz (10M) |
| Besturing | TX_EN, TX_ER, RX_DV, RX_ER, CRS (carrier sense), COL (collision) |
| Beheer | MDC, MDIO (gedeeld) |
| Aantal signalen | 16 data/besturing + 2 beheer |
| Niveaus | 5 V / 3,3 V TTL |
| Bereik | enkele cm; één PHY per MAC |
Komt nog voor op microcontrollers en FPGA's; voor het aantal pinnen vervangen door RMII.
RMII (RMII Consortium spec v1.2)
| Onderdeel | Waarde |
|---|---|
| Snelheden | 10 en 100 Mb/s |
| Data | 2-bit TXD[1:0], RXD[1:0] |
| Klok | enkele REF_CLK 50 MHz, gedeeld door MAC en PHY; geleverd door oscillator, MAC of PHY (PHY-clock-outmodus) |
| Besturing | TX_EN, CRS_DV (carrier sense + data valid gemultiplext), RX_ER (optioneel) |
| Aantal signalen | 7–9 |
| 10 Mb/s-modus | elke nibble 10× herhaald bij 50 MHz |
| Bereik | cm |
De topologie met referentieklok van 50 MHz is de klassieke RMII-fout: een PHY die een externe klok verwacht terwijl de SoC verwacht dat de PHY die aanstuurt, geeft een dode interface met een gezonde link-LED.
GMII (Clause 35)
| Onderdeel | Waarde |
|---|---|
| Snelheden | 1000 Mb/s; valt terug op MII-signalering voor 10/100 |
| Data | 8-bit TXD[7:0], RXD[7:0] |
| Klokken | GTX_CLK 125 MHz van de MAC voor zenden; RX_CLK 125 MHz van de PHY voor ontvangen; TX_CLK van de PHY alleen bij 10/100-terugval |
| Besturing | TX_EN, TX_ER, RX_DV, RX_ER, CRS, COL |
| Aantal signalen | 24 + beheer |
| Niveaus | 2,5 V (bij veel tolerant voor 3,3 V) |
| Bereik | cm; timingbudget krap bij 125 MHz single-data-rate |
Tegenwoordig vooral een on-chip- of FPGA-interface; RGMII nam op boards zijn plaats in.
RGMII (Reduced GMII, HP/Marvell specification v1.3 en v2.0)
| Onderdeel | Waarde |
|---|---|
| Snelheden | 10/100/1000 |
| Data | 4-bit TXD[3:0] en RXD[3:0] double data rate: lage nibble op stijgende flank, hoge nibble op dalende flank |
| Klokken | TXC 125 MHz (van MAC), RXC 125 MHz (van PHY); 25 / 2,5 MHz voor 100M / 10M |
| Besturing | TX_CTL (TX_EN op stijgende flank, TX_EN xor TX_ER op dalende), RX_CTL (RX_DV / RX_DV xor RX_ER) |
| Aantal signalen | 12 |
| Niveaus | 2,5 V (v1.3), 1,5 V HSTL of 1,8 V (v2.0-optie); 3,3 V op sommige PHY's |
| Bereik | ≤ 10–15 cm traces met gelijke lengte |
Het vertragingsprobleem
RGMII vereist dat de klok 1,5–2,0 ns na de dataflanken bij de ontvanger arriveert (setup/hold-venster). Dit kan op drie manieren:
| Modus | Wie voegt de vertraging toe | Device-tree phy-mode | Opmerkingen |
|---|---|---|---|
| PCB-vertraging (v1.3) | ~5 cm extra kloktrace | rgmii | klassiek, kwetsbaar |
| Interne vertraging in PHY (RGMII-ID, v2.0) | PHY voegt 2 ns toe aan TX- en RX-klokken | rgmii-id | tegenwoordig het meest gebruikelijk |
| Interne vertraging in MAC/SoC | SoC voegt deze toe | rgmii met register voor vertraging aan MAC-zijde | — |
| Gemengd | PHY in slechts één richting | rgmii-txid, rgmii-rxid | wanneer slechts één zijde dit ondersteunt |
De vertraging tweemaal toevoegen (PCB en PHY) of helemaal niet geeft de kenmerkende RGMII-storing: link up bij 1G met CRC-fouten of zonder verkeer, terwijl 100M werkt (100M heeft een periode van 40 ns en verdraagt de skew). Los dit op door het vertragingsregister van de PHY of de phy-mode te wijzigen.
In-bandstatus
Wanneer de interface inactief is, stuurt de PHY link, snelheid en duplex op RXD[3:0], zodat de MAC zijn klokdeler zonder MDIO-leesactie kan herconfigureren: RXD[0] link, RXD[2:1] snelheid (00 = 10, 01 = 100, 10 = 1000), RXD[3] duplex. Sommige MAC's negeren dit en gebruiken MDIO-polling; niet-overeenkomende verwachtingen geven een link die op de PHY up en op de MAC down is.
TBI en RTBI
Ten-Bit Interface: de 8b/10b-gecodeerde 1000BASE-X-symbolen (10 bits bij 125 MHz, RTBI met 5 bits bij DDR) tussen een MAC/PCS en een externe SerDes of optische PHY. Verouderd op boards; zijn seriële opvolger is 1000BASE-X/SGMII (SGMII & seriële gigabit).
Vergelijking
| Interface | Pinnen (data + ctrl) | Klok | Max. snelheid | Spanning | Gebruikelijk gebruik |
|---|---|---|---|---|---|
| MII | 16 | 25 MHz van PHY | 100M | 3,3/5 V | MCU's, legacy |
| RMII | 7–9 | 50 MHz gedeeld | 100M | 3,3 V | embedded SoC + PHY |
| SMII | 2–3/poort | 125 MHz | 100M | 3,3 V | multiport-PHY's (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 op boards |
| SGMII | 4 (2 paren) | 1,25 GBd ingebed | 1G (10/100 door replicatie) | CML | SoC ↔ PHY, SFP-cages |
PHY-beheer: MDIO/MDC
| Onderdeel | Clause 22 | Clause 45 |
|---|---|---|
| Adressering | 5-bit PHY-adres, 5-bit register (32 registers) | 5-bit poort, 5-bit apparaat (PMA/PMD, PCS, PHY XS, DTE XS, AN, fabrikant), 16-bit register |
| Belangrijke registers | 0 besturing (reset, snelheid, AN inschakelen, loopback), 1 status (link, AN voltooid), 2–3 PHY-ID (OUI + model), 4 AN-advertentie, 5 linkpartnercapaciteit, 9/10 1000BASE-T-besturing/status, 17+ fabrikant (RGMII-vertraging, LED's) | 1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x fabrikant |
| Snelheid | MDC ≤ 2,5 MHz (in de praktijk vaak sneller) | zelfde |
| Linux-tools | mii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; driver via phylib, phylink | phytool read eth0/1:1/0 |
Dit verschilt van insteekmodules, die via I²C en niet MDIO worden beheerd (Tweedraadsinterface). De interne PHY van een koperen SFP is de uitzondering: bij veel ontwerpen zijn zijn MDIO-registers via I²C op een secundair adres door de module bereikbaar. Zo stellen fabrikanten 10/100-terugval en autonegotiatiegedrag in.
Gangbare PHY's en hun interfaces
| PHY-familie | Interfaces | Typisch board |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII, RGMII, SGMII, TBI | routers, koperen SFP-modules (88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | SBC's, consumentenrouters |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | industrieel, MCU-boards |
| TI DP83867 / DP83848 | RGMII, SGMII / MII, RMII | industrieel |
| Broadcom BCM54xxx | RGMII, SGMII, QSGMII | enterprise-switches (quad/octal-PHY's) |
| Marvell 88E1543 / 88E1548 | QSGMII quad | access-switches met 48 poorten |
Storingen per interface
| Symptoom | Interface | Oorzaak |
|---|---|---|
| Nooit link, PHY-ID leest goed | RMII | richting/bron van REF_CLK komt niet overeen |
| 100M werkt, 1G geen verkeer / CRC | RGMII | vertragingsmodus (ID) onjuist of dubbel |
| Link up op PHY-LED, MAC zegt down | RGMII/SGMII | in-bandstatus aan één zijde uitgeschakeld, of MDIO-polling ontbreekt |
| Helft van pakketten verloren bij 1G | GMII/RGMII | skew van tracelengte, verkeerd spanningsniveau |
| PHY niet gevonden op MDIO | alle | verkeerd PHY-adres (strapping-pinnen), MDIO-pull-up ontbreekt |
| Snelheid blijft op 10/100 | alle | AN-advertentieregister beperkt, kabel, of phy-mode zonder 1G-ondersteuning |
In CodingBox
Niets op deze pagina loopt via de EEPROM van de module, behalve de koperen SFP, waarvan de interne PHY (doorgaans een onderdeel uit de 88E1111-klasse) zich achter dezelfde I²C bevindt die CodingBox leest. Wanneer een koperen module op 1G werkt maar niet op 10/100, ligt het antwoord in de configuratie van die PHY en de SGMII/1000BASE-X-modus van de host, niet in de identiteitsbytes van A0h (Koper en DAC, SGMII & seriële gigabit).