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

Контроллер и прошивка: DDM, APC, память, защита

В каждом управляемом трансивере есть маленький компьютер. Микроконтроллер (MCU) измеряет, регулирует, отчитывается и — с точки зрения программатора самое важное — является той памятью, которую вы читаете и пишете. Стоит ли в модуле простая EEPROM или MCU, притворяющийся ею, решает, как его можно кодировать, почему часть записей исчезает после перезагрузки по питанию и зачем вообще существуют пароли. Здесь — что делает контроллер и как его конструкция проявляется на столе.

Что делает MCU

ЗадачаДеталиВидно как
Измерениенесколько раз в секунду снимает через 10–12-битный ADC температуру (термистор или встроенный датчик), Vcc, ток лазера, ток монитор-PD (Tx) и фототок приёмника (Rx); применяет заводскую калибровкузначения DDM — Параметры
APC — автоматическое управление мощностьюсравнивает ток монитор-PD с заводской целью и подстраивает DAC смещения драйверапостоянный Tx, растущий ток — Ток смещения и старение
Температурная компенсациятаблицы подстраивают ток модуляции и, у PAM4, настройки DSP по температурестабильный коэффициент гашения
Управление TECПИД-петля удержания температуры лазера у охлаждаемых модулей; обратная связь захвата длины волны у DWDMмониторы температуры лазера, тока TEC
Пороги и флагисравнивает каждый монитор с порогами аварий/предупреждений, ставит защёлкнутые флаги, управляет IntLПороги и аварии
Низкоскоростные пинычитает TX_DISABLE, RS0/RS1, LPMode, ResetL; управляет TX_FAULT, RX_LOS (или пропускает аппаратные сигналы)поведение пинов
Ведомый двухпроводной шиныотвечает по A0h/A2h (SFP) или A0h со страницами/банками (QSFP, CMIS)карта памяти — Двухпроводной интерфейс
Автоматы состоянийсостояния модуля и тракта CMIS; выбор применения; squelchCMIS
Защита и вендорские функциипароли, области защиты записи, команды сохранения, вендорская разблокировка, сигнатуры аутентификацииТипы защиты от записи
CDB / обновление прошивкиу CMIS-модулей принимает и прошивает новые образыбайты версии прошивки

Типичные детали: 8-битные MCU (класса 8051) с несколькими кБ флеша в дешёвых SFP/SFP+; 32-битные класса Cortex-M в модулях 100G+ и CMIS; часть вендоров использует специальную ASIC контроллера трансивера с интегрированными ADC, DAC и ведомым двухпроводной шины.

Два способа построить память

КонструкцияКак хранится картаПоследствия для программирования
Отдельная EEPROM (класса AT24C02) для A0h, MCU для A2hидентификация A0h — настоящая последовательная EEPROM, с которой хост и программатор говорят напрямую; MCU занимается только диагностикойзаписи в A0h — обычные записи EEPROM: соблюдать t_WR и размер страницы; аппаратный пин WP может их блокировать (типы защиты 1–3)
Карта, эмулируемая MCUMCU отвечает на каждый запрос шины из RAM и зеркалит изменения во внутренний флеш/EEPROM — или нетзаписи идут туда, куда решит прошивка: приняты, проигнорированы, закрыты паролем, сохранены только после команды сохранения или затёрты собственной копией прошивки при следующей загрузке (типы 4–5)
ГибридEEPROM для блока вендора, MCU для страниц и паролейсмешанные правила по диапазонам байтов

Эмулируемая карта объясняет большинство столовых загадок: FFh со страницы, которую прошивка не реализует, записи, которые «проходят» и откатываются, байты, только читаемые в одном диапазоне и свободные в соседнем, растяжение такта, пока MCU занят выборкой (Ошибки чтения и записи EEPROM).

Загрузка и окно t_init

