Что делает хост: обнаружение, проверка, запуск
Спецификации описывают сторону модуля — пины, память, состояния. Эта страница описывает сторону хоста: последовательность, которую коммутатор, маршрутизатор или сетевая карта выполняет с момента вставки модуля до прохождения трафика, с пинами, байтами и таймингами каждого шага. Зная её, вы превращаете «порт говорит unsupported» в «хост остановился на шаге 4» и понимаете, почему модуль, идеальный на столе, может всё равно отказать в порту.
Низкоскоростные сигналы по форм-факторам
| Форм-фактор | Присутствие | Сброс / питание | Прерывание / отказ | Прочее |
|---|---|---|---|---|
| SFP / SFP+ / SFP28 | MOD_ABS (низкий = присутствует) | — (TX_DISABLE управляет лазером) | TX_FAULT, RX_LOS | RS0, RS1 выбор скорости |
| XFP | Mod_ABS | P_Down/RST | Interrupt, Mod_NR (не готов), RX_LOS | TX_DIS, Mod_DeSel |
| QSFP+ / QSFP28 | ModPrsL | ResetL, LPMode | IntL | ModSelL |
| QSFP-DD | ModPrsL | ResetL, LPMode | IntL | ModSelL |
| OSFP | PRSn | RSTn, LPWn | INT | — (нет пина выбора, шина на порт) |
| SFP-DD | отсутствие модуля как у SFP | запрос низкого энергопотребления | прерывание | выбор скорости как у SFP |
Функции и распиновка по семействам: Аппаратные спецификации SFP, QSFP, XFP.
Последовательность
| # | Шаг | SFP (SFF-8472) | QSFP (SFF-8636) | CMIS | Как выглядит отказ |
|---|---|---|---|---|---|
| 1 | Обнаружить | MOD_ABS уходит в низкий; антидребезг | ModPrsL низкий | ModPrsL / PRSn низкий | порт пуст; модуль «не определяется» |
| 2 | Питание и ожидание | 3,3 В всегда подано; ждать t_init 300 мс | включить с высоким LPMode (только класс 1); ждать t_init 2 с или опрашивать Data_Not_Ready | то же; ждать выхода состояния модуля из MgmtInit (≤ 2 с) | чтение даёт FFh / 00h; идентификация пуста |
| 3 | Идентифицировать | прочитать A0h 0–95; байт 0 = 03h выбирает разбор SFF-8472 | прочитать 0–127 и верхнюю 00h; байт 0 = 0Dh/11h, байт 1 ревизия | прочитать нижнюю страницу и верхнюю 00h; байт 0 = 18h/19h…, байт 1 версия CMIS | unknown module type |
| 4 | Проверить | CC_BASE, CC_EXT; согласованность идентификатора/разъёма/кодирования | CC_BASE, CC_EXT | сумма страницы 00h | invalid EEPROM, checksum error — Контрольные суммы |
| 5 | Декодировать тип | байты соответствия 3–10, 36; скорость 12/66; длины; длина волны | байты 131–138, 192; 140/222 | тип среды 85, дескрипторы применений | speed and type not supported — Коды соответствия |
| 6 | Политика | имя вендора/PN (и, возможно, сигнатура) по таблице совместимости | то же | то же | unsupported transceiver, errdisable — Вендор-лок |
| 7 | Класс мощности | биты уровня байта 64 против бюджета порта | класс байта 129; записать байт 93 — снять низкую мощность / разрешить классы 5–8 | класс байта 200 против порта; снять LPMode или сбросить LowPwrRequestSW → модуль PwrUp → Ready | удержан в низкой мощности, power exceeds — Питание и тепло |
| 8 | Настроить | RS0/RS1 или программный выбор скорости; скорость, FEC, SGMII/1000BASE-X на стороне хоста | CDR вкл./выкл. (98), выбор скорости (87–88), каналы breakout на хосте | выбрать AppSel/DataPathID в staged control set → ApplyDPInit → тракт Init → Initialized | LOL, несовпадение FEC, отказ breakout — Скорость и режимы |
| 9 | Включить Tx | пин TX_DISABLE низкий или программный бит сброшен (A2h 110.6) | байт 86 = 00h | страница 10h байт 130 = 00h → DPTxTurnOn → DPActivated | дальний конец видит −40 дБм — Чек-лист «нет линка» |
| 10 | Линк | PHY/MAC видит сигнал; AN/обучение линка на DAC | то же по каналам | то же по трактам | линк down при хороших уровнях |
| 11 | Мониторить | опрос мониторов и флагов A2h каждые несколько секунд; пины TX_FAULT / RX_LOS | IntL → чтение флагов 3–21; опрос мониторов | IntL → флаги модуля + канальные флаги страницы 11h; VDM | аварии, флапы — Уровни DDM, Флап линка |
| 12 | Извлечь | MOD_ABS высокий → разобрать состояние | ModPrsL высокий | ModPrsL высокий | залипшее состояние, если антидребезг пропустил |
Шаги 3–6 у QSFP и CMIS идут в низком энергопотреблении: хост проверяет, прежде чем тратить мощность на оптику. Поэтому залоченный или неверно закодированный модуль никогда не зажигает лазер, а дальний конец читает −40 дБм у электрически исправного модуля.
Тайминги, которых ждёт хост
| Ожидание | SFP | QSFP | CMIS |
|---|---|---|---|
| Готовность управления после вставки | 300 мс | 2 с | ≤ 2 с (MgmtInit), затем состояние LowPwr |
| После снятия низкой мощности | — | до сброса Data_Not_Ready | до состояния модуля Ready (макс. длительность объявлена на странице 01h) |
| Инициализация тракта | — | — | объявлена по шагам (ниббл-код: < 1 мс … < 50 мин) |
| От включения Tx до света | t_on ≤ 1 мс | ton_txdis 100 мс / toff 400 мс | длительность DPTxTurnOn объявлена |
| От флага до прерывания | — | ton_IntL 200 мс | по аппаратной спецификации |
Тайминги уровня шины (t_WR, растяжение такта): Двухпроводной интерфейс.
Где политики хостов расходятся
- Строгость белого списка — от «только имя вендора» до подписанных вендорских блоков.
- Что происходит при отказе — порт выключен, лазер погашен или линк разрешён с записью в лог (Сторонние модули).
- Глубина CMIS — полное управление применениями/трактами или «снять LPMode и надеяться» (Проблемы CMIS).
- Умолчания FEC и скорости — выводятся из кодов соответствия или задаются статически.
- Опрос DDM — интервал, отключают ли пороги порт, применяется ли внешняя калибровка (Калибровка).
CLI по вендорам, чтобы увидеть, где хост остановился: Проверка оптики на коммутаторах.
Чем программатор отличается от хоста
Программатор, такой как CodingBox, выполняет шаги 1–5 и 11, но без политики: читает всё, что модуль показывает, включая вендорские области и байты пароля, держит CMIS-модули в низком энергопотреблении, если не просят иного, и никогда не включает лазер сам. Вот почему модуль может выглядеть здоровым на столе и всё равно отказать в порту — у стола нет шага 6.
В CodingBox
Check transceiver показывает результат шагов 3–5 так, как увидел бы их хост — тип, скорость, контрольные суммы, класс мощности — и отмечает противоречия до того, как модуль попадёт в порт; DDM закрывает шаг 11 живыми мониторами и флагами.