Antarmuka dua kawat: alamat, halaman, bank, dan timing
Setiap modul pluggable dikelola lewat dua kawat yang sama — satu jalur clock serial dan satu jalur data serial — menggunakan protokol I²C yang oleh spesifikasi disebut antarmuka dua kawat (TWI). Yang berbeda antara modul SFP, QSFP, XFP, dan CMIS adalah cara ruang alamat diorganisasi di atasnya: perangkat terpisah, memori berhalaman, atau bank berisi halaman. Materi ini adalah sudut pandang tingkat protokol yang menjadi acuan programmer, host, dan CodingBox.
Lapisan fisik
- Dua jalur open-drain, SCL dan SDA, ditarik naik (pull-up) di sisi host; logika 3,3 V.
- Modul selalu menjadi slave; host (atau programmer) adalah master dan membangkitkan clock.
- Modul dapat meregangkan clock (menahan SCL tetap low) saat mikrokontroler mengambil data — spesifikasi mengizinkan hingga 500 µs.
- Keberadaan dan pemilihan modul adalah pin terpisah, bukan transaksi bus: MOD_ABS (SFP), ModPrsL dan ModSelL (kelas QSFP dan CMIS). ModSelL memungkinkan beberapa modul berbagi satu bus; SFP tidak memiliki pin pemilihan, sehingga host memberi setiap cage bus tersendiri atau sebuah multiplekser.
Ruang alamat menurut spesifikasi
| Keluarga | Alamat perangkat (tulis 8-bit / 7-bit) | Organisasi | Pemilihan halaman |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | identitas A0h / 50h, diagnostik A2h / 51h | A0h: 256 byte datar; A2h: 128 byte datar + separuh atas opsional berhalaman | byte 127 A2h, jika bit 4 byte 64 A0h diset |
| XFP (INF-8077i) | A0h | 128 datar + “tabel” atas berhalaman | byte 127 |
| QSFP+, QSFP28 (SFF-8636) | A0h | 128 datar + 128 atas berhalaman | byte 127 |
| QSFP-DD, OSFP, SFP-DD… (CMIS) | A0h | 128 datar + bank × halaman dari 128 atas | byte 126 bank, byte 127 halaman |
Karena itu, SFP membutuhkan dua alamat perangkat dan tanpa paging untuk hal dasar; semuanya setelah XFP memakai satu alamat dan paging. Sebagian SFP lawas mengatur bit 2 byte 92 A0h (“perlu perubahan alamat”) dan membutuhkan urutan khusus vendor sebelum A2h merespons.
Transaksi
| Operasi | Urutan | Catatan |
|---|---|---|
| Baca acak | START · alamat perangkat+W · offset byte · START · alamat perangkat+R · data… · STOP | pembacaan sehari-hari; offset naik otomatis |
| Baca sekuensial | terus menghasilkan clock setelah byte pertama | melingkar di 255 → 0 dalam tampilan perangkat/halaman saat ini |
| Baca alamat-saat-ini | START · alamat perangkat+R · data | melanjutkan dari offset terakhir — rapuh jika ada master lain yang ikut campur |
| Tulis byte | START · addr+W · offset · data · STOP | lalu tunggu t_WR |
| Tulis halaman | START · addr+W · offset · data × n · STOP | dibatasi oleh perangkat memori (biasanya 4–16 byte) dan tidak boleh melewati batas halaman internalnya |
| Polling acknowledge | keluarkan START + addr+W hingga modul memberi ACK | cara tercepat mengetahui sebuah siklus penulisan selesai |
Membaca halaman atas selalu berupa dua transaksi: tulis byte pemilihan halaman (127, dan 126 untuk bank CMIS), lalu baca 128–255. Pilihan ini bertahan sampai diubah, sehingga pemilihan halaman yang basi menjadi sumber klasik pembacaan “isi yang salah”.
Kecepatan
| Spesifikasi | Clock |
|---|---|
| SFF-8472 (SFP) | dasar 100 kHz; sebagian modul mentolerasi 400 kHz |
| INF-8077i (XFP) | 100 kHz |
| SFF-8636 rev 2.x (QSFP) | hingga 400 kHz |
| Spesifikasi perangkat keras CMIS / QSFP-DD / OSFP | hingga 400 kHz |
Lebih lambat selalu diperbolehkan. Untuk penulisan, sebagian besar programmer turun jauh di bawah clock nominal — ke kisaran kilohertz rendah — karena siklus penulisan EEPROM dan modul yang diperantarai mikrokontroler jauh lebih sensitif terhadap timing dibandingkan pembacaan.
Timing yang penting
| Parameter | Batas tipikal | Arti |
|---|---|---|
| t_init (SFP) | 300 ms | dari power-up / negasi TX_DISABLE hingga modul beroperasi penuh dan bus merespons |
| t_init (QSFP) | 2 s | hingga inisialisasi selesai dan Data_Not_Ready bersih |
| MgmtInit (CMIS) | ≤ 2 s menurut spesifikasi perangkat keras | hingga modul keluar dari MgmtInit dan identitas valid |
| t_WR | 40 ms | siklus penulisan maksimum untuk byte tunggal atau penulisan sekuensial; poll ACK atau tunggu |
| t_clock_hold | 500 µs | peregangan clock maksimum oleh modul |
| ton_IntL | 200 ms | dari event flag hingga IntL aktif |
| Data ready | bit 0 byte 110 (SFP), bit 0 byte 2 (QSFP) | jangan percaya monitor selama bit ini diset |
Jebakan dan solusinya
| Gejala | Penyebab protokol | Solusi |
|---|---|---|
| Semua FFh | tidak ada ACK — alamat perangkat salah, halaman tidak diterapkan, modul tidak ada | periksa A0h vs A2h, bit halaman, dudukan modul |
| Isi salah | pemilihan halaman/bank yang basi | tulis 127 (dan 126) sebelum setiap akses halaman atas |
| Byte rusak | clock terlalu cepat, kabel panjang, rebutan dengan host yang mem-poll DDM | perlambat, kabel pendek, baca di meja kerja bukan di switch yang hidup |
| Penulisan “berhasil”, baca kembali nilai lama | menulis terlalu cepat, mengabaikan t_WR, melewati batas penulisan halaman | tulis per byte atau blok kecil dengan jeda; polling ACK |
| Bus macet, SCL atau SDA tertahan low | transaksi terputus | keluarkan sembilan pulsa SCL, lalu STOP; power-cycle modul |
| Berfungsi di switch, mati di programmer | modul menunggu LPMode dilepas atau pin pemilihan | patuhi ModSelL/LPMode; beri waktu t_init |
Diagnostik sisi meja kerja untuk semua ini terkumpul di Error baca & tulis EEPROM; skema proteksi yang berjalan di atas bus (kata sandi, WP perangkat keras, perintah simpan) ada di Jenis write-protection.
Membaca dalam sistem yang hidup
Host mem-poll DDM setiap beberapa detik dan bereaksi terhadap flag; master kedua pada bus yang sama (klip programmer, tool in-band) menyebabkan tabrakan, penulisan salah alamat, dan yang terparah, modul yang rusak total karena penulisan halaman mendarat di offset yang salah. Baca di tempat jika Anda terpaksa; tulis di meja kerja.
Di CodingBox
CodingBox menangani model alamat per faktor bentuk secara otomatis — A0h/A2h untuk SFP, paging untuk QSFP dan XFP, bank + halaman untuk CMIS — memungkinkan Anda mengatur kecepatan bus dan timing penulisan per profil programmer, dan memverifikasi setiap penulisan dengan membaca kembali (Menulis modul).