Interfaccia a due fili: indirizzi, pagine, banchi e timing
Ogni modulo pluggable è gestito sugli stessi due fili — una linea di clock seriale e una linea dati seriale — usando il protocollo I²C che le specifiche chiamano interfaccia a due fili (TWI). Ciò che differisce tra i moduli SFP, QSFP, XFP e CMIS è come lo spazio di indirizzi è organizzato sopra questo livello: dispositivi separati, memoria paginata, o banchi di pagine. Questo materiale è la visione a livello di protocollo su cui si basano programmatori, host e CodingBox.
Livello fisico
- Due linee open-drain, SCL e SDA, con pull-up lato host; logica a 3,3 V.
- Il modulo è sempre lo slave; l’host (o il programmatore) è il master e genera il clock.
- I moduli possono allungare il clock (mantenere SCL basso) mentre un microcontroller recupera i dati — le specifiche consentono fino a 500 µs.
- Presenza e selezione sono pin separati, non transazioni sul bus: MOD_ABS (SFP), ModPrsL e ModSelL (classe QSFP e CMIS). ModSelL permette a più moduli di condividere un bus; l’SFP non ha un pin di selezione, quindi gli host assegnano a ogni gabbia il proprio bus o un multiplexer.
Spazio di indirizzi per specifica
| Famiglia | Indirizzi dispositivo (scrittura a 8 bit / 7 bit) | Organizzazione | Selezione pagina |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | A0h / 50h identità, A2h / 51h diagnostica | A0h: 256 byte piatti; A2h: 128 piatti + metà superiore paginata opzionale | byte 127 di A2h, se il bit 4 del byte 64 di A0h è impostato |
| XFP (INF-8077i) | A0h | 128 piatti + «tabelle» superiori paginate | byte 127 |
| QSFP+, QSFP28 (SFF-8636) | A0h | 128 piatti + 128 superiori paginati | byte 127 |
| QSFP-DD, OSFP, SFP-DD… (CMIS) | A0h | 128 piatti + banchi × pagine di 128 superiori | byte 126 banco, byte 127 pagina |
Un SFP richiede quindi due indirizzi dispositivo e nessuna paginazione per le funzioni di base; tutto ciò che viene dopo l’XFP usa un indirizzo e la paginazione. Alcuni SFP legacy impostano il bit 2 del byte 92 di A0h («cambio di indirizzo richiesto») e necessitano di una sequenza del produttore prima che A2h risponda.
Transazioni
| Operazione | Sequenza | Note |
|---|---|---|
| Lettura casuale | START · indirizzo dispositivo+W · offset di byte · START · indirizzo dispositivo+R · dati… · STOP | la lettura di uso quotidiano; l’offset si autoincrementa |
| Lettura sequenziale | continuare il clock dopo il primo byte | ricomincia da 255 → 0 all’interno della vista corrente di dispositivo/pagina |
| Lettura all’indirizzo corrente | START · indirizzo dispositivo+R · dati | continua dall’ultimo offset — fragile se un altro master è intervenuto |
| Scrittura di byte | START · indirizzo+W · offset · dati · STOP | poi attendere t_WR |
| Scrittura di pagina | START · indirizzo+W · offset · dati × n · STOP | limitata dal dispositivo di memoria (tipicamente 4–16 byte) e non deve attraversare il proprio limite interno di pagina |
| Polling di conferma | emettere START + indirizzo+W finché il modulo non conferma (ACK) | il modo più rapido per sapere che un ciclo di scrittura è terminato |
Leggere una pagina superiore sono sempre due transazioni: scrivere il byte di selezione pagina (127, e 126 per i banchi CMIS), poi leggere 128–255. La selezione persiste finché non viene cambiata, motivo per cui una selezione di pagina obsoleta è una fonte classica di letture con «contenuto errato».
Velocità
| Specifica | Clock |
|---|---|
| SFF-8472 (SFP) | 100 kHz di base; alcuni moduli tollerano 400 kHz |
| INF-8077i (XFP) | 100 kHz |
| SFF-8636 rev 2.x (QSFP) | fino a 400 kHz |
| Specifiche hardware CMIS / QSFP-DD / OSFP | fino a 400 kHz |
Più lento è sempre lecito. Per le scritture la maggior parte dei programmatori scende molto al di sotto del clock nominale — nell’ordine dei pochi kilohertz — perché i cicli di scrittura dell’EEPROM e i moduli mediati da microcontroller sono molto più sensibili alla temporizzazione rispetto alle letture.
Tempistiche importanti
| Parametro | Limite tipico | Significato |
|---|---|---|
| t_init (SFP) | 300 ms | dall’accensione / dalla negazione di TX_DISABLE finché il modulo è pienamente operativo e il bus risponde |
| t_init (QSFP) | 2 s | finché l’inizializzazione si completa e Data_Not_Ready si azzera |
| MgmtInit (CMIS) | ≤ 2 s secondo le specifiche hardware | finché il modulo esce da MgmtInit e l’identità è valida |
| t_WR | 40 ms | ciclo di scrittura massimo per una scrittura di byte o sequenziale; eseguire il polling dell’ACK o attendere |
| t_clock_hold | 500 µs | allungamento massimo del clock da parte del modulo |
| ton_IntL | 200 ms | dall’evento di flag all’asserzione di IntL |
| Dati pronti | byte 110 bit 0 (SFP), byte 2 bit 0 (QSFP) | non fidarsi dei monitor finché è impostato |
Insidie e le relative soluzioni
| Sintomo | Causa nel protocollo | Soluzione |
|---|---|---|
| Tutto FFh | nessun ACK — indirizzo dispositivo errato, pagina non implementata, modulo assente | verificare A0h rispetto ad A2h, bit di pagina, inserimento |
| Contenuto errato | selezione di pagina/banco obsoleta | scrivere 127 (e 126) prima di ogni accesso a pagina superiore |
| Byte corrotti | clock troppo veloce, cavi lunghi, contesa con un host che esegue il polling DDM | rallentare, cavo corto, leggere al banco e non in uno switch in produzione |
| La scrittura «riesce», la rilettura mostra il vecchio valore | scrittura troppo rapida, t_WR ignorato, superato un limite di scrittura di pagina | scritture di byte o piccoli blocchi con attese; polling dell’ACK |
| Il bus si blocca, SCL o SDA bloccati a basso | transazione interrotta | generare nove impulsi SCL, poi STOP; spegnere e riaccendere il modulo |
| Funziona nello switch, morto sul programmatore | il modulo si aspetta che LPMode sia rilasciato o un pin di selezione | rispettare ModSelL/LPMode; consentire t_init |
La diagnostica da banco per questi casi è raccolta in Errori di lettura e scrittura EEPROM; gli schemi di protezione che si appoggiano sopra il bus (password, WP hardware, comandi di salvataggio) sono in Tipi di protezione in scrittura.
Lettura in un sistema in produzione
Un host esegue il polling DDM ogni pochi secondi e reagisce ai flag; un secondo master sullo stesso bus (una clip di programmazione, uno strumento in-band) provoca collisioni, scritture indirizzate in modo errato e, nel peggiore dei casi, un modulo reso inutilizzabile da una scrittura di pagina che cade sull’offset sbagliato. Leggere sul posto se necessario; scrivere al banco.
In CodingBox
CodingBox gestisce automaticamente il modello di indirizzi per fattore di forma — A0h/A2h per SFP, paginazione per QSFP e XFP, banco + pagina per CMIS —, permette di impostare la velocità del bus e la temporizzazione di scrittura per profilo di programmatore, e verifica ogni scrittura rileggendo (Scrittura di un modulo).