Кодирование QSFP28 и QSFP-DD: где живёт блок идентификации, когда уходишь от SFF-8472 A0h/A2h
Я делаю небольшие партии перекодирования модулей для интеграторов, и до сих пор всё на моём стенде было в формате SFP: читаешь 256 байт по A0h с серийной идентификацией в первой половине, читаешь A2h для диагностики и порогов, пишешь блок идентификации, готово. Теперь у клиента появились компоненты на 100G и 400G, и моя оснастка явно не справляется.
- модули для перекодирования: лоток QSFP28, несколько QSFP-DD и один образец OSFP
- текущий программатор: обычный I2C, читает и пишет A0h и A2h, вообще без выбора страницы
- хосты на дальнем конце проверяют имя вендора, партномер и серийный номер перед тем, как зажечь порт
Мои рабочие заметки о том, как устроена память, что я и хочу проверить:
SFP/SFP+/SFP28 (SFF-8472): A0h 256B, serial ID in first 128B; A2h 256B diagnostics + thresholds, optional 128B pages
QSFP+/QSFP28 (SFF-8636): single A0h, 128B pages selected by byte 7Fh, page 00h mandatory
XFP (INF-8077i): byte 7Fh picks the active table, with serial ID in table 01h and user EEPROM in 02h
OSFP/QSFP-DD/SFP-DD (CMIS 5.x): lower 128B fixed, upper memory by bank and page via 7Eh and 7Fh
Что я пробовал:
- снять дамп QSFP28 своим профилем SFP, что даёт мне нижнюю половину плюс то, что оказалось выбранной страницей
- сделать два дампа одного и того же модуля подряд, чтобы увидеть, какие байты меняются сами по себе
Эта карта верна, и какие поля мне реально нужно записывать для кодирования вендора, когда память постраничная и побанковая?
Comments 5
Карта верна по существу. Чего не хватает вашей оснастке, так это того, что на SFF-8636 есть только один адрес, а верхние 128 байт - это окно: вы записываете номер страницы в байт 7Fh, затем читаете верхнюю половину и получаете именно эту страницу. Страница 00h обязательна и содержит блок идентификации, так что для кодирования редко нужно идти куда-то ещё. CMIS добавляет поверх этого банк - 7Eh выбирает банк, 7Fh страницу, а нижние 128 байт остаются фиксированными и всегда доступными для чтения. Без выбора страницы ваш инструмент продолжает отдавать вам ту страницу, на которой модуль остановился, что в точности то поведение, которое вы описали.
Поля, важные для кодирования вендора, везде одни и те же: имя вендора, партномер, ревизия, серийный номер, OUI и контрольные суммы. Ошибитесь в контрольной сумме - и придирчивый хост выбросит модуль, даже если каждая строка в hex-дампе выглядит идеально. Ещё одно, к чему стоит быть готовым: некоторые модули защищают вендорские функции паролями производителя и хоста, при этом простое чтение остаётся открытым, так что можно спокойно снять дамп с компонента, который не можете записать.
Контрольные суммы - именно то, на чём я попался с первой попытки: строки совпадали с заведомо рабочим модулем побайтово, а хост всё равно отклонял компонент. Хорошо знать, что страницы 00h достаточно для блока идентификации, это удерживает объём работы небольшим.
Честное резюме тогда - что мой программатор вообще не может это сделать, потому что у него нет способа записать байт 7Fh перед чтением. Я скорее куплю плату, чем буду прикручивать выбор страницы к самодельной оснастке ради одного заказа. Есть ли что-то на рынке, правильно работающее с банками CMIS, или это скорее фича из даташита?
Коммерческие платы это действительно рекламируют - SFPTotal Plus X, оборудование Reveltronics (REVELPROG-IS), программаторы EDGE и Flexoptix все включают QSFP-DD и OSFP в список возможностей, и туда же добавляют базу кодов вендоров. SFPTotal заявляет более 25 000 кодов, включая Cisco, Huawei и HPE.
Насколько это совпадает с конкретными компонентами на вашем стенде - другой вопрос, и я бы тоже не полагался на моё слово. Если можете, привезите образец QSFP-DD клиента к плате, прежде чем решиться на покупку. Поддержка форм-фактора в даташите - не то же самое, что поддержка конкретного модуля у вас в руках, и именно на побанковых компонентах этот разрыв проявляется.
Для контраста, обычная работа с SFP так же груба, как и всегда: реально важны только первые 128 байт из 256-байтового дампа, остальное зарезервировано производителем, и люди годами пишут образы GLC-LX или GLC-BX-D/GLC-BX-U на обычные компоненты CWDM, чтобы их принял Catalyst 3560, HP J8692A или EX4200-24F. Схемы самодельных программаторов для этого ходили по рукам, serp-0.3 - та, что собрал я, а дампы с Finisar FCMJ-8521-3, HP J4858C или J4859C или D-Link DEM-310GT были обычными эталонами.
Совсем другой зверь, но стоит знать на случай, если на стенд попадут GPON-стики: там кодирования снаружи вообще нет. На FS GPON-ONU-34-20BI, родственнике Nokia G-010S-A, вы получаете оболочку прямо на самом стике - с подключённым волокном он отвечает на 192.168.1.10 как ONTUSER - задаёте серийный номер и MAC через uci, и переписываете строки вендора EEPROM изнутри с помощью sfp_i2c.
У QDD и OSFP структура CMIS, и в Page 0 содержится только один байт контрольной суммы.