Контроллер и прошивка: 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; выбор применения; squelch | CMIS |
| Защита и вендорские функции | пароли, области защиты записи, команды сохранения, вендорская разблокировка, сигнатуры аутентификации | Типы защиты от записи |
| 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) |
| Карта, эмулируемая MCU | MCU отвечает на каждый запрос шины из 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 отмечает диапазоны, которые спецификация определяет как только читаемые или вендорские, чтобы вы знали, когда пишете на частную территорию прошивки.