Как проверить и пересчитать контрольную сумму прошивки SFP

23.10.2026 19:40
Справка и помощь

Чтобы проверить контрольную сумму прошивки SFP в SFPTotal Wizard, считайте нужную область памяти или откройте сохранённый код и выполните Edit → Verify Checksum. Для пересчёта используйте Edit → Set checksum. Перед изменениями сохраните исходные данные, а после записи в трансивер проверьте результат повторным чтением.

В этой инструкции под прошивкой SFP понимается код памяти трансивера. Подробный пример относится к полям идентификации SFP/SFP+ по SFF-8472; для другой карты памяти нужно выбирать её собственные поля и диапазоны.

Что такое контрольная сумма прошивки SFP

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

Контрольные поля EEPROM и SHA-256 скачанного файла решают разные задачи. Хеш файла сравнивают с опубликованным значением для того же файла. Поля CC_BASE и CC_EXT проверяют заданные участки данных внутри памяти SFP. Успешная проверка этих полей не подтверждает совместимость с коммутатором и не удостоверяет весь образ памяти.

Где находятся CC_BASE и CC_EXT у SFP

Поля в области A0h по SFF-8472; смещения десятичные и шестнадцатеричные
ПолеБайт храненияДиапазон для расчёта
CC_BASE63 / 0x3F0–62 / 0x00–0x3E включительно
CC_EXT95 / 0x5F64–94 / 0x40–0x5E включительно

По SFF-8472, разделам 8.2 и 8.12, для этих полей берётся младший байт суммы значений указанного диапазона. Сам байт контрольной суммы в расчёт не входит:

CC_BASE = (A0h[0] + ... + A0h[62]) mod 256
CC_EXT  = (A0h[64] + ... + A0h[94]) mod 256

Например, результат 0x0123 после взятия младшего байта становится 0x23. Для этих полей не нужно вычислять CRC32 или брать дополнение суммы до нуля. Сначала определите адресную область: A0h и A2h — разные области, одинаковое смещение в них обозначает разные данные.

Пример: что меняется после редактирования одного байта

Возьмём искусственный учебный буфер из 63 байтов, с индексами 0–62. Установим байты 0–3 равными 03 04 07 10, байт 40 — 41; остальные байты равны нулю. Это пример арифметики, а не готовый образ для записи в реальный трансивер.

03 + 04 + 07 + 10 + 41 = 5F  (все числа шестнадцатеричные)
CC_BASE в байте 63 = 5F

Теперь изменим байт 40 с 41 на 42, сохранив старый байт 63:

ЭтапБайт 40Сохранено в байте 63ВычисленоРезультат
Исходные данные0x410x5F0x5FСовпадает
После изменения0x420x5F0x60Не совпадает
После пересчёта0x420x600x60Совпадает

При включённом автоматическом пересчёте редактор может сразу обновить контрольное поле. Для самостоятельного повторения примера работайте с копией файла и учитывайте состояние Edit → Autoset checksum. После упражнения восстановите привычную настройку программы.

Проверка в SFPTotal Wizard: порядок действий

  1. Получите исходный код. Выберите тип модуля и область памяти, затем считайте данные. При работе с файлом убедитесь, что известны его формат, начальное смещение и полнота данных. Сверьтесь с инструкцией чтения.
  2. Сохраните исходное состояние. Сделайте резервную копию памяти до изменения кода. Для работы с файлом сохраните отдельную неизменённую копию.
  3. Проверьте исходные данные. Выполните Edit → Verify Checksum до редактирования, чтобы отличить исходное несоответствие от результата своих изменений.
  4. Оцените результат. В действующем руководстве Wizard верные контрольные поля отмечаются зелёным, ошибочные — красным. Откройте CODE TABLE или CODE DETAILS и уточните, какое поле не совпало.
  5. Внесите необходимые изменения. Проверьте режим Edit → Autoset checksum. При ручном пересчёте выполните Edit → Set checksum, затем снова Verify Checksum.
  6. Сохраните подготовленный код. Повторное открытие сохранённого файла помогает проверить, что вы сохранили именно текущий вариант редактора.
  7. Проверьте данные после записи. Если запись в модуль выполнялась, заново считайте соответствующую область и повторите проверку. Сравните считанный код с подготовленным вариантом, а не только с сообщением об успешном завершении операции.

Проверка контрольной суммы прошивки SFP в SFPTotal Wizard: сообщение Checksums are correct и поля памяти

Снимок из действующей инструкции SFPTotal Wizard. Команды и индикация описаны по руководству; расположение элементов может отличаться между версиями программы.

Пересчёт в редакторе и запись в память — отдельные операции. Исправление значения на экране нужно подтверждать чтением из модуля после фактической записи.

Что делать, если контрольная сумма не совпадает

СитуацияЧто проверить
Ошибка появилась после редактированияПересчитано ли соответствующее поле; включён ли Autoset checksum; тот ли вариант кода сохранён.
Ошибка присутствует в исходном чтенииПовторяемость чтения, выбор типа модуля и области, полноту буфера. Сохраните исходник и сравните повторные чтения.
До записи проверка успешна, после — нетЗаписались ли данные и само контрольное поле; есть ли защита от записи или ошибки обмена. Сопоставьте прочитанные байты с подготовленным кодом и журналом ошибок.
Checksum верна, но коммутатор не принимает модульСовместимость, параметры порта и соответствие кода аппаратному модулю. Одна контрольная сумма не проверяет эти условия.
После «исправления» данные всё ещё сомнительныПравильность самих значений. Можно получить совпадающую сумму для ошибочных данных, поэтому сначала выясните происхождение несоответствия.

Почему нельзя переносить адреса SFP на другие модули

Для модулей с картой SFF-8636, например соответствующих QSFP+/QSFP28, контрольные поля находятся в верхней области страницы 00h:

Поле SFF-8636Байт храненияДиапазон для расчёта
CC_BASE191 / 0xBF128–190 включительно
CC_EXT223 / 0xDF192–222 включительно

Эти адреса приведены по SFF-8636, редакции 2.12. Они не заменяют карту конкретного модуля. У устройств с другим интерфейсом управления, в том числе CMIS, проверяются свои страницы и диапазоны; ориентироваться только на форму корпуса нельзя.

Отдельное поле CC_DMI в области A2h относится к блоку диагностических данных и настроек SFP. Это другой расчёт, чем CC_EXT в A0h. Особенности изменения соответствующих регистров описаны в разделе 9.7 SFF-8472; текущее содержимое блока не всегда достаточно интерпретировать без учёта режима работы модуля.

Частые вопросы

Как сверить контрольные суммы двух файлов?

Чтобы проверить совпадение файлов целиком, сравните их хеши одним алгоритмом, например SHA-256. Для проверки полей EEPROM откройте код в правильной карте памяти и выполните проверку соответствующих диапазонов. Совпадение одного контрольного байта не означает, что два файла одинаковы.

Нужно ли вручную менять байт CC_BASE?

Обычно удобнее выполнить пересчёт средствами редактора и затем проверить результат. Ручное изменение контрольного байта требует того же расчёта и проверки исходных данных; оно не заменяет выяснение причины ошибки.

Почему контрольная сумма изменилась после правки имени или номера?

Если изменённый байт входит в проверяемый диапазон, его значение участвует в сумме. Поэтому после редактирования требуется проверить соответствующее контрольное поле.

Документация и связанные материалы