Чтобы проверить контрольную сумму прошивки SFP в SFPTotal Wizard, считайте нужную область памяти или откройте сохранённый код и выполните Edit → Verify Checksum. Для пересчёта используйте Edit → Set checksum. Перед изменениями сохраните исходные данные, а после записи в трансивер проверьте результат повторным чтением.
В этой инструкции под прошивкой SFP понимается код памяти трансивера. Подробный пример относится к полям идентификации SFP/SFP+ по SFF-8472; для другой карты памяти нужно выбирать её собственные поля и диапазоны.
Контрольная сумма — вычисляемое значение, которое сравнивают с сохранённым контрольным полем. Расхождение помогает обнаружить изменение данных в проверяемом диапазоне. Оно требует разбора: это может быть несохранённый пересчёт после редактирования, неверно выбранная область или отличие фактически прочитанных данных.
Контрольные поля EEPROM и SHA-256 скачанного файла решают разные задачи. Хеш файла сравнивают с опубликованным значением для того же файла. Поля CC_BASE и CC_EXT проверяют заданные участки данных внутри памяти SFP. Успешная проверка этих полей не подтверждает совместимость с коммутатором и не удостоверяет весь образ памяти.
| Поле | Байт хранения | Диапазон для расчёта |
|---|---|---|
| CC_BASE | 63 / 0x3F | 0–62 / 0x00–0x3E включительно |
| CC_EXT | 95 / 0x5F | 64–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 | Вычислено | Результат |
|---|---|---|---|---|
| Исходные данные | 0x41 | 0x5F | 0x5F | Совпадает |
| После изменения | 0x42 | 0x5F | 0x60 | Не совпадает |
| После пересчёта | 0x42 | 0x60 | 0x60 | Совпадает |
При включённом автоматическом пересчёте редактор может сразу обновить контрольное поле. Для самостоятельного повторения примера работайте с копией файла и учитывайте состояние Edit → Autoset checksum. После упражнения восстановите привычную настройку программы.

Снимок из действующей инструкции SFPTotal Wizard. Команды и индикация описаны по руководству; расположение элементов может отличаться между версиями программы.
Пересчёт в редакторе и запись в память — отдельные операции. Исправление значения на экране нужно подтверждать чтением из модуля после фактической записи.
| Ситуация | Что проверить |
|---|---|
| Ошибка появилась после редактирования | Пересчитано ли соответствующее поле; включён ли Autoset checksum; тот ли вариант кода сохранён. |
| Ошибка присутствует в исходном чтении | Повторяемость чтения, выбор типа модуля и области, полноту буфера. Сохраните исходник и сравните повторные чтения. |
| До записи проверка успешна, после — нет | Записались ли данные и само контрольное поле; есть ли защита от записи или ошибки обмена. Сопоставьте прочитанные байты с подготовленным кодом и журналом ошибок. |
| Checksum верна, но коммутатор не принимает модуль | Совместимость, параметры порта и соответствие кода аппаратному модулю. Одна контрольная сумма не проверяет эти условия. |
| После «исправления» данные всё ещё сомнительны | Правильность самих значений. Можно получить совпадающую сумму для ошибочных данных, поэтому сначала выясните происхождение несоответствия. |
Для модулей с картой SFF-8636, например соответствующих QSFP+/QSFP28, контрольные поля находятся в верхней области страницы 00h:
| Поле SFF-8636 | Байт хранения | Диапазон для расчёта |
|---|---|---|
| CC_BASE | 191 / 0xBF | 128–190 включительно |
| CC_EXT | 223 / 0xDF | 192–222 включительно |
Эти адреса приведены по SFF-8636, редакции 2.12. Они не заменяют карту конкретного модуля. У устройств с другим интерфейсом управления, в том числе CMIS, проверяются свои страницы и диапазоны; ориентироваться только на форму корпуса нельзя.
Отдельное поле CC_DMI в области A2h относится к блоку диагностических данных и настроек SFP. Это другой расчёт, чем CC_EXT в A0h. Особенности изменения соответствующих регистров описаны в разделе 9.7 SFF-8472; текущее содержимое блока не всегда достаточно интерпретировать без учёта режима работы модуля.
Чтобы проверить совпадение файлов целиком, сравните их хеши одним алгоритмом, например SHA-256. Для проверки полей EEPROM откройте код в правильной карте памяти и выполните проверку соответствующих диапазонов. Совпадение одного контрольного байта не означает, что два файла одинаковы.
Обычно удобнее выполнить пересчёт средствами редактора и затем проверить результат. Ручное изменение контрольного байта требует того же расчёта и проверки исходных данных; оно не заменяет выяснение причины ошибки.
Если изменённый байт входит в проверяемый диапазон, его значение участвует в сумме. Поэтому после редактирования требуется проверить соответствующее контрольное поле.