MII, RMII, GMII, RGMII: interfaces paralelas al PHY
Las interfaces paralelas independientes del medio conectan un MAC con un chip PHY de cobre a través de un puñado de centímetros de PCB — dentro de routers, conmutadores pequeños, puntos de acceso, controladores industriales y cualquier placa embebida con un RJ45. Nunca llegan a una jaula de transceptor, pero son el punto de referencia de todo lo que sí lo hace: SGMII es "GMII serializada", XGMII es "GMII a 10G", y el PHY dentro de un SFP de cobre habla una de ellas internamente. Esta página da pines, relojes y temporización para MII, RMII, GMII y RGMII, el problema del retardo de RGMII, el estado en banda, la gestión MDIO, y las averías que produce cada interfaz.
MII (IEEE 802.3 cláusula 22)
| Elemento | Valor |
|---|---|
| Tasas | 10 y 100 Mb/s |
| Datos | TXD[3:0] de 4 bits, RXD[3:0] de 4 bits |
| Relojes | TX_CLK y RX_CLK desde el PHY: 25 MHz (100M), 2,5 MHz (10M) |
| Control | TX_EN, TX_ER, RX_DV, RX_ER, CRS (detección de portadora), COL (colisión) |
| Gestión | MDC, MDIO (compartido) |
| Cantidad de señales | 16 de datos/control + 2 de gestión |
| Niveles | TTL de 5 V / 3,3 V |
| Alcance | unos pocos cm; un PHY por MAC |
Todavía se encuentra en microcontroladores y FPGA; sustituida por RMII por la cantidad de pines.
RMII (especificación RMII Consortium v1.2)
| Elemento | Valor |
|---|---|
| Tasas | 10 y 100 Mb/s |
| Datos | TXD[1:0] de 2 bits, RXD[1:0] |
| Reloj | un único REF_CLK de 50 MHz, compartido por el MAC y el PHY; procedente de un oscilador, del MAC o del PHY (modo PHY-clock-out) |
| Control | TX_EN, CRS_DV (detección de portadora + datos válidos multiplexados), RX_ER (opcional) |
| Cantidad de señales | 7–9 |
| Modo 10 Mb/s | cada nibble repetido 10× a 50 MHz |
| Alcance | cm |
La topología del reloj de referencia de 50 MHz es el bug clásico de RMII: un PHY que espera un reloj externo mientras el SoC espera que el PHY lo genere da una interfaz muerta con un LED de enlace sano.
GMII (cláusula 35)
| Elemento | Valor |
|---|---|
| Tasas | 1000 Mb/s; recae en señalización MII para 10/100 |
| Datos | TXD[7:0] de 8 bits, RXD[7:0] |
| Relojes | GTX_CLK de 125 MHz desde el MAC para transmisión; RX_CLK de 125 MHz desde el PHY para recepción; TX_CLK desde el PHY usado solo en el fallback a 10/100 |
| Control | TX_EN, TX_ER, RX_DV, RX_ER, CRS, COL |
| Cantidad de señales | 24 + gestión |
| Niveles | 2,5 V (tolerante a 3,3 V en muchos) |
| Alcance | cm; presupuesto de temporización ajustado a 125 MHz de tasa de datos simple |
Hoy es sobre todo una interfaz on-chip o de FPGA; RGMII ocupó su lugar en las placas.
RGMII (GMII reducida, especificación HP/Marvell v1.3 y v2.0)
| Elemento | Valor |
|---|---|
| Tasas | 10/100/1000 |
| Datos | TXD[3:0] y RXD[3:0] de 4 bits de doble tasa de datos: nibble bajo en flanco de subida, nibble alto en flanco de bajada |
| Relojes | TXC de 125 MHz (desde el MAC), RXC de 125 MHz (desde el PHY); 25 / 2,5 MHz para 100M / 10M |
| Control | TX_CTL (TX_EN en flanco de subida, TX_EN xor TX_ER en el de bajada), RX_CTL (RX_DV / RX_DV xor RX_ER) |
| Cantidad de señales | 12 |
| Niveles | 2,5 V (v1.3), HSTL de 1,5 V o 1,8 V (opción v2.0); 3,3 V en algunos PHY |
| Alcance | ≤ 10–15 cm de pistas de longitud igualada |
El problema del retardo
RGMII exige que el reloj llegue 1,5–2,0 ns después de los flancos de datos en el receptor (ventana de setup/hold). Tres formas de conseguirlo:
| Modo | Quién añade el retardo | phy-mode del device tree | Notas |
|---|---|---|---|
| Retardo en PCB (v1.3) | ~5 cm de pista de reloj adicional | rgmii | clásico, frágil |
| Retardo interno en el PHY (RGMII-ID, v2.0) | el PHY añade 2 ns en los relojes TX y RX | rgmii-id | el más común hoy |
| Retardo interno en el MAC/SoC | lo añade el SoC | rgmii con registro de retardo del lado MAC | — |
| Mixto | el PHY solo en una dirección | rgmii-txid, rgmii-rxid | cuando solo un lado lo admite |
Añadir el retardo dos veces (PCB y PHY) o no añadirlo produce la avería característica de RGMII: enlace activo a 1G con errores de CRC o sin tráfico, mientras que 100M funciona (100M tiene un período de 40 ns y tolera el sesgo). Se corrige cambiando el registro de retardo del PHY o el phy-mode.
Estado en banda
En reposo, el PHY presenta el enlace, la velocidad y el dúplex en RXD[3:0] para que el MAC pueda reconfigurar su divisor de reloj sin una lectura MDIO: RXD[0] enlace, RXD[2:1] velocidad (00 = 10, 01 = 100, 10 = 1000), RXD[3] dúplex. Algunos MAC lo ignoran y dependen del sondeo MDIO; expectativas no coincidentes dan un enlace que está activo en el PHY y caído en el MAC.
TBI y RTBI
Ten-Bit Interface: los símbolos 1000BASE-X codificados en 8b/10b (10 bits a 125 MHz, RTBI en DDR con 5 bits) entre un MAC/PCS y un SerDes externo o un PHY óptico. Obsoleta en placas; su descendiente serie es 1000BASE-X/SGMII (SGMII y gigabit serie).
Comparación
| Interfaz | Pines (datos + control) | Reloj | Tasa máxima | Voltaje | Uso típico |
|---|---|---|---|---|---|
| MII | 16 | 25 MHz desde el PHY | 100M | 3,3/5 V | MCU, legado |
| RMII | 7–9 | 50 MHz compartido | 100M | 3,3 V | SoC embebido + PHY |
| SMII | 2–3/puerto | 125 MHz | 100M | 3,3 V | PHY multipuerto (Cisco) |
| GMII | 24 | 125 MHz (tx del MAC / rx del PHY) | 1G | 2,5 V | FPGA, on-chip |
| RGMII | 12 | 125 MHz DDR | 1G | 2,5/1,8/1,5 V | SoC ↔ PHY en placas |
| SGMII | 4 (2 pares) | 1,25 GBd embebido | 1G (10/100 por replicación) | CML | SoC ↔ PHY, jaulas SFP |
Gestión del PHY: MDIO/MDC
| Elemento | Cláusula 22 | Cláusula 45 |
|---|---|---|
| Direccionamiento | dirección de PHY de 5 bits, registro de 5 bits (32 registros) | puerto de 5 bits, dispositivo de 5 bits (PMA/PMD, PCS, PHY XS, DTE XS, AN, del fabricante), registro de 16 bits |
| Registros clave | 0 control (reinicio, velocidad, habilitación de AN, bucle interno), 1 estado (enlace, AN completa), 2–3 ID de PHY (OUI + modelo), 4 anuncio de AN, 5 capacidad del par de enlace, 9/10 control/estado de 1000BASE-T, 17+ del fabricante (retardo RGMII, LED) | 1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x del fabricante |
| Velocidad | MDC ≤ 2,5 MHz (a menudo más rápido en la práctica) | igual |
| Herramientas de Linux | mii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; controlador vía phylib, phylink | phytool read eth0/1:1/0 |
Contraste con los módulos conectables, que se gestionan por I²C, no por MDIO (Interfaz de dos hilos). El PHY interno de un SFP de cobre es la excepción: sus registros MDIO son accesibles a través del I²C del módulo en una dirección secundaria en muchos diseños, que es como los fabricantes configuran el fallback a 10/100 y el comportamiento de autonegociación.
PHY comunes y sus interfaces
| Familia de PHY | Interfaces | Placa típica |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII, RGMII, SGMII, TBI | routers, módulos SFP de cobre (88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | SBC, routers de consumo |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | industrial, placas MCU |
| TI DP83867 / DP83848 | RGMII, SGMII / MII, RMII | industrial |
| Broadcom BCM54xxx | RGMII, SGMII, QSGMII | conmutadores empresariales (PHY cuádruples/óctuples) |
| Marvell 88E1543 / 88E1548 | QSGMII cuádruple | conmutadores de acceso de 48 puertos |
Averías por interfaz
| Síntoma | Interfaz | Causa |
|---|---|---|
| Nunca hay enlace, el ID de PHY se lee bien | RMII | discrepancia de dirección/fuente de REF_CLK |
| 100M funciona, 1G sin tráfico / CRC | RGMII | modo de retardo (ID) incorrecto o duplicado |
| Enlace activo en el LED del PHY, el MAC dice caído | RGMII/SGMII | estado en banda desactivado en un lado, o sondeo MDIO ausente |
| Se pierde la mitad de los paquetes a 1G | GMII/RGMII | sesgo de longitud de pista, nivel de voltaje incorrecto |
| PHY no encontrado en MDIO | cualquiera | dirección de PHY incorrecta (pines de strapping), pull-up de MDIO ausente |
| Velocidad atascada en 10/100 | cualquiera | registro de anuncio de AN limitado, cable, o phy-mode sin soporte de 1G |
En CodingBox
Nada en esta página pasa por la EEPROM del módulo — excepto el SFP de cobre, cuyo PHY interno (típicamente una pieza de clase 88E1111) se sitúa detrás del mismo I²C que lee CodingBox. Cuando un módulo de cobre funciona a 1G pero no a 10/100, la respuesta está en la configuración de ese PHY y en el modo SGMII/1000BASE-X del host, no en los bytes de identidad de A0h (Ethernet de cobre y DAC, SGMII y gigabit serie).