Błędy odczytu i zapisu EEPROM na programatorze
Zanim moduł da się zdiagnozować albo zakodować, trzeba go odczytać — a potem, często, zapisać. Oba kroki zawodzą na charakterystyczne sposoby. Ta strona przypisuje każdą usterkę do jej przyczyny oraz do ustawienia albo procedury, która ją naprawia — od modułu w ogóle niewidzianego po zapis, który „się udaje” i po cichu znika.
Moduł nie wykryty
| Sprawdzenie | Dlaczego |
|---|---|
| Osadzenie i gniazdo | moduł musi całkowicie wejść w złącze; użyj adaptera dla jego formatu obudowy — SFP w gnieździe QSFP nie zostanie widziany |
| Czas rozruchu | moduły potrzebują do ~2 s (SFP) albo dłużej (CMIS) po włożeniu, zanim magistrala dwuprzewodowa zacznie odpowiadać |
| Sygnał obecności modułu | MOD_ABS / ModPrsL musi być aktywny; wygięty pin albo moduł bez tego sygnału wygląda jak nieobecny |
| Stan niskiego poboru mocy (CMIS) | dane identyfikacyjne da się odczytać w LowPwr, ale część hostów/programatorów oczekuje Ready dla pełnego dostępu |
| Szybkość magistrali | zacznij od 100 kHz albo niżej; część modułów odpowiada NACK przy 400 kHz |
| Martwy moduł | brak DDM, brak danych identyfikacyjnych przy żadnej szybkości — potwierdź na drugiej płytce, zanim go skreślisz |
Odczyty zwracają FFh, 00h albo śmieci
| Objaw | Przyczyna | Rozwiązanie |
|---|---|---|
| Same FFh | NACK I²C — brak urządzenia pod tym adresem albo strona nieobecna | sprawdź adres (A0h dane identyfikacyjne kontra A2h diagnostyka w SFP; pojedyncze A0h ze stronicowaniem w QSFP/CMIS) |
| Same 00h | moduł niezasilany / w resecie; albo naprawdę pusty EEPROM | sprawdź zasilanie gniazda, obecność modułu; puste moduły się zdarzają (niezakodowany zapas) |
| Poprawna długość, zła zawartość | odczyt innej strony niż zamierzona | zapisz bajt wyboru strony (127) i odczytaj ponownie; w CMIS także wybór banku (126) |
| Poprzestawiane / przesunięte bajty | zbyt szybka magistrala, długi kabel, rywalizacja z hostem | obniż do ≤ 100 kHz; używaj krótkich przewodów; odczytuj na stanowisku, nie w działającym przełączniku |
| Odczyty A2h zawodzą, A0h w porządku | moduł bez diagnostyki albo zabezpieczony blok diagnostyczny | sprawdź A0h bajt 92 bit 6 (DDM zaimplementowane); część typów zabezpieczonych przed zapisem odpowiada tylko na A0h |
| Wartości zmieniają się między odczytami | monitory na żywo — normalne; albo data not ready | bajty DDM mają się zmieniać; przed zaufaniem migawce sprawdź bit gotowości danych |
Zapis zawodzi całkowicie
WRITE FAIL, NACK na danych, albo bajt po odczycie wraca niezmieniony:
| Przyczyna | Jak rozpoznać | Co zrobić |
|---|---|---|
| Wymagane hasło (kontroler firmware) | zapis odrzucany, dopóki poprawna wartość nie zostanie umieszczona pod adresem hasła (SFP A2h 0x7B–0x7E, QSFP 123–126, CMIS 122–125) | wpisz hasło modułu w Pamięć zabezpieczona przed zapisem i hasła; znane hasła producentów są stosowane z bazy danych |
| Sprzętowe zabezpieczenie przed zapisem | tylko do odczytu niezależnie od hasła, przetrwa cykl zasilania | pin WP musi być sterowany przez płytkę programującą — samo oprogramowanie nie wystarczy; zobacz Rodzaje zabezpieczenia przed zapisem |
| Timing | przerywane błędy, częściowo zapisane strony | zwolnij zegar (do niezawodnego zapisu EEPROM często potrzeba ~1 kHz), zachowaj czas cyklu zapisu (5–10 ms) między bajtami/stronami, dodaj opóźnienia między blokami |
| Region tylko do odczytu | konkretne bajty nigdy się nie zmieniają (sumy kontrolne, progi w części modułów, obszar producenta) | EEPROM ma zabezpieczony region z założenia projektowego; zapisuj tylko pola, na które moduł pozwala |
| Zły stan | moduły CMIS mogą wymagać LowPwr albo dezaktywowanej ścieżki danych, zanim przyjmą zapis | najpierw ustaw moduł w wymaganym stanie |
| Strona niewybrana | zapisałeś właściwy offset na złej stronie | ustaw bajt 127 (i 126) przed zapisem i zweryfikuj, odczytując z powrotem bajt wyboru strony |
Zapis „udaje się”, ale nie utrzymuje się
- Cofa się po cyklu zasilania — moduł przechowuje zapisy w pamięci tymczasowej i potrzebuje producenckiej komendy zapisu (save); bez niej wraca stary obraz. Obsługiwane przez skrypt programujący (Rodzaj zabezpieczenia przed zapisem 4).
- Cofa się natychmiast — mikrokontroler odzwierciedla EEPROM z własnej pamięci i nadpisuje twoje bajty; wymaga algorytmu producenta (typ 5).
- Część bajtów się utrzymuje, część nie — częściowo zabezpieczona mapa; zapisuj pole po polu i weryfikuj każde.
Host odrzuca moduł po udanym zapisie
| Przyczyna | Rozwiązanie |
|---|---|
| Sumy kontrolne nieaktualne — CC_BASE (bajt 63), CC_EXT (95), CC_DMI (A2h 95), QSFP 191/223 | przelicz; CodingBox robi to automatycznie przy zapisie (Mapa pamięci) |
| Dane identyfikacyjne teraz niespójne — np. zmienił się producent, ale kody zgodności albo długość fali wskazują na inny sprzęt | utrzymuj dane identyfikacyjne spójne z rzeczywistą optyką (Szybkość i przepływność, Niezgodności fizyczne) |
| Zapisano w układzie dla złego typu modułu | XFP zapisany jako SFP albo pomylenie stron QSFP — przywróć z kopii zapasowej |
Moduł martwy po zapisie
Zapisanie śmieci na stałych kalibracyjnych, progach albo obszarze specyficznym dla producenta (gdzie część kontrolerów trzyma swoją konfigurację) może trwale uszkodzić moduł. Droga odzyskania: przywróć kopię zapasową, którą CodingBox zrobił przed zapisem, z code database, a potem zapisz tylko zamierzone pola.
Złote zasady
- Najpierw odczytaj i zapisz — przed każdym zapisem powinien być pełny odczyt, który trafia do bazy danych.
- Zidentyfikuj rodzaj zabezpieczenia, zanim spróbujesz pierwszego zapisu (Rodzaje zabezpieczenia przed zapisem).
- Zwalniaj — zegar i odstępy czasowe między bajtami rozwiązują większość „losowych” błędów.
- Zapisuj tylko to, co zamierzasz — pola, nie całe strony, chyba że przywracasz obraz.
- Zweryfikuj, odczytując ponownie po cyklu zasilania.
W CodingBox
CodingBox odczytuje moduły z poprawnym adresem i stronicowaniem dla danego formatu obudowy, pokazuje surowe i zdekodowane bajty w EEPROM editor, przelicza sumy kontrolne przy zapisie, automatycznie zapisuje kopię zapasową i obsługuje wpisywanie haseł oraz skrypty programujące dla modułów zabezpieczonych i wymagających komendy zapisu (Zapis modułu). Jeśli podejrzewasz usterkę na poziomie płytki, zobacz produktowe Rozwiązywanie problemów.
Mechanika magistrali stojąca za tymi usterkami — adresy, wybór strony, czas cyklu zapisu, rozciąganie zegara: Interfejs dwuprzewodowy.
Dlaczego moduł odpowiada tak, jak odpowiada — pamięć emulowana przez MCU, okno rozruchu, rozciąganie zegara, zabezpieczone regiony: Kontroler i firmware.