Interface deux fils : adresses, pages, banques et temporisation
Chaque module enfichable est géré sur les deux mêmes fils — une horloge série et une ligne de données série — via le protocole I²C que les spécifications appellent l’interface à deux fils (TWI). Ce qui diffère entre les modules SFP, QSFP, XFP et CMIS, c’est la façon dont l’espace d’adressage est organisé par-dessus : dispositifs séparés, mémoire paginée, ou banques de pages. Ce contenu est la vue au niveau protocole sur laquelle s’appuient les programmateurs, les hôtes et CodingBox.
Couche physique
- Deux lignes à drain ouvert, SCL et SDA, tirées au niveau haut côté hôte ; logique 3,3 V.
- Le module est toujours esclave ; l’hôte (ou le programmateur) est le maître et génère l’horloge.
- Les modules peuvent étirer l’horloge (maintenir SCL bas) pendant qu’un microcontrôleur récupère des données — les spécifications autorisent jusqu’à 500 µs.
- La présence et la sélection sont des broches séparées, pas des transactions de bus : MOD_ABS (SFP), ModPrsL et ModSelL (classe QSFP et CMIS). ModSelL permet à plusieurs modules de partager un même bus ; le SFP n’a pas de broche de sélection, donc les hôtes donnent à chaque cage son propre bus ou un multiplexeur.
Espace d’adressage par spécification
| Famille | Adresses de dispositif (écriture 8 bits / 7 bits) | Organisation | Sélection de page |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | identité A0h / 50h, diagnostics A2h / 51h | A0h : 256 octets plats ; A2h : 128 plats + moitié supérieure paginée facultative | octet 127 de A2h, si le bit 4 de l’octet 64 de A0h est positionné |
| XFP (INF-8077i) | A0h | 128 plats + « tables » supérieures paginées | octet 127 |
| QSFP+, QSFP28 (SFF-8636) | A0h | 128 plats + 128 supérieurs paginés | octet 127 |
| QSFP-DD, OSFP, SFP-DD… (CMIS) | A0h | 128 plats + banques × pages de 128 supérieurs | octet 126 banque, octet 127 page |
Un SFP a donc besoin de deux adresses de dispositif et d’aucune pagination pour l’essentiel ; tout ce qui vient après le XFP utilise une seule adresse et la pagination. Certains SFP anciens positionnent le bit 2 de l’octet 92 de A0h (« changement d’adresse requis ») et nécessitent une séquence fournisseur avant que A2h ne réponde.
Transactions
| Opération | Séquence | Remarques |
|---|---|---|
| Lecture aléatoire | START · adresse dispositif+W · décalage d’octet · START · adresse dispositif+R · données… · STOP | la lecture courante ; le décalage s’incrémente automatiquement |
| Lecture séquentielle | poursuite de l’horloge après le premier octet | boucle de 255 → 0 dans la vue courante du dispositif/de la page |
| Lecture à l’adresse courante | START · adresse dispositif+R · données | reprend au dernier décalage — fragile si un autre maître est intervenu |
| Écriture d’octet | START · addr+W · décalage · données · STOP | puis attendre t_WR |
| Écriture de page | START · addr+W · décalage · données × n · STOP | limitée par le dispositif mémoire (typiquement 4–16 octets) et ne doit pas franchir sa frontière de page interne |
| Interrogation d’acquittement | émettre START + addr+W jusqu’à ce que le module envoie un ACK | le moyen le plus rapide de savoir qu’un cycle d’écriture est terminé |
Lire une page supérieure est toujours deux transactions : écrire l’octet de sélection de page (127, et 126 pour les banques CMIS), puis lire 128–255. La sélection persiste jusqu’à modification, ce qui explique qu’une sélection de page obsolète soit une cause classique de lectures au « mauvais contenu ».
Vitesse
| Spécification | Horloge |
|---|---|
| SFF-8472 (SFP) | base 100 kHz ; certains modules tolèrent 400 kHz |
| INF-8077i (XFP) | 100 kHz |
| SFF-8636 rev 2.x (QSFP) | jusqu’à 400 kHz |
| Spécifications matérielles CMIS / QSFP-DD / OSFP | jusqu’à 400 kHz |
Une vitesse plus lente est toujours autorisée. Pour les écritures, la plupart des programmateurs descendent bien en dessous de l’horloge nominale — jusque dans les kilohertz bas — car les cycles d’écriture EEPROM et les modules à microcontrôleur sont bien plus sensibles à la temporisation que les lectures.
Temporisations importantes
| Paramètre | Limite typique | Signification |
|---|---|---|
| t_init (SFP) | 300 ms | de la mise sous tension / négation de TX_DISABLE jusqu’à ce que le module soit pleinement opérationnel et que le bus réponde |
| t_init (QSFP) | 2 s | jusqu’à ce que l’initialisation se termine et que Data_Not_Ready s’efface |
| MgmtInit (CMIS) | ≤ 2 s selon les spécifications matérielles | jusqu’à ce que le module quitte MgmtInit et que l’identité soit valide |
| t_WR | 40 ms | cycle d’écriture maximal pour une écriture d’octet ou séquentielle ; interroger l’ACK ou attendre |
| t_clock_hold | 500 µs | étirement d’horloge maximal par le module |
| ton_IntL | 200 ms | de l’événement d’indicateur à l’activation d’IntL |
| Données prêtes | bit 0 de l’octet 110 (SFP), bit 0 de l’octet 2 (QSFP) | ne pas se fier aux moniteurs tant que positionné |
Pièges et corrections
| Symptôme | Cause protocolaire | Correction |
|---|---|---|
| Tout à FFh | pas d’ACK — mauvaise adresse de dispositif, page non mise en œuvre, module absent | vérifier A0h contre A2h, les bits de page, l’insertion |
| Mauvais contenu | sélection de page/banque obsolète | écrire 127 (et 126) avant chaque accès à une page supérieure |
| Octets corrompus | horloge trop rapide, câbles longs, conflit avec un hôte qui interroge le DDM | ralentir, câble court, lire sur banc plutôt que dans un commutateur en production |
| L’écriture « réussit », relit l’ancienne valeur | écriture trop rapide, t_WR ignoré, franchissement d’une frontière d’écriture de page | écritures d’octet ou petits blocs avec attentes ; interrogation d’ACK |
| Bus bloqué, SCL ou SDA maintenu bas | transaction interrompue | générer neuf impulsions SCL, puis STOP ; réinitialiser l’alimentation du module |
| Fonctionne dans le commutateur, mort sur le programmateur | le module attend LPMode relâché ou une broche de sélection | respecter ModSelL/LPMode ; laisser le temps t_init |
Les diagnostics correspondants côté banc sont réunis dans Erreurs de lecture et d’écriture EEPROM ; les mécanismes de protection qui se superposent au bus (mots de passe, WP matérielle, commandes de sauvegarde) figurent dans Types de protection en écriture.
Lecture dans un système en production
Un hôte interroge le DDM toutes les quelques secondes et réagit aux indicateurs ; un second maître sur le même bus (une pince de programmateur, un outil in-band) provoque des collisions, des écritures mal adressées et, au pire, un module briqué par une écriture de page tombant sur le mauvais décalage. Lisez en place si nécessaire ; écrivez sur le banc.
Dans CodingBox
CodingBox gère automatiquement le modèle d’adressage selon le facteur de forme — A0h/A2h pour le SFP, pagination pour le QSFP et le XFP, banque + page pour CMIS —, vous permet de régler la vitesse de bus et la temporisation d’écriture par profil de programmateur, et vérifie chaque écriture par relecture (Écrire un module).