Interfejs dwuprzewodowy: adresy, strony, banki i timing
Każdy moduł wpinany jest zarządzany przez te same dwa przewody — szeregowy zegar i szeregową linię danych — za pomocą protokołu I²C, który specyfikacje nazywają interfejsem dwuprzewodowym (TWI). To, co różni się między modułami SFP, QSFP, XFP i CMIS, to sposób organizacji przestrzeni adresowej na tym protokole: osobne urządzenia, pamięć stronicowana albo banki stron. Ten materiał to widok na poziomie protokołu, na którym opierają się programatory, hosty i CodingBox.
Warstwa fizyczna
- Dwie linie z otwartym drenem, SCL i SDA, podciągane po stronie hosta; logika 3,3 V.
- Moduł zawsze jest urządzeniem podrzędnym; host (albo programator) jest urządzeniem nadrzędnym i generuje zegar.
- Moduły mogą rozciągać zegar (utrzymywać SCL w stanie niskim), podczas gdy mikrokontroler pobiera dane — specyfikacje dopuszczają do 500 µs.
- Obecność i wybór to osobne piny, a nie transakcje na magistrali: MOD_ABS (SFP), ModPrsL i ModSelL (klasa QSFP i CMIS). ModSelL pozwala kilku modułom współdzielić jedną magistralę; SFP nie ma pinu wyboru, więc hosty dają każdej klatce własną magistralę albo multiplekser.
Przestrzeń adresowa według specyfikacji
| Rodzina | Adresy urządzeń (8-bitowy zapis / 7-bitowy) | Organizacja | Wybór strony |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | A0h / 50h dane identyfikacyjne, A2h / 51h diagnostyka | A0h: 256 bajtów płaskich; A2h: 128 płaskich + opcjonalna stronicowana górna połowa | A2h, bajt 127, jeśli ustawiony jest bit 4 bajtu 64 w A0h |
| XFP (INF-8077i) | A0h | 128 płaskich + stronicowane górne „tabele” | bajt 127 |
| QSFP+, QSFP28 (SFF-8636) | A0h | 128 płaskich + stronicowane górne 128 | bajt 127 |
| QSFP-DD, OSFP, SFP-DD… (CMIS) | A0h | 128 płaskich + banki × strony górnych 128 | bajt 126 — bank, bajt 127 — strona |
SFP potrzebuje więc dwóch adresów urządzeń i żadnego stronicowania w podstawowym zakresie; wszystko po XFP używa jednego adresu i stronicowania. Niektóre starsze SFP ustawiają bit 2 bajtu 92 w A0h („wymagana zmiana adresu”) i potrzebują sekwencji producenta, zanim odpowie A2h.
Transakcje
| Operacja | Sekwencja | Uwagi |
|---|---|---|
| Odczyt swobodny | START · adres urządzenia+W · offset bajtu · START · adres urządzenia+R · dane… · STOP | codzienny odczyt; offset zwiększa się automatycznie |
| Odczyt sekwencyjny | kontynuacja taktowania po pierwszym bajcie | zawija się z 255 → 0 w obrębie bieżącego widoku urządzenia/strony |
| Odczyt bieżącego adresu | START · adres urządzenia+R · dane | kontynuuje od ostatniego offsetu — zawodny, jeśli wtrącił się inny nadrzędny |
| Zapis bajtu | START · addr+W · offset · dane · STOP | potem czekaj t_WR |
| Zapis strony | START · addr+W · offset · dane × n · STOP | ograniczony przez układ pamięci (zwykle 4–16 bajtów) i nie może przekroczyć jego wewnętrznej granicy strony |
| Odpytywanie potwierdzenia (ACK) | wydawaj START + addr+W, aż moduł potwierdzi ACK | najszybszy sposób, aby dowiedzieć się, że cykl zapisu się zakończył |
Odczyt górnej strony to zawsze dwie transakcje: zapisz bajt wyboru strony (127, a dla banków CMIS także 126), potem odczytaj 128–255. Wybór utrzymuje się do zmiany, dlatego nieaktualny wybór strony jest klasycznym źródłem odczytów „błędnej zawartości”.
Szybkość
| Specyfikacja | Zegar |
|---|---|
| SFF-8472 (SFP) | 100 kHz bazowo; niektóre moduły tolerują 400 kHz |
| INF-8077i (XFP) | 100 kHz |
| SFF-8636 rev 2.x (QSFP) | do 400 kHz |
| Specyfikacje sprzętowe CMIS / QSFP-DD / OSFP | do 400 kHz |
Wolniej jest zawsze dozwolone. Przy zapisie większość programatorów schodzi znacznie poniżej nominalnego zegara — do niskich kiloherców — ponieważ cykle zapisu EEPROM i moduły pośredniczone przez mikrokontroler są dużo bardziej wrażliwe na taktowanie niż odczyt.
Istotne czasy
| Parametr | Typowy limit | Znaczenie |
|---|---|---|
| t_init (SFP) | 300 ms | od włączenia zasilania / zdjęcia TX_DISABLE do momentu, gdy moduł jest w pełni sprawny i magistrala odpowiada |
| t_init (QSFP) | 2 s | do zakończenia inicjalizacji i wyczyszczenia Data_Not_Ready |
| MgmtInit (CMIS) | ≤ 2 s według specyfikacji sprzętowych | do momentu, gdy moduł opuszcza MgmtInit i dane identyfikacyjne są ważne |
| t_WR | 40 ms | maksymalny cykl zapisu bajtu albo zapisu sekwencyjnego; odpytuj ACK albo czekaj |
| t_clock_hold | 500 µs | maksymalne rozciągnięcie zegara przez moduł |
| ton_IntL | 200 ms | od zdarzenia flagi do aktywacji IntL |
| Gotowość danych | bajt 110, bit 0 (SFP); bajt 2, bit 0 (QSFP) | nie ufaj wielkościom mierzonym, dopóki jest ustawiona |
Pułapki i ich rozwiązania
| Objaw | Przyczyna protokolarna | Rozwiązanie |
|---|---|---|
| Wszystko FFh | brak ACK — zły adres urządzenia, niezaimplementowana strona, brak modułu | sprawdź A0h kontra A2h, bity strony, osadzenie |
| Błędna zawartość | nieaktualny wybór strony/banku | zapisuj 127 (i 126) przed każdym dostępem do górnej strony |
| Uszkodzone bajty | zbyt szybki zegar, długie przewody, rywalizacja z hostem odpytującym DDM | zwolnij, skróć kabel, czytaj na stanowisku, a nie w działającym przełączniku |
| Zapis „się udaje”, ale odczyt zwraca stare dane | zapisano zbyt szybko, zignorowano t_WR, przekroczono granicę zapisu strony | zapis pojedynczych bajtów albo małych porcji z odczekaniem; odpytywanie ACK |
| Magistrala zawiesza się, SCL albo SDA utknęły w stanie niskim | przerwana transakcja | wygeneruj dziewięć impulsów SCL, potem STOP; wyłącz i włącz zasilanie modułu |
| Działa w przełączniku, martwy na programatorze | moduł oczekuje zwolnienia LPMode albo pinu wyboru | uwzględnij ModSelL/LPMode; odczekaj t_init |
Diagnostyka tych przypadków na stanowisku jest zebrana w Błędy odczytu i zapisu EEPROM; schematy ochrony działające ponad magistralą (hasła, sprzętowe WP, polecenia zapisu) są w Rodzaje zabezpieczenia przed zapisem.
Odczyt w działającym systemie
Host odpytuje DDM co kilka sekund i reaguje na flagi; drugi nadrzędny na tej samej magistrali (zacisk programatora, narzędzie in-band) powoduje kolizje, zapisy pod złym adresem, a w najgorszym razie zamienia moduł w bezużyteczną „cegłę” przez zapis strony trafiający w zły offset. Jeśli musisz, czytaj w miejscu instalacji; zapisuj na stanowisku.
W CodingBox
CodingBox automatycznie obsługuje model adresowania właściwy dla formatu obudowy — A0h/A2h dla SFP, stronicowanie dla QSFP i XFP, bank + strona dla CMIS — pozwala ustawić szybkość magistrali i czasy zapisu dla każdego profilu programatora i weryfikuje każdy zapis odczytem zwrotnym (Zapis modułu).