Zweidraht-Interface: Adressen, Seiten, Bänke und Timing
Jedes steckbare Modul wird über dieselben zwei Leitungen verwaltet — eine serielle Takt- und eine serielle Datenleitung — mit dem I²C-Protokoll, das die Spezifikationen Two-Wire Interface (TWI) nennen. Was sich zwischen SFP-, QSFP-, XFP- und CMIS-Modulen unterscheidet, ist die Organisation des Adressraums darüber: getrennte Bausteine, seitenweiser Speicher oder Banks von Seiten. Dieses Material ist die Sicht auf Protokollebene, auf die sich Programmiergeräte, Hosts und CodingBox gleichermaßen stützen.
Physikalische Schicht
- Zwei Open-Drain-Leitungen, SCL und SDA, host-seitig hochgezogen; 3,3-V-Logik.
- Das Modul ist immer der Slave; der Host (oder das Programmiergerät) ist der Master und erzeugt den Takt.
- Module dürfen den Takt strecken (SCL auf Low halten), während ein Mikrocontroller Daten holt — die Spezifikationen erlauben bis zu 500 µs.
- Anwesenheit und Auswahl sind eigene Pins, keine Bus-Transaktionen: MOD_ABS (SFP), ModPrsL und ModSelL (QSFP-Klasse und CMIS). ModSelL lässt mehrere Module einen Bus teilen; SFP hat keinen Select-Pin, daher geben Hosts jedem Käfig einen eigenen Bus oder einen Multiplexer.
Adressraum nach Spezifikation
| Familie | Geräteadressen (8-Bit-Schreiben/7-Bit) | Organisation | Seitenauswahl |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | A0h/50h Identität, A2h/51h Diagnose | A0h: 256 flache Bytes; A2h: 128 flach + optional seitenweise obere Hälfte | A2h Byte 127, wenn A0h Byte 64 Bit 4 gesetzt ist |
| XFP (INF-8077i) | A0h | 128 flach + seitenweise obere „Tabellen“ | Byte 127 |
| QSFP+, QSFP28 (SFF-8636) | A0h | 128 flach + seitenweise obere 128 | Byte 127 |
| QSFP-DD, OSFP, SFP-DD… (CMIS) | A0h | 128 flach + Banks × Seiten der oberen 128 | Byte 126 Bank, Byte 127 Seite |
Ein SFP braucht daher zwei Geräteadressen und für die Grundfunktionen kein Paging; alles nach XFP verwendet eine Adresse und Paging. Manche ältere SFPs setzen A0h Byte 92 Bit 2 („Adresswechsel erforderlich“) und benötigen eine Herstellersequenz, bevor A2h antwortet.
Transaktionen
| Operation | Ablauf | Anmerkungen |
|---|---|---|
| Random Read | START · Geräteadresse+W · Byte-Offset · START · Geräteadresse+R · Daten… · STOP | der alltägliche Lesevorgang; Offset zählt automatisch weiter |
| Sequential Read | Takten nach dem ersten Byte fortsetzen | springt bei 255 → 0 innerhalb der aktuellen Geräte-/Seitenansicht um |
| Current-Address Read | START · Geräteadresse+R · Daten | setzt beim letzten Offset fort — anfällig, falls ein anderer Master eingegriffen hat |
| Byte Write | START · Adresse+W · Offset · Daten · STOP | danach t_WR abwarten |
| Page Write | START · Adresse+W · Offset · Daten × n · STOP | begrenzt durch den Speicherbaustein (typisch 4–16 Byte) und darf dessen interne Seitengrenze nicht überschreiten |
| Acknowledge Polling | START + Adresse+W ausgeben, bis das Modul ACK sendet | der schnellste Weg, um zu erkennen, dass ein Schreibzyklus abgeschlossen ist |
Das Lesen einer oberen Seite ist immer zweistufig: zuerst das Seitenauswahl-Byte schreiben (127, bei CMIS-Banks auch 126), dann 128–255 lesen. Die Auswahl bleibt bestehen, bis sie geändert wird — deshalb ist eine veraltete Seitenauswahl eine klassische Ursache für „falschen Inhalt“ beim Lesen.
Geschwindigkeit
| Spezifikation | Takt |
|---|---|
| SFF-8472 (SFP) | 100 kHz als Basis; manche Module vertragen 400 kHz |
| INF-8077i (XFP) | 100 kHz |
| SFF-8636 rev 2.x (QSFP) | bis zu 400 kHz |
| CMIS-/QSFP-DD-/OSFP-Hardwarespezifikationen | bis zu 400 kHz |
Langsamer ist immer zulässig. Für Schreibvorgänge gehen die meisten Programmiergeräte weit unter den Nominaltakt — bis in den niedrigen Kilohertz-Bereich —, weil EEPROM-Schreibzyklen und über Mikrocontroller vermittelte Module viel empfindlicher auf Timing reagieren als Lesevorgänge.
Timing, auf das es ankommt
| Parameter | Typisches Limit | Bedeutung |
|---|---|---|
| t_init (SFP) | 300 ms | vom Einschalten/Aufheben von TX_DISABLE bis das Modul voll betriebsbereit ist und der Bus antwortet |
| t_init (QSFP) | 2 s | bis die Initialisierung abgeschlossen ist und Data_Not_Ready gelöscht wird |
| MgmtInit (CMIS) | ≤ 2 s nach Hardwarespezifikationen | bis das Modul MgmtInit verlässt und die Identität gültig ist |
| t_WR | 40 ms | maximaler Schreibzyklus für einen Byte- oder sequenziellen Schreibvorgang; ACK abfragen oder abwarten |
| t_clock_hold | 500 µs | maximale Taktstreckung durch das Modul |
| ton_IntL | 200 ms | vom Flag-Ereignis bis IntL gesetzt ist |
| Data Ready | Byte 110 Bit 0 (SFP), Byte 2 Bit 0 (QSFP) | Monitoren nicht trauen, solange gesetzt |
Fallstricke und ihre Behebung
| Symptom | Protokollursache | Behebung |
|---|---|---|
| Alles FFh | kein ACK — falsche Geräteadresse, Seite nicht implementiert, Modul fehlt | A0h vs. A2h, Seitenbits, Sitz prüfen |
| Falscher Inhalt | veraltete Seiten-/Bank-Auswahl | vor jedem Zugriff auf eine obere Seite 127 (und 126) schreiben |
| Verfälschte Bytes | Takt zu schnell, lange Leitungen, Kollision mit einem den DDM abfragenden Host | verlangsamen, kurzes Kabel, auf der Werkbank statt im laufenden Switch lesen |
| Schreiben „erfolgreich“, liest alten Wert zurück | zu schnell geschrieben, t_WR ignoriert, Seitenschreibgrenze überschritten | Byte-Schreibvorgänge oder kleine Blöcke mit Wartezeiten; ACK-Polling |
| Bus hängt, SCL oder SDA bleibt auf Low | unterbrochene Transaktion | neun SCL-Impulse austakten, dann STOP; Modul aus- und wieder einstecken |
| Funktioniert im Switch, tot am Programmiergerät | Modul erwartet freigegebenen LPMode oder einen Select-Pin | ModSelL/LPMode beachten; t_init abwarten |
Die werkbankseitige Diagnose dazu ist gesammelt unter Lese- und Schreibfehler im EEPROM; Schutzmechanismen, die auf dem Bus aufsetzen (Passwörter, Hardware-Schreibschutz, Speicherbefehle), stehen unter Arten des Schreibschutzes.
Lesen in einem laufenden System
Ein Host fragt DDM alle paar Sekunden ab und reagiert auf Flags; ein zweiter Master am selben Bus (ein Programmierclip, ein Inband-Tool) verursacht Kollisionen, falsch adressierte Schreibvorgänge und im schlimmsten Fall ein Modul, das durch einen auf dem falschen Offset landenden Page-Write unbrauchbar wird. Wenn nötig, vor Ort lesen; auf der Werkbank schreiben.
In CodingBox
CodingBox handhabt das Adressmodell je Formfaktor automatisch — A0h/A2h für SFP, Paging für QSFP und XFP, Bank + Seite für CMIS —, lässt Sie Busgeschwindigkeit und Schreib-Timing je Programmiergeräte-Profil einstellen und verifiziert jeden Schreibvorgang durch Rücklesen (Ein Modul beschreiben).