2 線式インターフェース:アドレス、ページ、バンク、タイミング
着脱式モジュールはすべて、同じ2本の線 — シリアルクロックとシリアルデータ線 — 越しに管理され、仕様が 2線インターフェース(TWI) と呼ぶ I²C プロトコルを使用します。SFP、 QSFP、XFP、CMIS の各モジュールで異なるのは、その上にアドレス空間がどう構成されているかです。個別のデバイス、ページ化メモリ、あるいはページのバンクです。この資料は、プログラマー、ホスト、CodingBox がいずれも頼りにしているプロトコルレベルの視点です。
物理層
- オープンドレインの2本の線、SCL と SDA。ホスト側でプルアップされ、3.3 V ロジックです。
- モジュールは常に スレーブ です。ホスト(またはプログラマー)がマスターとなり、クロックを生成します。
- モジュールはマイクロコントローラーがデータを取得する間、クロックストレッチ (SCL をローに保持)することがあります — 仕様は最大 500 µs まで許容しています。
- 存在検知と選択はバストランザクションではなく別のピンで行います。MOD_ABS(SFP)、 ModPrsL と ModSelL(QSFP 系と CMIS)です。ModSelL によって複数のモジュールが 1本のバスを共有できます。SFP には選択ピンがないため、ホストはケージごとに専用バスを用意するか、マルチプレクサを使います。
仕様ごとのアドレス空間
| ファミリー | デバイスアドレス(8ビット書き込み/7ビット) | 構成 | ページ選択 |
|---|---|---|---|
| SFP、SFP+、SFP28(SFF-8472) | A0h / 50h 識別情報、A2h / 51h 診断 | A0h:256 バイトのフラット構成;A2h:128 バイトのフラット + 任意のページ化された上位半分 | A2h バイト 127、A0h バイト 64 のビット 4 が立っている場合 |
| XFP(INF-8077i) | A0h | 128 バイトのフラット + ページ化された上位「テーブル」 | バイト 127 |
| QSFP+、QSFP28(SFF-8636) | A0h | 128 バイトのフラット + ページ化された上位 128 バイト | バイト 127 |
| QSFP-DD、OSFP、SFP-DD…(CMIS) | A0h | 128 バイトのフラット + 上位 128 バイトのバンク × ページ | バイト 126 バンク、バイト 127 ページ |
したがって SFP は基本部分に 2つ のデバイスアドレスを必要とし、ページングは使いません。XFP 以降はすべて 1つ のアドレスとページングを使います。一部のレガシー SFP は A0h バイト 92 のビット 2(「アドレス変更が必要」)を立てており、A2h が応答する前にベンダー固有のシーケンスが必要です。
トランザクション
| 操作 | シーケンス | 備考 |
|---|---|---|
| ランダムリード | START・デバイスアドレス+W・バイトオフセット・START・デバイスアドレス+R・データ…・STOP | 日常的な読み取り;オフセットは自動インクリメント |
| シーケンシャルリード | 最初のバイトの後もクロックを続ける | 現在のデバイス/ページの範囲内で 255 → 0 にラップする |
| 現アドレスリード | START・デバイスアドレス+R・データ | 直前のオフセットから続く — 他のマスターが介入していると壊れやすい |
| バイトライト | START・アドレス+W・オフセット・データ・STOP | その後 t_WR だけ待つ |
| ページライト | START・アドレス+W・オフセット・データ × n・STOP | メモリデバイスによる制限あり(通常 4–16 バイト)、内部のページ境界をまたいではならない |
| ACK ポーリング | モジュールが ACK するまで START + アドレス+W を発行する | 書き込みサイクルの完了を知る最速の方法 |
上位ページの読み取りは常に2つのトランザクションになります。ページ選択バイト(127、 CMIS のバンクでは 126 も)を書き込んでから、128–255 を読み取ります。この選択は変更するまで保持されるため、古いままのページ選択が「内容が違う」という読み取りの典型的な原因になります。
速度
| 仕様 | クロック |
|---|---|
| SFF-8472(SFP) | 基本 100 kHz;400 kHz まで許容するモジュールもある |
| INF-8077i(XFP) | 100 kHz |
| SFF-8636 rev 2.x(QSFP) | 最大 400 kHz |
| CMIS/QSFP-DD/OSFP のハードウェア仕様 | 最大 400 kHz |
より遅い分には常に問題ありません。書き込み については、大半のプログラマーが公称クロックを大きく下回る — 数キロヘルツ台まで落とします。EEPROM の書き込みサイクルやマイクロコントローラー経由のモジュールは、読み取りよりもタイミングにはるかに敏感だからです。
重要なタイミング
| パラメーター | 標準的な上限 | 意味 |
|---|---|---|
| t_init(SFP) | 300 ms | 電源投入/TX_DISABLE 解除から、モジュールが完全に動作可能になりバスが応答するまで |
| t_init(QSFP) | 2 s | 初期化が完了し Data_Not_Ready がクリアされるまで |
| MgmtInit(CMIS) | ハードウェア仕様ごとに ≤ 2 s | モジュールが MgmtInit を抜け、識別情報が有効になるまで |
| t_WR | 40 ms | バイトまたはシーケンシャルライトの最大書き込みサイクル;ACK をポーリングするか待機する |
| t_clock_hold | 500 µs | モジュールによる最大クロックストレッチ |
| ton_IntL | 200 ms | フラグイベントから IntL アサートまで |
| データレディ | バイト 110 ビット 0(SFP)、バイト 2 ビット 0(QSFP) | 立っている間は監視値を信用しないこと |
落とし穴とその対処
| 症状 | プロトコル上の原因 | 対処法 |
|---|---|---|
| すべて FFh | ACK なし — デバイスアドレスの誤り、ページ未実装、モジュール不在 | A0h と A2h、ページビット、挿入状態を確認する |
| 内容が違う | 古いページ/バンク選択 | 上位ページへのアクセスの前に毎回 127(と 126)を書き込む |
| バイトが壊れる | クロックが速すぎる、配線が長い、DDM をポーリングするホストとの競合 | クロックを落とす、ケーブルを短くする、稼働中のスイッチではなくベンチで読む |
| 書き込みは「成功」するが古い値が読める | 書き込みが速すぎる、t_WR を無視した、ページライトの境界をまたいだ | バイト単位または小さな塊に待機を挟んで書き込む;ACK ポーリング |
| バスがハングする、SCL または SDA がローに固着 | トランザクションの中断 | SCL パルスを9回出力してから STOP する;モジュールの電源を入れ直す |
| スイッチでは動くがプログラマーでは反応しない | モジュールが LPMode の解除または選択ピンを期待している | ModSelL/LPMode を守る;t_init を待つ |
これらに対するベンチ側の診断は EEPROM の読み書きエラーにまとめてあります。バスの上位で動く保護の仕組み(パスワード、ハードウェア WP、保存コマンド)は 書き込み保護の種類にあります。
稼働中のシステムで読み取る
ホストは数秒ごとに DDM をポーリングし、フラグに反応します。同じバス上に第2のマスター(プログラマークリップやインバンドツール)がいると、衝突や誤ったアドレスへの書き込み、最悪の場合は誤ったオフセットへのページライトによるモジュールの文鎮化が起こります。必要な場合は現地で読み取り、書き込みはベンチで行ってください。
CodingBox では
CodingBox はフォームファクターごとのアドレスモデルを自動で扱います — SFP は A0h/A2h、 QSFP と XFP はページング、CMIS はバンク + ページです。バス速度と書き込みタイミングはプログラマープロファイルごとに設定でき、書き込みのたびに読み戻して検証します(モジュールへの書き込み)。