CodingBox Documentação

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)

ItemValor
Taxas10 e 100 Mb/s
DadosTXD[3:0] de 4 bits, RXD[3:0] de 4 bits
ClocksTX_CLK e RX_CLK vindos do PHY: 25 MHz (100M), 2,5 MHz (10M)
ControleTX_EN, TX_ER, RX_DV, RX_ER, CRS (detecção de portadora), COL (colisão)
GerenciamentoMDC, MDIO (compartilhado)
Quantidade de sinais16 de dados/controle + 2 de gerenciamento
Níveis5 V / 3,3 V TTL
Alcancealguns 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)

ItemValor
Taxas10 e 100 Mb/s
DadosTXD[1:0] de 2 bits, RXD[1:0]
Clockum ú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)
ControleTX_EN, CRS_DV (detecção de portadora + dado válido, multiplexados), RX_ER (opcional)
Quantidade de sinais7–9
Modo 10 Mb/scada nibble repetido 10× a 50 MHz
Alcancecm

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)

ItemValor
Taxas1000 Mb/s; retorna à sinalização MII para 10/100
DadosTXD[7:0] de 8 bits, RXD[7:0]
ClocksGTX_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
ControleTX_EN, TX_ER, RX_DV, RX_ER, CRS, COL
Quantidade de sinais24 + gerenciamento
Níveis2,5 V (tolerante a 3,3 V em muitos)
Alcancecm; 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)

ItemValor
Taxas10/100/1000
DadosTXD[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
ClocksTXC de 125 MHz (do MAC), RXC de 125 MHz (do PHY); 25 / 2,5 MHz para 100M / 10M
ControleTX_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 sinais12
Níveis2,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:

ModoQuem adiciona o delayphy-mode na device treeObservações
Delay na PCB (v1.3)~5 cm de trilha de clock extrargmiiclássico, frágil
Delay interno no PHY (RGMII-ID, v2.0)o PHY adiciona 2 ns nos clocks de TX e RXrgmii-ido mais comum hoje
Delay interno no MAC/SoCo SoC o adicionargmii com registrador de delay do lado do MAC
MistoPHY em apenas uma direçãorgmii-txid, rgmii-rxidquando 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

InterfacePinos (dados + ctrl)ClockTaxa máximaTensãoUso típico
MII1625 MHz do PHY100M3,3/5 VMCUs, legado
RMII7–950 MHz compartilhado100M3,3 VSoC embarcado + PHY
SMII2–3/porta125 MHz100M3,3 VPHYs multiporta (Cisco)
GMII24125 MHz (tx do MAC / rx do PHY)1G2,5 VFPGA, on-chip
RGMII12125 MHz DDR1G2,5/1,8/1,5 VSoC ↔ PHY nas placas
SGMII4 (2 pares)1,25 GBd embutido1G (10/100 por replicação)CMLSoC ↔ PHY, gaiolas (cage) SFP

Gerenciamento de PHY: MDIO/MDC

ItemCláusula 22Cláusula 45
Endereçamentoendereç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-chave0 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
VelocidadeMDC ≤ 2,5 MHz (frequentemente mais rápido na prática)igual
Ferramentas no Linuxmii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; driver via phylib, phylinkphytool 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 PHYInterfacesPlaca típica
Marvell 88E1111 / 88E1512 / 88E1510GMII, RGMII, SGMII, TBIroteadores, módulos SFP de cobre (88E1111)
Realtek RTL8211F / RTL8201RGMII / RMIISBCs, roteadores domésticos
Microchip KSZ9031 / KSZ8081 / LAN8720RGMII / RMII / RMIIindustrial, placas MCU
TI DP83867 / DP83848RGMII, SGMII / MII, RMIIindustrial
Broadcom BCM54xxxRGMII, SGMII, QSGMIIswitches corporativos (PHYs quad/octal)
Marvell 88E1543 / 88E1548QSGMII quadswitches de acesso de 48 portas

Falhas por interface

SintomaInterfaceCausa
Nunca há enlace, o PHY ID é lido corretamenteRMIIdivergência de direção/origem do REF_CLK
100M funciona, 1G sem tráfego / com CRCRGMIImodo de delay (ID) errado ou duplicado
Enlace up no LED do PHY, o MAC diz downRGMII/SGMIIstatus in-band desativado em um lado, ou polling por MDIO ausente
Metade dos pacotes perdidos em 1GGMII/RGMIIdesvio de comprimento de trilha, nível de tensão errado
PHY não encontrado no MDIOqualquerendereço de PHY errado (pinos de strapping), pull-up de MDIO ausente
Velocidade travada em 10/100qualquerregistrador 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).


Se você encontrar uma imprecisão ou um erro neste artigo, selecione o trecho correspondente e pressione Ctrl+Enter para .