İki telli arayüz: adresler, sayfalar, bankalar ve zamanlama
Her takılabilir modül, spesifikasyonların iki telli arayüz (TWI) dediği I²C protokolünü kullanarak aynı iki tel — bir seri saat ve bir seri veri hattı — üzerinden yönetilir. SFP, QSFP, XFP ve CMIS modülleri arasındaki fark, adres alanının bunun üzerinde nasıl düzenlendiğidir: ayrı cihazlar, sayfalanmış bellek veya sayfa bankaları. Bu materyal, programlayıcıların, hostların ve CodingBox’ın hepsinin dayandığı protokol düzeyindeki görünümdür.
Fiziksel katman
- İki açık drenajlı hat, SCL ve SDA, host tarafında yukarı çekilir; 3,3 V mantık.
- Modül her zaman slave’dir; host (veya programlayıcı) master’dır ve saati üretir.
- Bir denetleyici veri getirirken modüller saati gerebilir (SCL’yi düşükte tutabilir) — spesifikasyonlar 500 µs’ye kadar izin verir.
- Varlık ve seçim, veri yolu işlemleri değil ayrı pinlerdir: MOD_ABS (SFP), ModPrsL ve ModSelL (QSFP sınıfı ve CMIS). ModSelL, birkaç modülün bir veri yolunu paylaşmasına olanak tanır; SFP’de seçim pini yoktur, bu yüzden hostlar her kafese kendi veri yolunu veya bir çoklayıcı verir.
Spesifikasyona göre adres alanı
| Aile | Cihaz adresleri (8 bit yazma / 7 bit) | Düzen | Sayfa seçimi |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | A0h / 50h kimlik, A2h / 51h tanılama | A0h: 256 düz bayt; A2h: 128 düz + isteğe bağlı sayfalanmış üst yarı | A0h bayt 64 bit 4 ayarlıysa, A2h bayt 127 |
| XFP (INF-8077i) | A0h | 128 düz + sayfalanmış üst “tablolar” | bayt 127 |
| QSFP+, QSFP28 (SFF-8636) | A0h | 128 düz + sayfalanmış üst 128 | bayt 127 |
| QSFP-DD, OSFP, SFP-DD… (CMIS) | A0h | 128 düz + üst 128’in banka × sayfaları | bayt 126 banka, bayt 127 sayfa |
Bu nedenle bir SFP, temel işlevler için iki cihaz adresine ihtiyaç duyar ve sayfalama kullanmaz; XFP’den sonraki her şey tek adres ve sayfalama kullanır. Bazı eski SFP’ler A0h bayt 92 bit 2’yi (“adres değişikliği gerekli”) ayarlar ve A2h yanıt vermeden önce bir satıcı dizisine ihtiyaç duyar.
İşlemler
| İşlem | Sıra | Notlar |
|---|---|---|
| Rastgele okuma | START · cihaz adresi+W · bayt ofseti · START · cihaz adresi+R · veri… · STOP | günlük okuma; ofset otomatik artar |
| Ardışık okuma | ilk bayttan sonra saatlemeye devam edin | geçerli cihaz/sayfa görünümünde 255 → 0’da sarar |
| Geçerli adres okuması | START · cihaz adresi+R · veri | son ofsetten devam eder — başka bir master araya girdiyse kırılgandır |
| Bayt yazma | START · adres+W · ofset · veri · STOP | ardından t_WR kadar bekleyin |
| Sayfa yazma | START · adres+W · ofset · veri × n · STOP | bellek cihazıyla sınırlıdır (tipik olarak 4–16 bayt) ve kendi iç sayfa sınırını aşmamalıdır |
| Onay sorgulama | modül ACK verene kadar START + adres+W gönderin | bir yazma döngüsünün bittiğini bilmenin en hızlı yolu |
Bir üst sayfayı okumak her zaman iki işlemdir: sayfa seçim baytını yazın (127, CMIS bankaları için ayrıca 126), ardından 128–255’i okuyun. Seçim değiştirilene kadar kalıcıdır; bu yüzden eskimiş bir sayfa seçimi, “yanlış içerik” okumalarının klasik bir kaynağıdır.
Hız
| Spesifikasyon | Saat |
|---|---|
| SFF-8472 (SFP) | temel 100 kHz; bazı modüller 400 kHz’e tolerans gösterir |
| INF-8077i (XFP) | 100 kHz |
| SFF-8636 rev 2.x (QSFP) | 400 kHz’e kadar |
| CMIS / QSFP-DD / OSFP donanım spesifikasyonları | 400 kHz’e kadar |
Daha yavaş her zaman geçerlidir. Yazma için çoğu programlayıcı, nominal saatin çok altına — düşük kilohertz seviyesine — iner; çünkü EEPROM yazma döngüleri ve denetleyici aracılı modüller, okumalardan çok daha fazla zamanlamaya duyarlıdır.
Önemli olan zamanlamalar
| Parametre | Tipik sınır | Anlamı |
|---|---|---|
| t_init (SFP) | 300 ms | güç verilmesinden / TX_DISABLE kaldırılmasından, modülün tam olarak çalışır duruma gelmesine ve veri yolunun yanıt vermesine kadar |
| t_init (QSFP) | 2 s | başlatma tamamlanana ve Data_Not_Ready temizlenene kadar |
| MgmtInit (CMIS) | donanım spesifikasyonlarına göre ≤ 2 s | modül MgmtInit’ten çıkana ve kimlik geçerli olana kadar |
| t_WR | 40 ms | bir bayt veya ardışık yazma için maksimum yazma döngüsü; ACK’i sorgulayın veya bekleyin |
| t_clock_hold | 500 µs | modülün maksimum saat gerdirmesi |
| ton_IntL | 200 ms | bayrak olayından IntL etkinleşmesine kadar |
| Veri hazır | bayt 110 bit 0 (SFP), bayt 2 bit 0 (QSFP) | ayarlıyken ölçülen değerlere güvenmeyin |
Tuzaklar ve düzeltmeleri
| Belirti | Protokol nedeni | Düzeltme |
|---|---|---|
| Tümü FFh | ACK yok — yanlış cihaz adresi, sayfa uygulanmamış, modül yok | A0h’a karşı A2h’yi, sayfa bitlerini, oturmayı kontrol edin |
| Yanlış içerik | eskimiş sayfa/banka seçimi | her üst sayfa erişiminden önce 127’yi (ve 126’yı) yazın |
| Bozuk baytlar | saat çok hızlı, uzun kablo uçları, DDM’yi yoklayan bir hostla çakışma | yavaşlatın, kısa kablo kullanın, canlı bir anahtarda değil tezgâhta okuyun |
| Yazma “başarılı” ama eskisini geri okutuyor | çok hızlı yazıldı, t_WR yok sayıldı, bir sayfa yazma sınırı aşıldı | beklemeli bayt yazmaları veya küçük parçalar; ACK sorgulama |
| Veri yolu askıda kalır, SCL veya SDA düşükte sıkışır | yarıda kesilen işlem | dokuz SCL darbesi saatleyin, ardından STOP; modülü güç döngüsünden geçirin |
| Anahtarda çalışıyor, programlayıcıda ölü | modül LPMode’un bırakılmasını veya bir seçim pinini bekliyor | ModSelL/LPMode’a uyun; t_init’e izin verin |
Bunlar için tezgâh tarafı tanılama EEPROM okuma ve yazma hataları sayfasında toplanmıştır; veri yolunun üzerinde taşınan koruma şemaları (parolalar, donanımsal WP, kaydetme komutları) ise Yazma koruması türleri sayfasındadır.
Canlı bir sistemde okuma
Bir host DDM’yi birkaç saniyede bir yoklar ve bayraklara tepki verir; aynı veri yolundaki ikinci bir master (bir programlayıcı klipsi, bant içi bir araç) çakışmalara, yanlış adreslenmiş yazmalara ve en kötü durumda, yanlış bir ofsete inen bir sayfa yazmasının modülü kullanılamaz hale getirmesine yol açar. Gerekiyorsa yerinde okuyun; tezgâhta yazın.
CodingBox’ta
CodingBox, adres modelini form faktörüne göre otomatik olarak ele alır — SFP için A0h/A2h, QSFP ve XFP için sayfalama, CMIS için banka + sayfa — programlayıcı profiline göre veri yolu hızını ve yazma zamanlamasını ayarlamanızı sağlar ve her yazmayı geri okuyarak doğrular (Modül yazma).