CMIS — общий интерфейс управления
CMIS, Common Management Interface Specification, — модель управления для всех новых высокоскоростных форм-факторов: QSFP-DD, OSFP, OSFP-XD, QSFP112, SFP-DD и SFP112 (как SFP+ с CMIS), DSFP, COBO и CMIS-совместимых QSFP. Она началась в QSFP-DD MSA (CMIS 3.0, 2018), была принята группами OSFP и COBO, а с версии 5.0 (2021) сопровождается в OIF. По сравнению с SFF-8636 это не карта памяти побольше, а другая модель: банки страниц до 32 каналов, явные конечные автоматы модуля и каждого тракта данных, применения вместо битовых полей соответствия, универсальная диагностика (VDM) и командный канал (CDB) для прошивки и расширенных функций. Байт версии и история: Ревизии спецификаций.
Модель памяти
| Область | Адресация | Содержимое |
|---|---|---|
| Нижняя страница (байты 0–127) | видна всегда | идентификатор, ревизия, состояние модуля, флаги, мониторы модуля, глобальное управление, тип среды, дескрипторы применений 1–8, пароль, выбор банка 126, выбор страницы 127 |
| Верхняя страница 00h (128–255) | страница 127 = 00h | блок вендора, класс мощности, разъём, длины кабеля, технология среды, контрольная сумма |
| 01h | объявление возможностей | ревизии прошивки/железа, длины линий, длина волны, поддерживаемые страницы и банки, длительности, управление целостностью сигнала, дескрипторы 9–15 |
| 02h | пороги | пороги аварий/предупреждений модуля и каналов |
| 04h | возможности лазера | сетки и диапазоны перестраиваемого лазера (наследие SFF-TA-1004) |
| 10h (банки) | управление каналами | деинициализация тракта, Tx disable, полярность, squelch, эквализация, staged control sets |
| 11h (банки) | состояние каналов | состояния трактов, поканальные флаги, мониторы каналов, статус конфигурации, active control set |
| 12h (банки) | управление перестраиваемым лазером | канал/длина волны по каналам |
| 13h–14h (банки) | диагностика | петли, генераторы и проверщики PRBS |
| 20h–2Fh (банки) | VDM | дескрипторы, выборки, пороги, флаги |
| 9Fh | CDB | командный блок: ID команды, длины, контрольная сумма, локальная нагрузка |
| A0h–AFh | CDB EPL | расширенная нагрузка для больших передач (образы прошивки) |
| 80h–FFh (прочие) | вендор | пользовательские страницы |
Банк адресует 8 каналов: банк 0 — каналы 1–8, банк 1 — 9–16 и т. д.; сколько реализовано — объявлено на странице 01h. Модули только со страницей 00h выставляют бит плоской памяти (байт 2 бит 7). Шина: один адрес A0h, до 400 кГц, ModSelL на слот — двухпроводной интерфейс.
Нижняя страница — байты, которыми живёт хост
| Байты | Поле | Примечания |
|---|---|---|
| 0 | Идентификатор | 18h QSFP-DD, 19h OSFP, 1Eh QSFP с CMIS… (SFF-8024) |
| 1 | Ревизия CMIS | нибблы major.minor: 50h = 5.0, 40h = 4.0, 30h = 3.0 |
| 2 | Характеристики памяти | бит 7 плоская память, плюс stepped-config-only и другие биты возможностей |
| 3 | Состояние модуля | биты 3–1: 1 LowPwr, 2 PwrUp, 3 Ready, 4 PwrDn, 5 Fault; бит 0 прерывание снято |
| 8–11 | Флаги модуля | смена состояния, аварии температуры/Vcc, aux-аварии, пользовательские; защёлкиваются, сбрасываются чтением |
| 14–25 | Мониторы модуля | температура, Vcc, Aux1–Aux3 (ток TEC, температура лазера, дополнительное питание), пользовательский |
| 26 | Глобальное управление | 5.x: бит 6 LowPwrAllowRequestHW, бит 5 метод squelch, бит 4 LowPwrRequestSW, бит 3 программный сброс (4.x: бит 6 LowPwr, бит 4 ForceLowPwr) |
| 37–38 | Статус CDB | занято / успех / отказ для командных блоков 1 и 2 |
| 39–40 | Активная прошивка | major.minor работающего образа |
| 85 | Тип среды | 01h MMF, 02h SMF, 03h пассивная медь, 04h активный кабель, 05h BASE-T |
| 86–117 | Дескрипторы применений 1–8 | по 4 байта: ID интерфейса хоста, ID медиа-интерфейса, число каналов хоста/среды, варианты назначения каналов хоста |
| 118–121 | Смена пароля | определяется вендором |
| 122–125 | Ввод пароля | определяется вендором — куда вводятся пароли защиты от записи |
| 126 | Выбор банка | — |
| 127 | Выбор страницы | — |
Конечный автомат модуля
Reset ──► MgmtInit ──► ModuleLowPwr ──► ModulePwrUp ──► ModuleReady
▲ │
└──────── ModulePwrDn ◄────────┘
(ModuleFault из любого состояния при фатальной ошибке)
- MgmtInit — модуль загружает контроллер; идентификация ещё не читается (до 2 с по аппаратным спецификациям).
- ModuleLowPwr — идентификация, объявления и пороги читаются; мощность ограничена классом 1; здесь хост валидирует модуль.
- ModulePwrUp → ModuleReady — хост снимает пин LPMode (или сбрасывает LowPwrRequestSW), модуль запитывает оптику; теперь можно инициализировать тракты.
- ModulePwrDn — обратный путь при выставлении LPMode.
Модуль, который никогда не выходит из LowPwr, — классический тикет CMIS: Проблемы CMIS, Питание и тепло.
Применения и тракт данных
Вместо битов соответствия CMIS-модуль объявляет применения — пары «электрический интерфейс хоста + медиа-интерфейс» с числом каналов:
| Дескриптор | Интерфейс хоста | Медиа-интерфейс | Каналы хоста / среды | Пример |
|---|---|---|---|---|
| App 1 | 12h 400GAUI-8 C2M | 1Ch 400GBASE-DR4 | 8 / 4 | один линк 400G |
| App 2 | 0Eh 100GAUI-2 C2M | 14h 100GBASE-DR | 2 / 1 | breakout 4 × 100G |
Хост выбирает применение для каждого канала, записывая AppSel (биты 7–4), DataPathID (биты 3–1) и бит явного управления в Staged Control Set 0 (страница 10h байты 145–152), затем выставляет ApplyDPInit (страница 10h байт 143). Модуль отвечает в ConfigStatus (страница 11h байты 202–205: принято, отвергнуто, неверный AppSel, недопустимая комбинация каналов…) и копирует принятые значения в Active Control Set (страница 11h 206–221). Далее каждый тракт идёт по своему автомату:
DPDeactivated ──► DPInit ──► DPInitialized ──► DPTxTurnOn ──► DPActivated
▲ │
└────────── DPDeinit ◄───────── DPTxTurnOff ◄──────────────┘
Состояния отдаются по каналам в байтах 128–131 страницы 11h (по нибблу на канал), а максимальные длительности каждого шага объявлены на странице 01h, чтобы хост знал, сколько ждать. Tx disable по каналам — байт 130 страницы 10h. Breakout, которого модуль не перечислил как применение, просто недоступен — Скорость и режимы.
Мониторинг: флаги, мониторы, VDM
- Мониторы модуля (нижняя страница 14–25) и мониторы каналов (страница 11h: мощность Tx 154–169, ток Tx 170–185, мощность Rx 186–201, по 2 байта на канал) используют те же 16-битные форматы, что SFP/QSFP (единицы).
- Пороги — на странице 02h; флаги защёлкиваются и сбрасываются чтением, с масками на каждый; IntL сигнализирует о любом незамаскированном флаге.
- VDM (страницы 20h–2Fh) добавляет наблюдаемые, которых у старых спецификаций не было: BER до FEC, неисправимые кадры FEC, SNR по каналам, температура и возраст лазера, eSNR, параметры переходов уровней PAM4 — каждая со своим дескриптором, порогами и флагами. Так модуль 400G сообщает о качестве линка до того, как ошибки дойдут до хоста (Мониторинг).
CDB — Command Data Block
Страница 9Fh — почтовый ящик: хост пишет ID команды (байты 128–129), длины нагрузки (130–132), контрольную сумму (133) и до 120 байт локальной нагрузки (136–255), при необходимости больше — в страницах EPL A0h–AFh; модуль исполняет и отчитывается в байтах статуса 37–38 и ответной нагрузке. Стандартные команды:
| Команда | Назначение |
|---|---|
| 0000h | запрос статуса |
| 0040h / 0041h | возможности модуля / возможности управления прошивкой |
| 0100h | сведения о прошивке (работающий и неактивный образы) |
| 0101h | начать загрузку прошивки |
| 0103h / 0104h | записать блок прошивки через LPL / EPL |
| 0107h | завершить загрузку |
| 0109h / 010Ah | запустить образ / зафиксировать образ |
| 0102h | прервать |
Через CDB вендорские утилиты обновляют прошивку модулей в поле, а некоторые вендоры реализуют конфигурацию и разблокировку. Поддержка и возможности объявлены на странице 01h.
Контрольные суммы и пароли
Байт 222 страницы 00h — сумма байтов 128–221; страницы 01h, 02h и 04h несут контрольную сумму страницы в байте 255 (Контрольные суммы). Пароли (122–125) и вендорские схемы разблокировки лежат вне спецификации — Перекодировка EEPROM.
Поддержка хостами
Сетевые ОС реализуют CMIS 4.0 и 5.x с разной глубиной: одни ведут полный цикл применение/тракт, другие снимают LPMode и ждут, что модуль поднимется сам. За этой разницей стоит большинство тикетов «опознан, но не готов» — Проблемы CMIS, Что делает хост.
В CodingBox
CodingBox определяет CMIS по идентификатору и байту ревизии, читает нижнюю память, страницы 00h, 01h, 02h и банковые страницы каналов, декодирует дескрипторы применений по SFF-8024, показывает состояния модуля и трактов и поканальные мониторы на DDM, правит идентификацию с пересчётом контрольных сумм страниц в редакторе EEPROM. Операции с прошивкой через CDB вендорские и лежат вне области редактора.
Таблицы уровня регистров: Карта нижней страницы, Карта верхних страниц 00h/01h/02h, Карта канальных страниц 10h/11h, VDM, CDB.