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

Ошибки чтения и записи EEPROM на программаторе

Прежде чем модуль можно диагностировать или закодировать, его надо прочитать — а затем, часто, записать. Оба шага отказывают характерными способами. Здесь каждый отказ сопоставлен с причиной и с настройкой или процедурой, которая его лечит, — от модуля, которого вообще не видно, до записи, которая «проходит» и тихо исчезает.

Модуль не определяется

ПроверкаПочему
Посадка и колыбельмодуль должен сесть до упора; используйте адаптер под его форм-фактор — SFP в колыбели QSFP не увидится
Время включениямодулям нужно до ~2 с (SFP) или дольше (CMIS) после вставки, прежде чем двухпроводная шина ответит
Сигнал присутствияMOD_ABS / ModPrsL должен сработать; погнутый контакт или модуль без сигнала выглядят отсутствующими
Состояние low-power (CMIS)идентификация читается в LowPwr, но некоторые хосты/программаторы ждут Ready для полного доступа
Скорость шиныначинайте со 100 кГц или ниже; часть модулей отвечает NACK на 400 кГц
Мёртвый модульни DDM, ни идентификации на любой скорости — подтвердите на второй плате, прежде чем списывать

Чтение возвращает FFh, 00h или мусор

СимптомПричинаРешение
Сплошные FFhNACK по I²C — нет устройства по этому адресу или нет такой страницыпроверить адрес (A0h идентификация / A2h диагностика у SFP; один A0h со страницами у QSFP/CMIS)
Сплошные 00hмодуль без питания / в сбросе; или действительно чистая EEPROMпроверить питание колыбели, присутствие модуля; чистые модули существуют (некодированный сток)
Длина верная, содержимое чужоечитается не та страницазаписать байт выбора страницы (127) и перечитать; у CMIS также выбор банка (126)
Искажённые / сдвинутые байтышина слишком быстрая, длинный кабель, конфликт с хостомопуститься до ≤ 100 кГц; короткие провода; читать на столе, а не в живом коммутаторе
A2h не читается, A0h в порядкемодуль без диагностики или защищённый блок диагностикипроверить бит 6 байта 92 A0h (DDM реализован); некоторые защищённые типы отвечают только по A0h
Значения меняются между чтениямиживые мониторы — норма; либо данные не готовыбайты DDM и должны меняться; проверяйте бит готовности данных, прежде чем верить снимку

Запись отказывает сразу

WRITE FAIL, NACK на данных или байт читается обратно неизменным:

ПричинаКак распознатьЧто делать
Нужен пароль (контроллер прошивки)запись отвергается, пока по адресу пароля не окажется верное значение (SFP A2h 0x7B–0x7E, QSFP 123–126, CMIS 122–125)ввести пароль модуля в Защищённой памяти и паролях; известные пароли вендоров применяются из базы
Аппаратная защита записитолько чтение независимо от пароля, переживает перезагрузкипин WP должна управлять плата-программатор — софтом не обойти; см. Типы защиты от записи
Таймингиперебои, частично записанные страницызамедлить частоту (для надёжной записи EEPROM часто нужен ~1 кГц), выдерживать время цикла записи (5–10 мс) между байтами/страницами, добавить паузы между блоками
Область только для чтенияконкретные байты никогда не меняются (контрольные суммы, пороги у некоторых, вендорская область)у EEPROM есть защищённая область по замыслу; пишите только разрешённые поля
Неверное состояниеCMIS-модули могут требовать LowPwr или деактивированный data-path перед записьюсначала перевести модуль в нужное состояние
Страница не выбранаверное смещение записано на не той страницевыставить байт 127 (и 126) перед записью и проверить, прочитав байт выбора страницы обратно

Запись «прошла», но не держится

  • Откатывается после перезагрузки — модуль хранит запись во временной памяти и требует команду сохранения вендора; без неё возвращается старый образ. Делается сценарием программирования (защита типа 4).
  • Откатывается сразу — микроконтроллер зеркалит EEPROM из своего хранилища и перезаписывает ваши байты; нужен алгоритм производителя (тип 5).
  • Часть байтов держится, часть нет — частично защищённая карта; пишите по полям и проверяйте каждое.

Хост отвергает модуль после успешной записи

ПричинаРешение
Устарели контрольные суммы — CC_BASE (байт 63), CC_EXT (95), CC_DMI (A2h 95), QSFP 191/223пересчитать; CodingBox делает это автоматически при записи (Карта памяти)
Идентификация стала противоречивой — например, вендор сменён, а коды соответствия или длина волны подразумевают другое железодержать идентификацию согласованной с реальной оптикой (Скорость и режимы, Несовпадения физического уровня)
Записана раскладка не того типа модуляXFP записан как SFP или путаница со страницами QSFP — восстановить из резервной копии

Модуль мёртв после записи

Мусор поверх констант калибровки, порогов или вендорской области (где некоторые контроллеры хранят свою конфигурацию) может убить модуль. Путь восстановления: вернуть резервную копию, снятую CodingBox перед записью, из базы кодов, затем записать только нужные поля.

Золотые правила

  1. Сначала прочитать и сохранить — каждой записи должно предшествовать полное чтение, попадающее в базу.
  2. Определить тип защиты до первой попытки записи (Типы защиты от записи).
  3. Не спешить — частота и паузы между байтами решают большинство «случайных» отказов.
  4. Писать только то, что нужно — поля, а не целые страницы, если это не восстановление образа.
  5. Проверять перечитыванием после перезагрузки по питанию.

В CodingBox

CodingBox читает модули с правильным адресом и страничностью для каждого форм-фактора, показывает сырые и декодированные байты в редакторе EEPROM, пересчитывает контрольные суммы при записи, автоматически сохраняет резервную копию и поддерживает ввод пароля и сценарии программирования для защищённых модулей и модулей с командой сохранения (Запись модуля). Если подозревается неисправность платы — см. продуктовое Устранение неполадок.

Механика шины за этими отказами — адреса, выбор страницы, время цикла записи, растяжение такта: Двухпроводной интерфейс.