CodingBox Q&A Ask question

Чтение и перезапись EEPROM SFP через шину I2C Raspberry Pi вместо покупки программатора

Asked Active Viewed 84 AI translation from English
4

У меня дома лежит полка снятых SFP, и хотелось бы уметь читать их EEPROM, чинить модуль, у которого испортилась контрольная сумма, и иногда перекодировать модуль под коммутатор, придирчивый к строкам вендора. Покупать коммерческий программатор ради горстки модулей в год здесь не имеет смысла, так что пытаюсь понять, насколько далеко реально заходит самодельная оснастка.

Что на стенде:

  • Raspberry Pi с шиной I2C, выведенной на кейдж SFP, который я распаял сам
  • плата USB-программатора CH341A, оставшаяся от работы с BIOS
  • смешанная куча модулей SFP/SFP+ на 1G и 10G, плюс два QSFP+, которые тоже хотелось бы посмотреть

Чтение работает, по крайней мере в том смысле, что на шине что-то отвечает:

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
$ i2cdump -y 1 0x50

Что я уже сделал:

  • вручную снял дамп A0h и сверил байты со смещениями полей SFF-8472, что медленно и легко ошибиться
  • записал несколько байтов через CH341A: они попадают на место, но ничего не пересчитывает контрольные суммы за меня, так что модуль возвращается как мусор, пока я не исправлю их сам
  • QSFP+ модули оставил нетронутыми, потому что построенный мной кейдж принимает только SFP

Так как реально выглядит открытая инструментальная база для этого: есть ли что-то, что знает карту памяти, проверяет байты контрольной суммы после записи и может работать со слотом QSFP+ тоже? И где самодельная оснастка перестаёт быть достаточной?

Comments 4

Для обычной работы с SFP/SFP+ Pi достаточно. Модуль - это просто два устройства I2C, что как раз показывает ваш вывод i2cdetect по 0x50 и 0x51, и ничего волшебного дальше не происходит. То, что избавляет вас от подсчёта байтов вручную, - это sfppi: он работает с шиной I2C Pi, декодирует поля за вас и проверяет CC_BASE и CC_EXT, предлагая их исправить после записи. Это как раз тот шаг, который CH341A за вас не делает. CH341A не бесполезен, он нормально читает и пишет, просто вообще не знает, что означают байты, так что все контрольные суммы остаются вашей проблемой.

Для QSFP+ ваш распаянный кейдж не поможет. Дизайн, на который указывает сообщество, - это Hubble, открытый программатор со слотом QSFP рядом со слотом SFP, так что это направление, если хотите работать с этими двумя модулями. Есть также минималистичная сборка Reveltronics, которую используют для перебора паролей записи на модулях, которые прямо отказываются от записи. Мне самому она никогда не требовалась, так что воспринимайте это как наводку и проверяйте на железе, которое не жалко потерять.

2 SpaincoreguruES Show original (English) AI translation

Это совпадает с тем, что я вижу здесь. Вторая страница тоже там, так что обе половины памяти доступны для чтения:

$ i2cdump -y 1 0x51

Переделаю разводку кейджа как следует, а потом попробую путь с контрольной суммой на модуле, который мне не жалко, прежде чем трогать что-то ценное. QSFP+ пока отложен, строить второй кейдж ради двух модулей в год трудно оправдать, так что они останутся только для чтения, пока не решу, стоит ли Hubble усилий.

2 Netherlandsoptichub40NL Show original (English) AI translation

Добавлю с другого конца ценового диапазона, поскольку не все строят своё: инструменты, которые видно в повседневном использовании, - это SNR SFP Writer, серия SFPTotal Plus и различные самодельные устройства на платах CH341, то есть та же микросхема, что уже у вас на стенде.

Что стоит знать, прежде чем углубляться: не каждый модуль - это простой EEPROM. Некоторые несут собственный микроконтроллер, эмулирующий память A0/A2 вместо предоставления реального чипа, и Medick SFP-10G-BX с C8051F392 внутри - пример, который постоянно всплывает. Такие могут реализовывать пароли записи или запросы вендора, и никакое тыканье в шину не превратит их в простой EEPROM. Самый неприятный случай, который называют, - интерактивный EEPROM HP/Aruba с ключами.

Одно практическое замечание для вашего собственного кейджа: получите правильную распиновку, иначе будете гоняться за призраками. TX_Disable - вывод 3, Mod_Abs - вывод 6, VeeR - вывод 9. Mod_Abs в частности решает, поверит ли вообще что-либо, что модуль присутствует.

2 IndiagigopsIN Show original (English) AI translation

И сторона риска, поскольку о ней редко упоминают, пока у кого-то не оказался мёртвый модуль. Многие модули требуют 4-байтовый пароль перед принятием записи. Большинство этих паролей плавает в открытом доступе, и универсальной утилиты нет, так что в итоге у вас накапливается куча вендор-специфичных инструментов и образов, вытащенных из баз прошивок или от производителя. Ошибитесь в чём-то из этого - и вы закирпичили модуль, который стоил дороже программатора.

Так что прежде чем вообще трогать EEPROM, докажите, что модуль реально сломан: считайте DDM - температуру, напряжение, ток смещения и мощность TX/RX из A0h/A2h, почистите защёлки, контакты и линзы, поставьте заведомо рабочий модуль, нагрузочно протестируйте линк через iperf3. Половина модулей, якобы нуждающихся в перепрошивке, просто нуждается в чистке.

Если предпочитаете заплатить, а не паять, учтите, что коммерческие устройства несут собственные ограничения. FS Box действительно неплохо перекодирует, люди заставили модули FS SFP-GE-BX работать на Intel X710 с автовыбором таким способом, но он программирует только модули FS, а вставка модуля не от FS зарабатывала пользователям недельные блокировки аккаунта.

2 Egypttxeng18EG Show original (English) AI translation
Log in to comment. Log in