MII, RMII, GMII, RGMII : interfaces parallèles vers le PHY
Les interfaces parallèles indépendantes du média relient un MAC à une puce PHY cuivre sur quelques centimètres de PCB — à l’intérieur des routeurs, petits commutateurs, points d’accès, contrôleurs industriels et de toute carte embarquée dotée d’un RJ45. Elles n’atteignent jamais une cage de transceiver, mais elles sont le point de référence de tout ce qui le fait : SGMII est « GMII sérialisé », XGMII est « GMII à 10G », et le PHY à l’intérieur d’un SFP cuivre parle l’une d’elles en interne. Cette page donne les broches, horloges et timings de MII, RMII, GMII et RGMII, le problème de délai RGMII, le statut in-band, la gestion MDIO, et les défauts que produit chaque interface.
MII (IEEE 802.3 Clause 22)
| Élément | Valeur |
|---|---|
| Débits | 10 et 100 Mb/s |
| Données | TXD[3:0] 4 bits, RXD[3:0] 4 bits |
| Horloges | TX_CLK et RX_CLK fournies par le PHY : 25 MHz (100M), 2,5 MHz (10M) |
| Contrôle | TX_EN, TX_ER, RX_DV, RX_ER, CRS (détection de porteuse), COL (collision) |
| Gestion | MDC, MDIO (partagés) |
| Nombre de signaux | 16 données/contrôle + 2 gestion |
| Niveaux | 5 V / 3,3 V TTL |
| Portée | quelques cm ; un PHY par MAC |
Encore présent sur les microcontrôleurs et FPGA ; supplanté par RMII pour le nombre de broches.
RMII (spécification RMII Consortium v1.2)
| Élément | Valeur |
|---|---|
| Débits | 10 et 100 Mb/s |
| Données | TXD[1:0] 2 bits, RXD[1:0] |
| Horloge | une seule REF_CLK 50 MHz, partagée par le MAC et le PHY ; fournie par un oscillateur, le MAC, ou le PHY (mode PHY-clock-out) |
| Contrôle | TX_EN, CRS_DV (détection de porteuse + données valides multiplexées), RX_ER (optionnel) |
| Nombre de signaux | 7–9 |
| Mode 10 Mb/s | chaque nibble répété 10× à 50 MHz |
| Portée | cm |
La topologie de l’horloge de référence 50 MHz est le bug classique du RMII : un PHY qui attend une horloge externe alors que le SoC attend que le PHY la fournisse donne une interface morte avec une LED de liaison pourtant allumée.
GMII (Clause 35)
| Élément | Valeur |
|---|---|
| Débits | 1000 Mb/s ; repli sur la signalisation MII pour 10/100 |
| Données | TXD[7:0] 8 bits, RXD[7:0] |
| Horloges | GTX_CLK 125 MHz fournie par le MAC pour l’émission ; RX_CLK 125 MHz fournie par le PHY pour la réception ; TX_CLK du PHY utilisée uniquement en repli 10/100 |
| Contrôle | TX_EN, TX_ER, RX_DV, RX_ER, CRS, COL |
| Nombre de signaux | 24 + gestion |
| Niveaux | 2,5 V (tolérant 3,3 V sur beaucoup de modèles) |
| Portée | cm ; budget de timing serré à 125 MHz en simple débit de données |
Aujourd’hui surtout une interface interne au circuit ou en FPGA ; le RGMII l’a remplacée sur les cartes.
RGMII (GMII réduit, spécification HP/Marvell v1.3 et v2.0)
| Élément | Valeur |
|---|---|
| Débits | 10/100/1000 |
| Données | TXD[3:0] et RXD[3:0] 4 bits, double débit de données : nibble bas sur le front montant, nibble haut sur le front descendant |
| Horloges | TXC 125 MHz (depuis le MAC), RXC 125 MHz (depuis le PHY) ; 25 / 2,5 MHz pour 100M / 10M |
| Contrôle | TX_CTL (TX_EN sur front montant, TX_EN xor TX_ER sur front descendant), RX_CTL (RX_DV / RX_DV xor RX_ER) |
| Nombre de signaux | 12 |
| Niveaux | 2,5 V (v1.3), 1,5 V HSTL ou 1,8 V (option v2.0) ; 3,3 V sur certains PHY |
| Portée | ≤ 10–15 cm, pistes de longueur appairée |
Le problème du délai
Le RGMII exige que l’horloge arrive 1,5–2,0 ns après les fronts de données au récepteur (fenêtre setup/hold). Trois façons d’y parvenir :
| Mode | Qui ajoute le délai | phy-mode du device tree | Remarques |
|---|---|---|---|
| Délai sur le PCB (v1.3) | ~5 cm de piste d’horloge supplémentaire | rgmii | classique, fragile |
| Délai interne dans le PHY (RGMII-ID, v2.0) | le PHY ajoute 2 ns sur les horloges TX et RX | rgmii-id | le plus courant aujourd’hui |
| Délai interne dans le MAC/SoC | ajouté par le SoC | rgmii avec registre de délai côté MAC | — |
| Mixte | PHY sur une seule direction | rgmii-txid, rgmii-rxid | quand un seul côté le prend en charge |
Ajouter le délai deux fois (PCB et PHY), ou pas du tout, produit le défaut RGMII caractéristique : liaison up en 1G avec des erreurs CRC ou sans trafic, alors que le 100M fonctionne (le 100M a une période de 40 ns et tolère le décalage). À corriger en changeant le registre de délai du PHY ou le phy-mode.
Statut in-band
Au repos, le PHY pilote la liaison, le débit et le duplex sur RXD[3:0] pour que le MAC puisse reconfigurer son diviseur d’horloge sans lecture MDIO : RXD[0] liaison, RXD[2:1] débit (00 = 10, 01 = 100, 10 = 1000), RXD[3] duplex. Certains MAC l’ignorent et s’appuient sur l’interrogation MDIO ; un décalage entre les attentes donne une liaison up côté PHY et down côté MAC.
TBI et RTBI
Interface à dix bits : les symboles 1000BASE-X codés en 8b/10b (10 bits à 125 MHz, RTBI en DDR avec 5 bits) entre un MAC/PCS et un SerDes externe ou un PHY optique. Obsolète sur les cartes ; son descendant série est 1000BASE-X/SGMII (SGMII et gigabit série).
Comparaison
| Interface | Broches (données + ctrl) | Horloge | Débit max | Tension | Usage typique |
|---|---|---|---|---|---|
| MII | 16 | 25 MHz depuis le PHY | 100M | 3,3/5 V | MCU, legacy |
| RMII | 7–9 | 50 MHz partagée | 100M | 3,3 V | SoC embarqué + PHY |
| SMII | 2–3/port | 125 MHz | 100M | 3,3 V | PHY multiport (Cisco) |
| GMII | 24 | 125 MHz (MAC tx / PHY rx) | 1G | 2,5 V | FPGA, interne au circuit |
| RGMII | 12 | 125 MHz DDR | 1G | 2,5/1,8/1,5 V | SoC ↔ PHY sur cartes |
| SGMII | 4 (2 paires) | 1,25 GBd intégrée | 1G (10/100 par réplication) | CML | SoC ↔ PHY, cages SFP |
Gestion du PHY : MDIO/MDC
| Élément | Clause 22 | Clause 45 |
|---|---|---|
| Adressage | adresse PHY 5 bits, registre 5 bits (32 registres) | port 5 bits, dispositif 5 bits (PMA/PMD, PCS, PHY XS, DTE XS, AN, constructeur), registre 16 bits |
| Registres clés | 0 contrôle (reset, débit, activation AN, loopback), 1 état (liaison, AN terminée), 2–3 PHY ID (OUI + modèle), 4 annonce AN, 5 capacité du partenaire de liaison, 9/10 contrôle/état 1000BASE-T, 17+ constructeur (délai RGMII, LED) | 1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x constructeur |
| Vitesse | MDC ≤ 2,5 MHz (souvent plus rapide en pratique) | identique |
| Outils Linux | mii-tool -v eth0, phytool read eth0/1/0, ethtool eth0 ; pilote via phylib, phylink | phytool read eth0/1:1/0 |
À la différence des modules enfichables, gérés via I²C et non via MDIO (Interface deux fils). Le PHY interne d’un SFP cuivre fait exception : ses registres MDIO sont accessibles via l’I²C du module, à une adresse secondaire sur de nombreuses conceptions, ce qui permet aux constructeurs de régler le repli 10/100 et le comportement d’autonégociation.
PHY courants et leurs interfaces
| Famille de PHY | Interfaces | Carte typique |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII, RGMII, SGMII, TBI | routeurs, modules SFP cuivre (88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | SBC, routeurs grand public |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | industriel, cartes MCU |
| TI DP83867 / DP83848 | RGMII, SGMII / MII, RMII | industriel |
| Broadcom BCM54xxx | RGMII, SGMII, QSGMII | commutateurs d’entreprise (PHY quad/octal) |
| Marvell 88E1543 / 88E1548 | QSGMII quad | commutateurs d’accès 48 ports |
Défauts par interface
| Symptôme | Interface | Cause |
|---|---|---|
| Jamais de liaison, PHY ID se lit correctement | RMII | incohérence de direction/source de REF_CLK |
| Le 100M fonctionne, pas de trafic / CRC en 1G | RGMII | mode de délai (ID) incorrect ou doublé |
| Liaison up sur la LED du PHY, down côté MAC | RGMII/SGMII | statut in-band désactivé d’un côté, ou interrogation MDIO absente |
| La moitié des paquets perdus en 1G | GMII/RGMII | décalage de longueur de piste, mauvais niveau de tension |
| PHY introuvable sur MDIO | toutes | mauvaise adresse PHY (broches de strapping), pull-up MDIO absent |
| Débit bloqué à 10/100 | toutes | registre d’annonce AN limité, câble, ou phy-mode sans prise en charge du 1G |
Dans CodingBox
Rien sur cette page ne transite par l’EEPROM du module — sauf le SFP cuivre, dont le PHY interne (typiquement un composant de classe 88E1111) se trouve derrière le même I²C que celui que lit CodingBox. Quand un module cuivre fonctionne en 1G mais pas en 10/100, la réponse se trouve dans la configuration de ce PHY et le mode SGMII/1000BASE-X de l’hôte, pas dans les octets d’identité A0h (Ethernet cuivre et DAC, SGMII et gigabit série).