CodingBox Q&A Ask question

Programator czyta SFP+ FTLX8571D3BCV-IT, ale na zapis odpowiada No Acknowledge

Asked Active Viewed 110 AI translation from Русский
6

Prowadzę niewielki fundusz wymienny modułów: węzły rozrzucone po mieście, i niemal pod każdy cudzy switch trzeba przekodować SFP. Z modułami gigabitowymi schemat od dawna dopracowany, a na dziesiątce utknąłem.

Co na stole:

  • programator z klatką pod SFP/SFP+, zasilanie 3,3 V
  • Finisar FTLX8571D3BCV-IT i FTLX1471D3BCV-IT, oba się czytają
  • Cisco GLC-LH-SM ze starych zapasów
  • HP J4858B i J4859C

Odczyt zdejmuje się stabilnie i powtarzalnie, oba banki w całości. Zapis nie idzie w żadnym wariancie:

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

Co już sprawdziłem:

  • te same operacje na zwykłych gigabitowych SFP tym samym programatorem przechodzą, więc obwiązka i zasilanie żyją;
  • wziąłem drugi egzemplarz FTLX8571D3BCV-IT, zachowanie bajt w bajt takie samo;
  • na GLC-LH-SM No Acknowledge przylatuje od razu, jeszcze przed próbą dotknięcia pól vendorskich.

Wychodzi na to, że nie chodzi o konkretny egzemplarz. Czy to sprzętowa ochrona zapisu w samym module, czy w SFP+ pamięć to już nie goła EEPROM i zwykłym zapisem po I2C tam po prostu nie da się trafić? I osobno interesuje mnie HP J4858B/J4859C: pisze je ktoś zwykłym programatorem, czy to z góry ślepy zaułek?

Comments 6

Accepted answer

Tu wymieszały się dwa różne mechanizmy, i leczy się je inaczej.

Pierwszy - zwykła EEPROM ze sprzętową ochroną zapisu. Kostka pamięci ma wyprowadzenie write protect, i póki jest podciągnięte, odczyt idzie, a zapis odpada. Sposób, jaki doradzali ludzie, którzy zajmowali się tym na poważnie, to posadzić to wyprowadzenie na masę na czas przeszywania. Na części modułów gigabitowych to wystarcza.

Drugi - to, z czym zderzyłeś się na dziesiątce. W SFP+ dane często leżą nie w osobnej EEPROM, a za mikrokontrolerem modułu: on sam oddaje A0 i A2 do odczytu, a zapis przyjmuje tylko przez własną sekwencję komend. Standardowy programator takiej sekwencji nie zna i dostaje No Acknowledge na każdą próbę, niezależnie od tego, w które pole celujesz. Nie ma tam czego uziemiać.

Co realnie pomaga obejść klatkę: lutuje się przewody wprost do nóżek 4 i 7 modułu, czyli na linii I2C, z pominięciem złącza programatora. Z relacji wynika, że potem daje się zapisać część modułów, które w klatce milczały. Sposób prymitywny, ręce muszą być pewne, a moduł po tym żyje już na twoją odpowiedzialność.

HP to osobna piosenka. Standardowe programatory ich nie biorą, potrzebna jest własna obróbka, i na J4858B/J4859C przy zwykłej obwiązce nie spodziewałbym się sukcesu. Jeśli zadanie to po prostu dostać działający moduł w cudzym switchu, taniej wychodzi nie męczyć HP, tylko wziąć moduł z uczciwą pamięcią i zalać w niego cały obraz vendorski: z 256 bajtów dumpa znaczące jest pierwsze 128, reszta to rezerwa producenta.

Żaden vendor takiego przekodowania oczywiście nie wspiera: z przeszytym modułem do supportu nie ma z czym iść.

3 Russialambdaops44RU Show original (Русский) AI translation

