CodingBox ドキュメント

2 線式インターフェース:アドレス、ページ、バンク、タイミング

着脱式モジュールはすべて、同じ2本の線 — シリアルクロックとシリアルデータ線 — 越しに管理され、仕様が 2線インターフェース(TWI) と呼ぶ I²C プロトコルを使用します。SFP、 QSFP、XFP、CMIS の各モジュールで異なるのは、その上にアドレス空間がどう構成されているかです。個別のデバイス、ページ化メモリ、あるいはページのバンクです。この資料は、プログラマー、ホスト、CodingBox がいずれも頼りにしているプロトコルレベルの視点です。

物理層

  • オープンドレインの2本の線、SCLSDA。ホスト側でプルアップされ、3.3 V ロジックです。
  • モジュールは常に スレーブ です。ホスト(またはプログラマー)がマスターとなり、クロックを生成します。
  • モジュールはマイクロコントローラーがデータを取得する間、クロックストレッチ (SCL をローに保持)することがあります — 仕様は最大 500 µs まで許容しています。
  • 存在検知と選択はバストランザクションではなく別のピンで行います。MOD_ABS(SFP)、 ModPrsL と ModSelL(QSFP 系と CMIS)です。ModSelL によって複数のモジュールが 1本のバスを共有できます。SFP には選択ピンがないため、ホストはケージごとに専用バスを用意するか、マルチプレクサを使います。

仕様ごとのアドレス空間

ファミリーデバイスアドレス(8ビット書き込み/7ビット)構成ページ選択
SFP、SFP+、SFP28(SFF-8472A0h / 50h 識別情報、A2h / 51h 診断A0h:256 バイトのフラット構成;A2h:128 バイトのフラット + 任意のページ化された上位半分A2h バイト 127、A0h バイト 64 のビット 4 が立っている場合
XFP(INF-8077iA0h128 バイトのフラット + ページ化された上位「テーブル」バイト 127
QSFP+、QSFP28(SFF-8636A0h128 バイトのフラット + ページ化された上位 128 バイトバイト 127
QSFP-DD、OSFP、SFP-DD…(CMISA0h128 バイトのフラット + 上位 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_WR40 msバイトまたはシーケンシャルライトの最大書き込みサイクル;ACK をポーリングするか待機する
t_clock_hold500 µsモジュールによる最大クロックストレッチ
ton_IntL200 msフラグイベントから IntL アサートまで
データレディバイト 110 ビット 0(SFP)、バイト 2 ビット 0(QSFP)立っている間は監視値を信用しないこと

落とし穴とその対処

症状プロトコル上の原因対処法
すべて FFhACK なし — デバイスアドレスの誤り、ページ未実装、モジュール不在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 はバンク + ページです。バス速度と書き込みタイミングはプログラマープロファイルごとに設定でき、書き込みのたびに読み戻して検証します(モジュールへの書き込み)。


この記事に不正確な点や誤りを見つけた場合は、該当する箇所を選択して Ctrl+Enter を押すと、できます。