MII, RMII, GMII, RGMII: interfacce parallele verso il PHY · Interfacce elettriche: famiglia MII e AUI · Schede di rete e switch · Documentazione · CodingBox
CodingBox Documentazione

MII, RMII, GMII, RGMII: interfacce parallele verso il PHY

Le interfacce parallele media-independent collegano un MAC a un chip PHY in rame lungo una manciata di centimetri di PCB — dentro router, piccoli switch, access point, controllori industriali e ogni scheda embedded con un RJ45. Non raggiungono mai una gabbia per ricetrasmettitori, ma sono il punto di riferimento per tutto ciò che lo fa: SGMII è «GMII serializzata», XGMII è «GMII a 10G», e il PHY dentro un SFP in rame ne parla una internamente. Questa pagina fornisce pin, clock e temporizzazioni per MII, RMII, GMII e RGMII, il problema del ritardo RGMII, lo stato in-band, la gestione MDIO e i guasti che produce ciascuna interfaccia.

MII (IEEE 802.3 Clause 22)

VoceValore
Rate10 e 100 Mb/s
DatiTXD[3:0] a 4 bit, RXD[3:0] a 4 bit
ClockTX_CLK e RX_CLK dal PHY: 25 MHz (100M), 2,5 MHz (10M)
ControlloTX_EN, TX_ER, RX_DV, RX_ER, CRS (carrier sense), COL (collision)
GestioneMDC, MDIO (condivisi)
Numero di segnali16 dati/controllo + 2 gestione
Livelli5 V / 3,3 V TTL
Portatapochi cm; un PHY per MAC

Ancora presente su microcontrollori e FPGA; soppiantata da RMII per il numero di pin.

RMII (specifica RMII Consortium v1.2)

VoceValore
Rate10 e 100 Mb/s
DatiTXD[1:0] a 2 bit, RXD[1:0]
Clockun solo REF_CLK 50 MHz, condiviso da MAC e PHY; generato da un oscillatore, dal MAC o dal PHY (modalità PHY-clock-out)
ControlloTX_EN, CRS_DV (carrier sense + data valid multiplexati), RX_ER (opzionale)
Numero di segnali7–9
Modalità 10 Mb/sogni nibble ripetuto 10× a 50 MHz
Portatacm

La topologia del clock di riferimento a 50 MHz è il classico bug di RMII: un PHY che si aspetta un clock esterno mentre il SoC si aspetta che sia il PHY a pilotarlo produce un’interfaccia morta con un LED di link acceso e funzionante.

GMII (Clause 35)

VoceValore
Rate1000 Mb/s; ripiega sulla segnalazione MII per 10/100
DatiTXD[7:0] a 8 bit, RXD[7:0]
ClockGTX_CLK 125 MHz dal MAC per la trasmissione; RX_CLK 125 MHz dal PHY per la ricezione; TX_CLK dal PHY usato solo nel fallback 10/100
ControlloTX_EN, TX_ER, RX_DV, RX_ER, CRS, COL
Numero di segnali24 + gestione
Livelli2,5 V (tollerante a 3,3 V su molti)
Portatacm; budget di temporizzazione stretto a 125 MHz single-data-rate

Oggi è perlopiù un’interfaccia on-chip o da FPGA; RGMII ne ha preso il posto sulle schede.

RGMII (Reduced GMII, specifica HP/Marvell v1.3 e v2.0)

VoceValore
Rate10/100/1000
DatiTXD[3:0] e RXD[3:0] a 4 bit a double data rate: nibble basso sul fronte di salita, nibble alto sul fronte di discesa
ClockTXC 125 MHz (dal MAC), RXC 125 MHz (dal PHY); 25 / 2,5 MHz per 100M / 10M
ControlloTX_CTL (TX_EN sul fronte di salita, TX_EN xor TX_ER su quello di discesa), RX_CTL (RX_DV / RX_DV xor RX_ER)
Numero di segnali12
Livelli2,5 V (v1.3), 1,5 V HSTL oppure 1,8 V (opzione v2.0); 3,3 V su alcuni PHY
Portatatracce a lunghezza abbinata ≤ 10–15 cm

Il problema del ritardo

RGMII richiede che il clock arrivi 1,5–2,0 ns dopo i fronti dei dati al ricevitore (finestra di setup/hold). Tre modi per ottenerlo:

ModalitàChi aggiunge il ritardophy-mode del device treeNote
Ritardo su PCB (v1.3)~5 cm di traccia di clock aggiuntivargmiiclassico, fragile
Ritardo interno nel PHY (RGMII-ID, v2.0)il PHY aggiunge 2 ns sui clock TX e RXrgmii-idil più comune oggi
Ritardo interno nel MAC/SoClo aggiunge il SoCrgmii con registro di ritardo lato MAC—
MistoPHY su una sola direzionergmii-txid, rgmii-rxidquando solo un lato lo supporta

Aggiungere il ritardo due volte (PCB e PHY) oppure non aggiungerlo affatto produce il guasto caratteristico di RGMII: link up a 1G con errori CRC o nessun traffico, mentre a 100M funziona (100M ha un periodo di 40 ns e tollera lo sfasamento). Si corregge cambiando il registro di ritardo del PHY o il phy-mode.

