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 и RX | rgmii-id | сегодня самый распространённый |
| Внутренняя задержка в MAC/SoC | добавляет SoC | rgmii с регистром задержки на стороне 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 и последовательный гигабит).
Сравнение
| Интерфейс | Пины (данные + упр.) | Такт | Макс. скорость | Напряжение | Типичное применение |
|---|---|---|---|---|---|
| MII | 16 | 25 МГц от PHY | 100M | 3,3/5 В | МК, наследие |
| RMII | 7–9 | 50 МГц общий | 100M | 3,3 В | встраиваемый SoC + PHY |
| SMII | 2–3/порт | 125 МГц | 100M | 3,3 В | многопортовые PHY (Cisco) |
| GMII | 24 | 125 МГц (MAC tx / PHY rx) | 1G | 2,5 В | FPGA, внутри чипа |
| RGMII | 12 | 125 МГц DDR | 1G | 2,5/1,8/1,5 В | SoC ↔ PHY на платах |
| SGMII | 4 (2 пары) | 1,25 ГБод встроенный | 1G (10/100 повторением) | CML | SoC ↔ PHY, клетки SFP |
Управление PHY: MDIO/MDC
| Позиция | Clause 22 | Clause 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 МГц (на практике часто быстрее) | так же |
| Инструменты Linux | mii-tool -v eth0, phytool read eth0/1/0, ethtool eth0; драйвер через phylib, phylink | phytool read eth0/1:1/0 |
Для контраста: съёмные модули управляются по I²C, а не MDIO (Двухпроводной интерфейс). Исключение — внутренний PHY медного SFP: во многих конструкциях его регистры MDIO доступны через I²C модуля по вторичному адресу, так вендоры настраивают откат на 10/100 и поведение автосогласования.
Распространённые PHY и их интерфейсы
| Семейство PHY | Интерфейсы | Типичная плата |
|---|---|---|
| Marvell 88E1111 / 88E1512 / 88E1510 | GMII, RGMII, SGMII, TBI | роутеры, медные модули SFP (88E1111) |
| Realtek RTL8211F / RTL8201 | RGMII / RMII | одноплатники, бытовые роутеры |
| Microchip KSZ9031 / KSZ8081 / LAN8720 | RGMII / RMII / RMII | промышленные, платы МК |
| TI DP83867 / DP83848 | RGMII, SGMII / MII, RMII | промышленные |
| Broadcom BCM54xxx | RGMII, SGMII, QSGMII | корпоративные коммутаторы (четверные/восьмерные PHY) |
| Marvell 88E1543 / 88E1548 | QSGMII четверной | коммутаторы доступа на 48 портов |
Неисправности по интерфейсам
| Симптом | Интерфейс | Причина |
|---|---|---|
| Линка нет никогда, ID PHY читается | RMII | несовпадение направления/источника REF_CLK |
| 100M работает, 1G без трафика / CRC | RGMII | режим задержки (ID) неверен или удвоен |
| Линк горит на PHY, MAC говорит down | RGMII/SGMII | внутриполосный статус выключен с одной стороны или нет опроса MDIO |
| Половина пакетов теряется на 1G | GMII/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 и последовательный гигабит).