Interfejs dwuprzewodowy: adresy, strony, banki i timing · Specyfikacje i normy · Transceivery optyczne i kable · Dokumentacja · CodingBox
CodingBox Dokumentacja

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

RodzinaAdresy urządzeń (8-bitowy zapis / 7-bitowy)OrganizacjaWybór strony
SFP, SFP+, SFP28 (SFF-8472)A0h / 50h dane identyfikacyjne, A2h / 51h diagnostykaA0h: 256 bajtów płaskich; A2h: 128 płaskich + opcjonalna stronicowana górna połowaA2h, bajt 127, jeśli ustawiony jest bit 4 bajtu 64 w A0h
XFP (INF-8077i)A0h128 płaskich + stronicowane górne „tabele”bajt 127
QSFP+, QSFP28 (SFF-8636)A0h128 płaskich + stronicowane górne 128bajt 127
QSFP-DD, OSFP, SFP-DD… (CMIS)A0h128 płaskich + banki × strony górnych 128bajt 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

OperacjaSekwencjaUwagi
Odczyt swobodnySTART · adres urządzenia+W · offset bajtu · START · adres urządzenia+R · dane… · STOPcodzienny odczyt; offset zwiększa się automatycznie
Odczyt sekwencyjnykontynuacja taktowania po pierwszym bajciezawija się z 255 → 0 w obrębie bieżącego widoku urządzenia/strony
Odczyt bieżącego adresuSTART · adres urządzenia+R · danekontynuuje od ostatniego offsetu — zawodny, jeśli wtrącił się inny nadrzędny
Zapis bajtuSTART · addr+W · offset · dane · STOPpotem czekaj t_WR
Zapis stronySTART · addr+W · offset · dane × n · STOPograniczony 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 ACKnajszybszy 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ść

SpecyfikacjaZegar
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 / OSFPdo 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

ParametrTypowy limitZnaczenie
t_init (SFP)300 msod włączenia zasilania / zdjęcia TX_DISABLE do momentu, gdy moduł jest w pełni sprawny i magistrala odpowiada
t_init (QSFP)2 sdo zakończenia inicjalizacji i wyczyszczenia Data_Not_Ready
MgmtInit (CMIS)≤ 2 s według specyfikacji sprzętowychdo momentu, gdy moduł opuszcza MgmtInit i dane identyfikacyjne są ważne
t_WR40 msmaksymalny cykl zapisu bajtu albo zapisu sekwencyjnego; odpytuj ACK albo czekaj
t_clock_hold500 µsmaksymalne rozciągnięcie zegara przez moduł
ton_IntL200 msod zdarzenia flagi do aktywacji IntL
Gotowość danychbajt 110, bit 0 (SFP); bajt 2, bit 0 (QSFP)nie ufaj wielkościom mierzonym, dopóki jest ustawiona

Pułapki i ich rozwiązania

ObjawPrzyczyna protokolarnaRozwiązanie
Wszystko FFhbrak ACK — zły adres urządzenia, niezaimplementowana strona, brak modułusprawdź A0h kontra A2h, bity strony, osadzenie
Błędna zawartośćnieaktualny wybór strony/bankuzapisuj 127 (i 126) przed każdym dostępem do górnej strony
Uszkodzone bajtyzbyt szybki zegar, długie przewody, rywalizacja z hostem odpytującym DDMzwolnij, skróć kabel, czytaj na stanowisku, a nie w działającym przełączniku
Zapis „się udaje”, ale odczyt zwraca stare danezapisano zbyt szybko, zignorowano t_WR, przekroczono granicę zapisu stronyzapis pojedynczych bajtów albo małych porcji z odczekaniem; odpytywanie ACK
Magistrala zawiesza się, SCL albo SDA utknęły w stanie niskimprzerwana transakcjawygeneruj dziewięć impulsów SCL, potem STOP; wyłącz i włącz zasilanie modułu
Działa w przełączniku, martwy na programatorzemoduł oczekuje zwolnienia LPMode albo pinu wyboruuwzglę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).


Jeśli znajdziesz nieścisłość lub błąd w tym materiale, zaznacz odpowiedni fragment i naciśnij Ctrl+Enter, aby .