MII, RMII, GMII, RGMII: interfaces paralelas para o PHY
As interfaces paralelas independentes do meio físico conectam um MAC a um chip PHY de cobre ao longo de alguns centímetros de PCB — dentro de roteadores, switches pequenos, pontos de acesso, controladores industriais e qualquer placa embarcada com um RJ45. Elas nunca chegam a uma gaiola (cage) de transceptor, mas são a referência para tudo que chega lá: o SGMII é “o GMII serializado”, o XGMII é “o GMII a 10G”, e o PHY dentro de um SFP de cobre fala uma dessas interfaces internamente. Esta página traz pinos, clocks e timing para MII, RMII, GMII e RGMII, o problema de delay do RGMII, o status in-band, o gerenciamento por MDIO e as falhas que cada interface produz.
MII (IEEE 802.3, Cláusula 22)
| Item | Valor |
|---|---|
| Taxas | 10 e 100 Mb/s |
| Dados | TXD[3:0] de 4 bits, RXD[3:0] de 4 bits |
| Clocks | TX_CLK e RX_CLK vindos do PHY: 25 MHz (100M), 2,5 MHz (10M) |
| Controle | TX_EN, TX_ER, RX_DV, RX_ER, CRS (detecção de portadora), COL (colisão) |
| Gerenciamento | MDC, MDIO (compartilhado) |
| Quantidade de sinais | 16 de dados/controle + 2 de gerenciamento |
| Níveis | 5 V / 3,3 V TTL |
| Alcance | alguns cm; um PHY por MAC |
Ainda encontrado em microcontroladores e FPGAs; superado pelo RMII em número de pinos.
RMII (especificação RMII Consortium v1.2)
| Item | Valor |
|---|---|
| Taxas | 10 e 100 Mb/s |
| Dados | TXD[1:0] de 2 bits, RXD[1:0] |
| Clock | um único REF_CLK de 50 MHz, compartilhado pelo MAC e pelo PHY; provido por um oscilador, pelo MAC ou pelo PHY (modo PHY-clock-out) |
| Controle | TX_EN, CRS_DV (detecção de portadora + dado válido, multiplexados), RX_ER (opcional) |
| Quantidade de sinais | 7–9 |
| Modo 10 Mb/s | cada nibble repetido 10× a 50 MHz |
| Alcance | cm |
A topologia do clock de referência de 50 MHz é o bug clássico do RMII: um PHY esperando um clock externo enquanto o SoC espera que o PHY o forneça resulta em uma interface morta com o LED de enlace aceso normalmente.
GMII (Cláusula 35)
| Item | Valor |
|---|---|
| Taxas | 1000 Mb/s; retorna à sinalização MII para 10/100 |
| Dados | TXD[7:0] de 8 bits, RXD[7:0] |
| Clocks | GTX_CLK de 125 MHz vindo do MAC para transmissão; RX_CLK de 125 MHz vindo do PHY para recepção; TX_CLK do PHY usado somente no fallback 10/100 |
| Controle | TX_EN, TX_ER, RX_DV, RX_ER, CRS, COL |
| Quantidade de sinais | 24 + gerenciamento |
| Níveis | 2,5 V (tolerante a 3,3 V em muitos) |
| Alcance | cm; orçamento de timing apertado a 125 MHz com taxa de dados única |
Hoje é principalmente uma interface on-chip ou de FPGA; o RGMII tomou seu lugar nas placas.
RGMII (GMII reduzido, especificação HP/Marvell v1.3 e v2.0)
| Item | Valor |
|---|---|
| Taxas | 10/100/1000 |
| Dados | TXD[3:0] e RXD[3:0] de 4 bits, taxa de dados dupla: nibble baixo na borda de subida, nibble alto na borda de descida |
| Clocks | TXC de 125 MHz (do MAC), RXC de 125 MHz (do PHY); 25 / 2,5 MHz para 100M / 10M |
| Controle | TX_CTL (TX_EN na borda de subida, TX_EN xor TX_ER na de descida), RX_CTL (RX_DV / RX_DV xor RX_ER) |
| Quantidade de sinais | 12 |
| Níveis | 2,5 V (v1.3), 1,5 V HSTL ou 1,8 V (opção v2.0); 3,3 V em alguns PHYs |
| Alcance | ≤ 10–15 cm, trilhas de comprimento casado |
O problema do delay
O RGMII exige que o clock chegue 1,5–2,0 ns depois das bordas de dado no receptor (janela de setup/hold). Há três formas de conseguir isso:
| Modo | Quem adiciona o delay | phy-mode na device tree | Observações |
|---|---|---|---|
| Delay na PCB (v1.3) | ~5 cm de trilha de clock extra | rgmii | clássico, frágil |
| Delay interno no PHY (RGMII-ID, v2.0) | o PHY adiciona 2 ns nos clocks de TX e RX | rgmii-id | o mais comum hoje |
| Delay interno no MAC/SoC | o SoC o adiciona | rgmii com registrador de delay do lado do MAC | — |
| Misto | PHY em apenas uma direção | rgmii-txid, rgmii-rxid | quando só um lado suporta |
Adicionar o delay duas vezes (PCB e PHY) ou não adicioná-lo produz a falha típica do RGMII: enlace up em 1G com erros de CRC ou sem tráfego, enquanto o 100M funciona (o 100M tem um período de 40 ns e tolera o desvio). Corrija alterando o registrador de delay do PHY ou o phy-mode.
Status in-band
Quando ocioso, o PHY expõe o enlace, a velocidade e o duplex em RXD[3:0], para que o MAC possa reconfigurar seu divisor de clock sem uma leitura de MDIO: RXD[0] enlace, RXD[2:1] velocidade (00 = 10, 01 = 100, 10 = 1000), RXD[3] duplex. Alguns MACs ignoram isso e dependem de polling por MDIO; expectativas divergentes resultam em um enlace que está up no PHY e down no MAC.
TBI e RTBI
Ten-Bit Interface: os símbolos 1000BASE-X codificados em 8b/10b (10 bits a 125 MHz; RTBI em DDR, com 5 bits) entre um MAC/PCS e um SerDes externo ou PHY óptico. Obsoleta em placas; sua descendente serial é a 1000BASE-X/SGMII (SGMII e gigabit serial).
Comparação
| Interface | Pinos (dados + ctrl) | Clock | Taxa máxima | Tensão | Uso típico |
|---|---|---|---|---|---|
| MII | 16 | 25 MHz do PHY | 100M | 3,3/5 V | MCUs, legado |
| RMII | 7–9 | 50 MHz compartilhado | 100M | 3,3 V | SoC embarcado + PHY |
| SMII | 2–3/porta | 125 MHz | 100M | 3,3 V | PHYs multiporta (Cisco) |
| GMII | 24 | 125 MHz (tx do MAC / rx do PHY) | 1G | 2,5 V | FPGA, on-chip |
| RGMII | 12 | 125 MHz DDR | 1G | 2,5/1,8/1,5 V | SoC ↔ PHY nas placas |
| SGMII | 4 (2 pares) | 1,25 GBd embutido | 1G (10/100 por replicação) | CML | SoC ↔ PHY, gaiolas (cage) SFP |
Gerenciamento de PHY: MDIO/MDC
| Item | Cláusula 22 | Cláusula 45 |
|---|---|---|
| Endereçamento | endereço de PHY de 5 bits, registrador de 5 bits (32 registradores) | porta de 5 bits, dispositivo de 5 bits (PMA/PMD, PCS, PHY XS, DTE XS, AN, fabricante), registrador de 16 bits |
| Registradores-chave | 0 controle (reset, velocidade, habilitação de AN, loopback), 1 status (enlace, AN completa), 2–3 PHY ID (OUI + modelo), 4 advertisement de AN, 5 capacidade do link-partner, 9/10 controle/status 1000BASE-T, 17+ do fabricante (delay do RGMII, LEDs) | 1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x do fabricante |
| Velocidade | MDC ≤ 2,5 MHz (frequentemente mais rápido na prática) | igual |
| Ferramentas no Linux | mii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; driver via phylib, phylink | phytool read eth0/1:1/0 |
Em contraste, os módulos pluggable são gerenciados por I²C, não por MDIO (Interface de dois fios). O PHY interno de um SFP de cobre é a exceção: seus registradores de MDIO são acessíveis através do I²C do módulo, em um endereço secundário em muitos projetos — é assim que os fabricantes configuram o fallback 10/100 e o comportamento de autonegociação.
PHYs comuns e suas interfaces
| Família de PHY | Interfaces | Placa típica |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII, RGMII, SGMII, TBI | roteadores, módulos SFP de cobre (88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | SBCs, roteadores domésticos |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | industrial, placas MCU |
| TI DP83867 / DP83848 | RGMII, SGMII / MII, RMII | industrial |
| Broadcom BCM54xxx | RGMII, SGMII, QSGMII | switches corporativos (PHYs quad/octal) |
| Marvell 88E1543 / 88E1548 | QSGMII quad | switches de acesso de 48 portas |
Falhas por interface
| Sintoma | Interface | Causa |
|---|---|---|
| Nunca há enlace, o PHY ID é lido corretamente | RMII | divergência de direção/origem do REF_CLK |
| 100M funciona, 1G sem tráfego / com CRC | RGMII | modo de delay (ID) errado ou duplicado |
| Enlace up no LED do PHY, o MAC diz down | RGMII/SGMII | status in-band desativado em um lado, ou polling por MDIO ausente |
| Metade dos pacotes perdidos em 1G | GMII/RGMII | desvio de comprimento de trilha, nível de tensão errado |
| PHY não encontrado no MDIO | qualquer | endereço de PHY errado (pinos de strapping), pull-up de MDIO ausente |
| Velocidade travada em 10/100 | qualquer | registrador de advertisement de AN limitado, cabo, ou phy-mode sem suporte a 1G |
No CodingBox
Nada nesta página passa pela EEPROM do módulo — exceto o SFP de cobre, cujo PHY interno (tipicamente uma peça da classe 88E1111) fica atrás do mesmo I²C que o CodingBox lê. Quando um módulo de cobre funciona em 1G mas não em 10/100, a resposta está na configuração desse PHY e no modo SGMII/1000BASE-X do host, não nos bytes de identidade do A0h (Ethernet de cobre e DAC, SGMII e gigabit serial).