При включении MCU грузит калибровку и идентификацию из энергонезависимого хранилища, запускает ADC, выводит APC на цель и только затем включает ведомого двухпроводной шины и сбрасывает данные не готовы. Это те 300 мс (SFP) — 2 с (QSFP/CMIS), которые спецификации отводят, прежде чем хост может ждать ответов, и причина, по которой чтение сразу после вставки возвращает мусор (Что делает хост).

Калибровка живёт здесь

Сырые отсчёты ADC ничего не значат без констант, которые завод измерил на тестовой станции: ток монитор-PD против реальной мощности запуска, фототок приёмника против входной мощности на длине волны модуля, кривая термистора, масштаб DAC смещения. У внутренне калиброванных модулей прошивка применяет их и отдаёт физические единицы; у внешне калиброванных константы записаны в A2h 56–91, чтобы применял хост (Калибровка). Затирание вендорской области, где некоторые прошивки держат эти константы, даёт абсурдный DDM или мёртвую петлю APC — классический способ «убить» модуль неосторожной записью (Производство и тестирование).

Как реализована защита

МеханизмРеализацияВид со стола
Парольпрошивка сравнивает 4 байта, записанные в область пароля (SFP A2h 123–126, QSFP 123–126, CMIS 122–125), с хранимым значением; открывает запись на сессиюWRITE FAIL, пока не введено верное значение — Пароли
Области защиты записипрошивка игнорирует записи в диапазоны, которые считает только читаемыми (суммы, пороги, калибровка, вендорская область)байты читаются обратно неизменными, без ошибки
Аппаратный пин WP у отдельной EEPROMпин подтянут внутри модуля или управляется MCUнужна плата-программатор, которая им управляет
Команда сохранениязаписи ложатся в RAM; вендорская последовательность фиксирует их во флешеоткат после перезагрузки, если последовательность не отправлена
Зеркало прошивкипри загрузке прошивка переписывает карту из собственного образаизменения исчезают при каждой перезагрузке — образ меняет только утилита вендора
Аутентификацияпрошивка вычисляет сигнатуру (хеш серийника, вендорских данных и секрета) в вендорские байты; хост проверяетправки идентификации проходят суммы, а хост всё равно отвергает — Вендор-лок

Как распознать и программировать каждый тип: Типы защиты от записи, Перекодировка EEPROM.

Обновление прошивки

CMIS-модули принимают прошивку по двухпроводной шине командами CDB (начать загрузку, писать блоки, завершить, запустить, зафиксировать), часто с двумя банками образов, чтобы неудачное обновление откатывалось. У модулей SFF-8472/8636 стандартного механизма нет; вендоры используют проприетарные последовательности через вендорские байты. Исправления прошивки — способ, которым вендоры решают проблемы совместимости CMIS (Проблемы CMIS), и байты версии прошивки (нижняя страница CMIS 39–40, страница 01h 128–129) стоит записывать вместе с идентификацией.

Отказы контроллера

СимптомВероятная причина
Модуль невидим на шине, оптика в остальном исправнаMCU не загружается: испорченная прошивка, просадка питания, повреждённый кварц
Значения DDM заморожены или абсурдныповреждение ADC или калибровки; зависание прошивки
Tx уходит, хотя APC должен держатьотказ монитор-PD или ADC, APC отключён
Случайные NACK, медленное чтениеMCU перегружен (выборка), быстрый программатор превысил пределы растяжения такта
Работает, но каждая запись откатываетсязеркало прошивки по замыслу — не отказ
Модуль мёртв после записизатёрта область конфигурации или калибровки прошивки

В CodingBox

CodingBox работает с модулем так, как его представляет прошивка: определяет тип карты, применяет известные пароли и сценарии программирования для конструкций с командой сохранения и зеркалом, пересчитывает контрольные суммы, снимает резервную копию перед каждой записью и позволяет восстановить её из базы кодов, если контроллер отреагировал плохо. Редактор EEPROM отмечает диапазоны, которые спецификация определяет как только читаемые или вендорские, чтобы вы знали, когда пишете на частную территорию прошивки.