Stato in-band

Quando è inattivo, il PHY pilota link, velocità e duplex su RXD[3:0] in modo che il MAC possa riconfigurare il proprio divisore di clock senza una lettura MDIO: RXD[0] link, RXD[2:1] velocità (00 = 10, 01 = 100, 10 = 1000), RXD[3] duplex. Alcuni MAC lo ignorano e si affidano al polling MDIO; aspettative disallineate danno un link che è up sul PHY e down sul MAC.

TBI e RTBI

Ten-Bit Interface: i simboli 1000BASE-X codificati 8b/10b (10 bit a 125 MHz, RTBI a DDR con 5 bit) tra un MAC/PCS e un SerDes esterno o un PHY ottico. Obsoleta sulle schede; il suo discendente seriale è 1000BASE-X/SGMII (SGMII e gigabit seriale).

Confronto

InterfacciaPin (dati + ctrl)ClockRate massimoTensioneUso tipico
MII1625 MHz dal PHY100M3,3/5 VMCU, legacy
RMII7–950 MHz condiviso100M3,3 VSoC embedded + PHY
SMII2–3/porta125 MHz100M3,3 VPHY multi-porta (Cisco)
GMII24125 MHz (MAC tx / PHY rx)1G2,5 VFPGA, on-chip
RGMII12125 MHz DDR1G2,5/1,8/1,5 VSoC ↔ PHY su schede
SGMII4 (2 coppie)1,25 GBd embedded1G (10/100 per replicazione)CMLSoC ↔ PHY, gabbie SFP

Gestione del PHY: MDIO/MDC

VoceClause 22Clause 45
Indirizzamentoindirizzo PHY a 5 bit, registro a 5 bit (32 registri)porta a 5 bit, device a 5 bit (PMA/PMD, PCS, PHY XS, DTE XS, AN, vendor), registro a 16 bit
Registri chiave0 control (reset, velocità, AN enable, loopback), 1 status (link, AN complete), 2–3 PHY ID (OUI + modello), 4 AN advertisement, 5 link-partner ability, 9/10 control/status 1000BASE-T, 17+ vendor (ritardo RGMII, LED)1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x vendor
VelocitàMDC ≤ 2,5 MHz (spesso più veloce in pratica)uguale
Strumenti Linuxmii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; driver via phylib, phylinkphytool read eth0/1:1/0

Da contrapporre ai moduli pluggable, che sono gestiti via I²C, non via MDIO (Interfaccia a due fili). Il PHY interno di un SFP in rame è l’eccezione: i suoi registri MDIO sono raggiungibili attraverso l’I²C del modulo a un indirizzo secondario in molti design, ed è così che i produttori impostano il comportamento di fallback 10/100 e di auto-negoziazione.

PHY comuni e le loro interfacce

Famiglia di PHYInterfacceScheda tipica
Marvell 88E1111 / 88E1512 / 88E1510GMII, RGMII, SGMII, TBIrouter, moduli SFP in rame (88E1111)
Realtek RTL8211F / RTL8201RGMII / RMIISBC, router consumer
Microchip KSZ9031 / KSZ8081 / LAN8720RGMII / RMII / RMIIindustriale, schede MCU
TI DP83867 / DP83848RGMII, SGMII / MII, RMIIindustriale
Broadcom BCM54xxxRGMII, SGMII, QSGMIIswitch enterprise (PHY quad/octal)
Marvell 88E1543 / 88E1548QSGMII quadswitch di accesso a 48 porte

Guasti per interfaccia

SintomoInterfacciaCausa
Mai link, il PHY ID si legge correttamenteRMIIdisallineamento di direzione/sorgente del REF_CLK
100M funziona, 1G nessun traffico / CRCRGMIImodalità di ritardo (ID) sbagliata o raddoppiata
Link up sul LED del PHY, il MAC dice downRGMII/SGMIIstato in-band disabilitato su un lato, oppure polling MDIO assente
Metà dei pacchetti persi a 1GGMII/RGMIIsfasamento da lunghezza delle tracce, livello di tensione sbagliato
PHY non trovato su MDIOqualsiasiindirizzo PHY sbagliato (pin di strapping), pull-up MDIO assente
Velocità bloccata a 10/100qualsiasiregistro AN advertisement limitato, cavo, oppure phy-mode senza supporto 1G

In CodingBox

Niente in questa pagina passa attraverso l’EEPROM del modulo — a eccezione dello SFP in rame, il cui PHY interno (tipicamente un componente di classe 88E1111) sta dietro lo stesso I²C che CodingBox legge. Quando un modulo in rame funziona a 1G ma non a 10/100, la risposta sta nella configurazione di quel PHY e nella modalità SGMII/1000BASE-X dell’host, non nei byte di identità di A0h (Ethernet in rame e DAC, SGMII e gigabit seriale).


Se trovi un’imprecisione o un errore in questo articolo, seleziona il passaggio corrispondente e premi Ctrl+Enter per .