CodingBox Документация

MII, RMII, GMII, RGMII: параллельные интерфейсы к PHY

Параллельные медиа-независимые интерфейсы соединяют MAC с медным чипом PHY через несколько сантиметров печатной платы — внутри роутеров, малых коммутаторов, точек доступа, промышленных контроллеров и любой встраиваемой платы с RJ45. До клетки трансивера они не доходят, но служат точкой отсчёта для всего, что доходит: SGMII — «сериализованный GMII», XGMII — «GMII на 10G», а PHY внутри медного SFP внутри говорит на одном из них. Здесь — пины, такты и тайминги MII, RMII, GMII и RGMII, проблема задержки RGMII, внутриполосный статус, управление по MDIO и неисправности, характерные для каждого интерфейса.

MII (IEEE 802.3 Clause 22)

ПозицияЗначение
Скорости10 и 100 Мбит/с
Данные4-бит TXD[3:0], 4-бит RXD[3:0]
ТактыTX_CLK и RX_CLK от PHY: 25 МГц (100M), 2,5 МГц (10M)
УправлениеTX_EN, TX_ER, RX_DV, RX_ER, CRS (несущая), COL (коллизия)
МенеджментMDC, MDIO (общие)
Число сигналов16 данных/управления + 2 менеджмента
УровниТТЛ 5 В / 3,3 В
Дальностьнесколько см; один PHY на MAC

До сих пор встречается на микроконтроллерах и FPGA; по числу пинов вытеснен RMII.

RMII (спецификация RMII Consortium v1.2)

ПозицияЗначение
Скорости10 и 100 Мбит/с
Данные2-бит TXD[1:0], RXD[1:0]
Тактединый REF_CLK 50 МГц, общий для MAC и PHY; источник — генератор, MAC или PHY (режим вывода такта PHY)
УправлениеTX_EN, CRS_DV (несущая + данные валидны, мультиплексированы), RX_ER (опционально)
Число сигналов7–9
Режим 10 Мбит/скаждый полубайт повторяется 10× на 50 МГц
Дальностьсм

Топология опорного такта 50 МГц — классическая ошибка RMII: PHY ждёт внешний такт, а SoC ждёт, что такт даст PHY, — интерфейс мёртв при здоровом светодиоде линка.

GMII (Clause 35)

ПозицияЗначение
Скорости1000 Мбит/с; откат на сигнализацию MII для 10/100
Данные8-бит TXD[7:0], RXD[7:0]
ТактыGTX_CLK 125 МГц от MAC для передачи; RX_CLK 125 МГц от PHY для приёма; TX_CLK от PHY используется только в откате 10/100
УправлениеTX_EN, TX_ER, RX_DV, RX_ER, CRS, COL
Число сигналов24 + менеджмент
Уровни2,5 В (у многих терпимо к 3,3 В)
Дальностьсм; бюджет таймингов тесен при 125 МГц одинарной скорости данных

Сегодня в основном внутричиповый или FPGA-интерфейс; на платах его место занял RGMII.

RGMII (Reduced GMII, спецификация HP/Marvell v1.3 и v2.0)

ПозицияЗначение
Скорости10/100/1000
Данные4-бит TXD[3:0] и RXD[3:0] с удвоенной скоростью: младший полубайт по фронту, старший по спаду
ТактыTXC 125 МГц (от MAC), RXC 125 МГц (от PHY); 25 / 2,5 МГц для 100M / 10M
УправлениеTX_CTL (TX_EN по фронту, TX_EN xor TX_ER по спаду), RX_CTL (RX_DV / RX_DV xor RX_ER)
Число сигналов12
Уровни2,5 В (v1.3), 1,5 В HSTL или 1,8 В (опция v2.0); 3,3 В у части PHY
Дальность≤ 10–15 см согласованных по длине дорожек

Проблема задержки

RGMII требует, чтобы такт приходил на приёмник на 1,5–2,0 нс позже фронтов данных (окно установки/удержания). Три способа этого добиться:

РежимКто добавляет задержкуphy-mode в device treeПримечания
Задержка на плате (v1.3)~5 см лишней дорожки тактаrgmiiклассика, хрупко
Внутренняя задержка в PHY (RGMII-ID, v2.0)PHY добавляет 2 нс на тактах TX и RXrgmii-idсегодня самый распространённый
Внутренняя задержка в MAC/SoCдобавляет SoCrgmii с регистром задержки на стороне MAC
СмешанныйPHY только в одном направленииrgmii-txid, rgmii-rxidкогда поддерживает только одна сторона

Задержка, добавленная дважды (плата и PHY) или не добавленная вовсе, даёт фирменную неисправность RGMII: линк на 1G поднят с ошибками CRC или без трафика, а 100M работает (у 100M период 40 нс, и перекос ему не мешает). Лечится регистром задержки PHY или phy-mode.