Doprecyzuj kilka rzeczy, inaczej wyjdzie wróżenie. No Acknowledge przylatuje już na samym adresie urządzenia, czy dopiero po pierwszym bajcie danych? Z logu programatora zwykle to widać. I co masz za programator - gotowe urządzenie czy samoróbka na własnej obwiązce? Od tego zależy, czego w ogóle oczekiwać od 3,3 V na klatce.

Ciekawe jest jeszcze zachowanie przy podaniu zasilania: odmowa jest taka sama zaraz po instalacji modułu i po tym, jak postał pod zasilaniem parę minut? I wszystkie cztery typy zachowują się tak samo, czy Finisar i HP się różnią: HP zwykle ma swoje własne przyczyny odmowy, lepiej je od razu odseparować od reszty.

3 RussiadwdmmonkRU Show original (Русский) AI translation

Zdaję relację z wyniku. Spaiłem się na linii I2C wprost do nóżek 4 i 7, z pominięciem klatki. Finisar poszły: FTLX8571D3BCV-IT zapisał się i potwierdził odczytem zwrotnym, FTLX1471D3BCV-IT też. GLC-LH-SM przestał wypluwać No Acknowledge i pisze się normalnie.

HP tak i nie ustąpiło. J4858B formalnie przyjmuje zapis, ale po edycji moduł jest odrzucany przez switch, J4859C zachowuje się tak samo. Więc dla mnie sprawa zamknięta w połowie: Finisar i Cisco teraz zapisuję, HP odłożyłem na bok do lepszych czasów.

1 KazakhstanlinkguruKZ Show original (Русский) AI translation

Z HP pułapka jest głębsza niż ochrona zapisu, więc twój wynik jest oczekiwany. Na J4858B przy edycji bajtów 68-83, czyli numeru seryjnego, zmienia się suma kontrolna w bajtach 124-127, i moduł po tym jest odrzucany. To nie MSA-owe CC_BASE i CC_EXT, ich policzenie to nie problem, tylko osobna suma vendorska w ostatnich czterech bajtach A0. Algorytmu publicznie nigdy nie rozgryziono, ile by w nim nie dłubano.

J9150A z tej samej historii. A w nowszych modułach HP i Aruba w ogóle odeszły od statycznej sumy na rzecz schematu zapytanie-odpowiedź, HPIDv2, i tam programator jest bezużyteczny w zasadzie z definicji. Więc „zapisuje się, ale nie jest przyjmowany" to dokładnie to, co miało wyjść.

1 Kazakhstanlambdaowl20KZ Show original (Русский) AI translation

Skoro masz park, a nie jeden moduł, powiem o narzędziu. Do przekodowania dla Huawei S5731 i S6730 oraz dla HP 6120XG przystosowałem UACC-SFP-WIZARD od Ubiquiti - jako tani programator jest całkiem żywy. Tylko po samych modułach Ubiquiti krążą listy haseł, wpisy typu 0x00001011, SFPX, QSFP, i bez nich część modułów nie otwiera się na zapis. Z obrazów mam w użyciu FTLX8571D3BCV i FTLX8574D3BCV, rzadziej SNR-SFP+W73-3 i W37-3.

3 Russiaportrunner91RU Show original (Русский) AI translation

Poprawię uogólnienie powyżej, żeby nikt przedwcześnie nie chwytał za lutownicę: nie w każdym SFP+ pamięć jest schowana za mikrokontrolerem. U mnie FTLX8574D3BCV i para SNR-SFP+W73-3 pisały się zwykłym programatorem w klatce, bez żadnego lutowania. Więc najpierw warto sprawdzić konkretny egzemplarz, a dopiero potem leźć w obejście.

Uziemienie wyprowadzenia write protect, nawiasem mówiąc, też nie jest uniwersalnym przepisem: w module z mikrokontrolerem nic to nie daje, odmowa idzie tam nie od pamięci, a od firmware'u kontrolera. Ta operacja ma sens tylko tam, gdzie stoi uczciwa osobna EEPROM, i robić ją trzeba na module odłączonym od zasilania, inaczej łatwo o cegłę zamiast modułu.

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