CodingBox Q&A Ask question

Программатор читает SFP+ FTLX8571D3BCV-IT, но на запись отвечает No Acknowledge

Asked Active Viewed 110 Original language: Русский
6

Держу небольшой обменный фонд модулей: узлы разбросаны по городу, и почти под каждый чужой коммутатор приходится перекодировать SFP. С гигабитными модулями схема давно отработана, а на десятке встал.

Что на столе:

  • программатор с клеткой под SFP/SFP+, питание 3.3 В
  • Finisar FTLX8571D3BCV-IT и FTLX1471D3BCV-IT, читаются оба
  • Cisco GLC-LH-SM из старых запасов
  • HP J4858B и J4859C

Чтение снимается стабильно и повторяемо, оба банка целиком. Запись не идёт ни в одном варианте:

read  A0 0x00-0xFF ... OK
read  A2 0x00-0xFF ... OK
write A0 vendor name ... No Acknowledge
write A0 serial (bytes 68-83) ... No Acknowledge

Что уже проверил:

  • те же операции на обычных гигабитных SFP тем же программатором проходят, значит обвязка и питание живые;
  • взял второй экземпляр FTLX8571D3BCV-IT, поведение байт в байт такое же;
  • на GLC-LH-SM No Acknowledge прилетает сразу, ещё до попытки тронуть вендорские поля.

Получается, дело не в конкретном экземпляре. Это аппаратная защита записи в самом модуле, или в SFP+ память уже не голая EEPROM и обычной записью по I2C туда просто не попасть? И отдельно интересует HP J4858B/J4859C: их кто-нибудь пишет обычным программатором, или это заведомо тупик?

Comments 6

Accepted answer

Тут смешались два разных механизма, и лечатся они по-разному.

Первый - обычная EEPROM с аппаратной защитой записи. У микросхемы памяти есть вывод write protect, и пока он подтянут, чтение идёт, а запись отваливается. Способ, который советовали люди, занимавшиеся этим вплотную, - посадить этот вывод на землю на время прошивки. На части гигабитных модулей этого достаточно.

Второй - то, с чем ты столкнулся на десятке. В SFP+ данные часто лежат не в отдельной EEPROM, а за микроконтроллером модуля: он сам отдаёт A0 и A2 на чтение и принимает запись только своей командной последовательностью. Стандартный программатор такой последовательности не знает и получает No Acknowledge на любую попытку, независимо от того, в какое поле ты метишь. Заземлять там нечего.

Что реально помогает обойти клетку: паяются проводами прямо к ножкам 4 и 7 модуля, то есть на линии I2C, минуя разъём программатора. По отзывам, после этого пишется часть модулей, которые в клетке молчали. Способ грубый, руки нужны ровные, и модуль после него живёт на твою ответственность.

HP - отдельная песня. Стандартные программаторы их не берут, там нужна своя обработка, и на J4858B/J4859C с обычной обвязкой я бы успеха не ждал. Если задача - просто получить рабочий модуль в чужом коммутаторе, дешевле не мучить HP, а взять модуль с честной памятью и залить в него вендорский образ целиком: из 256 байт дампа значимы первые 128, остальное - резерв производителя.

Ни один вендор такую перекодировку, разумеется, не поддерживает: с перепрошитым модулем в поддержку идти не с чем.

3 Russialambdaops44RU AI translation to English Original (Русский)

Уточни пару вещей, иначе получится гадание. No Acknowledge прилетает на самом адресе устройства или уже после первого байта данных? По логу программатора это обычно видно. И что у тебя за программатор - готовое устройство или самоделка на своей обвязке? От этого зависит, чего вообще ждать от 3.3 В на клетке.

Ещё интересно поведение при подаче питания: отказ одинаковый сразу после установки модуля и после того, как он постоял под питанием пару минут? И все четыре типа ведут себя одинаково или Finisar и HP отличаются: у HP обычно свои причины отказа, их лучше сразу отделить от остальных.

3 RussiadwdmmonkRU AI translation to English Original (Русский)

Отчитываюсь по результау. Спаялся на линии I2C напрямую к ножкам 4 и 7, минуя клетку. Finisar пошли: FTLX8571D3BCV-IT записался и обратным чтением подтвердился, FTLX1471D3BCV-IT тоже. GLC-LH-SM перестал выдавать No Acknowledge и пишется нормально.

HP так и не сдались. J4858B запись формально принимает, но после правки модуль коммутатором отвергается, J4859C ведёт себя так же. Так что для меня вопрос закрыт наполовину: Finisar и Cisco теперь пишу, HP отложил в сторону до лучших времён.

1 KazakhstanlinkguruKZ AI translation to English Original (Русский)

С HP ловушка глубже, чем защита записи, поэтому твой результат ожидаемый. На J4858B при правке байтов 68-83, то етсь серийного номера, меняется контрольная сумма в байтах 124-127, и модуль после этого отвергается. Это не MSA-шные CC_BASE и CC_EXT, их посчитать не проблема, а отдельная вендорская сумма в последних четырёх байтах A0. Алгоритм публично так и не разобрали, сколько ни ковыряли.

J9150A из той же истории. А в более новых модулях HP и Aruba вообще ушли от статической суммы к схеме запрос-ответ, HPIDv2, и там программатор бесполезен в принципе. Так что «пишется, но не принимается» - это ровно то, что и должно было получиться.

1 Kazakhstanlambdaowl20KZ AI translation to English Original (Русский)

Раз у тебя парк, а не один модуль, скажу про инструмент. Я под перекодировку для Huawei S5731 и S6730 и для HP 6120XG приспособил UACC-SFP-WIZARD от Ubiquiti - как дешёвый программатор он вполне живой. Только по самим модулям Ubiquiti гуляют списки паролей, записи вида 0x00001011, SFPX, QSFP, и без них часть модулей на запись не открывается. Из образов у меня в ходу FTLX8571D3BCV и FTLX8574D3BCV, реже SNR-SFP+W73-3 и W37-3.

3 Russiaportrunner91RU AI translation to English Original (Русский)

Поправлю обобщение выше, чтобы никто не хватался за паяльник раньше времени: не в каждом SFP+ память спрятана за микроконтроллером. У меня FTLX8574D3BCV и пара SNR-SFP+W73-3 писались обычным программатором в клетке, без всякой пайки. Так что сначала стоит проверить конкретный экземпляр, а уже потом лезть в обохд.

Заземление вывода write protect, кстати, тоже не универсальный рецепт: на модуле с микроконтроллером оно не даёт ничего, там отказ идёт не от памяти, а от прошивки контроллера. Смысл эта операция имеет только там, где стоит честная отдельная EEPROM, и делать её надо на обесточенном модуле, иначе легко получить кирпич вместо модуля.

2 UkrainecoremonkUA AI translation to English Original (Русский)
Log in to comment. Log in