Внутриполосный статус

В простое PHY выдаёт линк, скорость и дуплекс на RXD[3:0], чтобы MAC перенастроил делитель такта без чтения MDIO: RXD[0] линк, RXD[2:1] скорость (00 = 10, 01 = 100, 10 = 1000), RXD[3] дуплекс. Часть MAC его игнорирует и полагается на опрос MDIO; несовпадение ожиданий даёт линк, поднятый на PHY и лежащий на MAC.

TBI и RTBI

Ten-Bit Interface: символы 1000BASE-X в коде 8b/10b (10 бит на 125 МГц, RTBI — DDR по 5 бит) между MAC/PCS и внешним SerDes или оптическим PHY. На платах устарел; его последовательный потомок — 1000BASE-X/SGMII (SGMII и последовательный гигабит).

Сравнение

ИнтерфейсПины (данные + упр.)ТактМакс. скоростьНапряжениеТипичное применение
MII1625 МГц от PHY100M3,3/5 ВМК, наследие
RMII7–950 МГц общий100M3,3 Ввстраиваемый SoC + PHY
SMII2–3/порт125 МГц100M3,3 Вмногопортовые PHY (Cisco)
GMII24125 МГц (MAC tx / PHY rx)1G2,5 ВFPGA, внутри чипа
RGMII12125 МГц DDR1G2,5/1,8/1,5 ВSoC ↔ PHY на платах
SGMII4 (2 пары)1,25 ГБод встроенный1G (10/100 повторением)CMLSoC ↔ PHY, клетки SFP

Управление PHY: MDIO/MDC

ПозицияClause 22Clause 45
Адресация5-битный адрес PHY, 5-битный регистр (32 регистра)5-битный порт, 5-битное устройство (PMA/PMD, PCS, PHY XS, DTE XS, AN, вендор), 16-битный регистр
Ключевые регистры0 управление (сброс, скорость, разрешение AN, петля), 1 статус (линк, AN завершён), 2–3 ID PHY (OUI + модель), 4 объявление AN, 5 способности партнёра, 9/10 управление/статус 1000BASE-T, 17+ вендорские (задержка RGMII, светодиоды)1.x PMA, 3.x PCS, 7.x AN, 30.x/31.x вендорские
СкоростьMDC ≤ 2,5 МГц (на практике часто быстрее)так же
Инструменты Linuxmii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; драйвер через phylib, phylinkphytool read eth0/1:1/0

Для контраста: съёмные модули управляются по I²C, а не MDIO (Двухпроводной интерфейс). Исключение — внутренний PHY медного SFP: во многих конструкциях его регистры MDIO доступны через I²C модуля по вторичному адресу, так вендоры настраивают откат на 10/100 и поведение автосогласования.

Распространённые PHY и их интерфейсы

Семейство PHYИнтерфейсыТипичная плата
Marvell 88E1111 / 88E1512 / 88E1510GMII, RGMII, SGMII, TBIроутеры, медные модули SFP (88E1111)
Realtek RTL8211F / RTL8201RGMII / RMIIодноплатники, бытовые роутеры
Microchip KSZ9031 / KSZ8081 / LAN8720RGMII / RMII / RMIIпромышленные, платы МК
TI DP83867 / DP83848RGMII, SGMII / MII, RMIIпромышленные
Broadcom BCM54xxxRGMII, SGMII, QSGMIIкорпоративные коммутаторы (четверные/восьмерные PHY)
Marvell 88E1543 / 88E1548QSGMII четвернойкоммутаторы доступа на 48 портов

Неисправности по интерфейсам

СимптомИнтерфейсПричина
Линка нет никогда, ID PHY читаетсяRMIIнесовпадение направления/источника REF_CLK
100M работает, 1G без трафика / CRCRGMIIрежим задержки (ID) неверен или удвоен
Линк горит на PHY, MAC говорит downRGMII/SGMIIвнутриполосный статус выключен с одной стороны или нет опроса MDIO
Половина пакетов теряется на 1GGMII/RGMIIперекос длин дорожек, неверный уровень напряжения
PHY не найден на MDIOлюбойневерный адрес PHY (пины конфигурации), нет подтяжки MDIO
Скорость застряла на 10/100любойограничен регистр объявления AN, кабель или phy-mode без поддержки 1G

В CodingBox

Ничто на этой странице не проходит через EEPROM модуля — кроме медного SFP, чей внутренний PHY (обычно класса 88E1111) сидит за тем же I²C, который читает CodingBox. Когда медный модуль работает на 1G, но не на 10/100, ответ — в конфигурации этого PHY и режиме SGMII/1000BASE-X хоста, а не в байтах идентификации A0h (Медный Ethernet и DAC, SGMII и последовательный гигабит).