ホストの処理:検出、検証、起動
仕様書が記述するのはモジュール側、すなわちピン、メモリ、状態です。このページが記述するのは ホスト側、すなわちモジュールが挿入された瞬間からトラフィックが流れ始めるまでにスイッチ、ルーター、NIC がたどる手順であり、各ステップで使われるピン、バイト、タイミングです。これを知っていれば、「ポートが unsupported と言っている」が「ホストがステップ4で止まっている」に変わり、ベンチでは完璧に見えるモジュールがポートでは動かないことがある理由も分かります。
フォームファクターごとの低速信号
| フォームファクター | 存在検出 | リセット/電源 | 割り込み/障害 | その他 |
|---|---|---|---|---|
| SFP / SFP+ / SFP28 | MOD_ABS(low = 装着) | —(TX_DISABLE がレーザーをゲート) | TX_FAULT、RX_LOS | RS0、RS1 レート選択 |
| XFP | Mod_ABS | P_Down/RST | Interrupt、Mod_NR(not ready)、RX_LOS | TX_DIS、Mod_DeSel |
| QSFP+ / QSFP28 | ModPrsL | ResetL、LPMode | IntL | ModSelL |
| QSFP-DD | ModPrsL | ResetL、LPMode | IntL | ModSelL |
| OSFP | PRSn | RSTn、LPWn | INT | —(セレクトピンなし、ポートごとに1本のバス) |
| SFP-DD | SFP と同様にモジュール不在を示す | 低電力リクエスト | 割り込み | SFP と同様のレート選択 |
ファミリーごとのピン機能とピン配列:SFP ハードウェア、 QSFP ハードウェア、XFP。
手順
| # | ステップ | SFP(SFF-8472) | QSFP(SFF-8636) | CMIS | 失敗の見え方 |
|---|---|---|---|---|---|
| 1 | 検出 | MOD_ABS が low になる;デバウンス | ModPrsL が low | ModPrsL / PRSn が low | ポートが空のまま;モジュール「未検出」 |
| 2 | 電源投入と待機 | 3.3 V は常時オン;t_init 300 ms 待機 | LPMode を high にして電源投入(クラス 1 のみ);t_init 2 s 待機、または Data_Not_Ready をポーリング | 同様;モジュール状態が MgmtInit を抜けるまで待機(≤ 2 s) | 読み取り結果が FFh / 00h;識別情報が空白 |
| 3 | 識別 | A0h 0–95 を読み取り;byte 0 = 03h で SFF-8472 パーサーを選択 | 0–127 と上位 00h を読み取り;byte 0 = 0Dh/11h、byte 1 はリビジョン | 下位ページと上位 00h を読み取り;byte 0 = 18h/19h…、byte 1 は CMIS バージョン | unknown module type |
| 4 | 検証 | CC_BASE、CC_EXT;識別子/コネクター/符号化方式の整合性 | CC_BASE、CC_EXT | page 00h のチェックサム | invalid EEPROM、checksum error — チェックサム |
| 5 | 種別をデコード | 準拠バイト 3–10、36;レートバイト 12/66;長さ;波長 | バイト 131–138、192;140/222 | メディアタイプ 85、アプリケーションディスクリプタ | speed and type not supported — コンプライアンスコード |
| 6 | ポリシー | ベンダー名/PN(場合によっては署名も)を互換性テーブルと照合 | 同様 | 同様 | unsupported transceiver、errdisable — ベンダーロック |
| 7 | 電力クラス | byte 64 のレベルビットとポートの予算を比較 | byte 129 のクラス;byte 93 に書き込んで低電力を解除/クラス 5–8 を有効化 | byte 200 のクラスとポートを比較;LPMode をネゲートするか LowPwrRequestSW をクリア → モジュール PwrUp → Ready | 低電力のまま保持、power exceeds — 電力と熱 |
| 8 | 設定 | RS0/RS1 またはソフトレート選択;ホスト側の速度、FEC、SGMII/1000BASE-X | CDR on/off(98)、レート選択(87–88)、ホスト側のブレークアウトレーン | ステージドコントロールセットで AppSel/DataPathID を選択 → ApplyDPInit → data path Init → Initialized | LOL、FEC の不一致、ブレークアウト拒否 — 速度とレート |
| 9 | Tx 有効化 | TX_DISABLE ピンを low にする、またはソフトビットをクリア(A2h 110.6) | byte 86 = 00h | page 10h byte 130 = 00h → DPTxTurnOn → DPActivated | 遠端は −40 dBm を検出 — リンク不通チェックリスト |
| 10 | リンク確立 | PHY/MAC が信号を検出;DAC では AN/リンクトレーニング | レーンごとに同様 | データパスごとに同様 | レベルは正常なのにリンクダウン |
| 11 | 監視 | 数秒ごとに A2h の監視項目とフラグをポーリング;TX_FAULT / RX_LOS ピン | IntL → flags 3–21 を読み取り;監視項目をポーリング | IntL → モジュールフラグ + page 11h のレーンフラグ;VDM | アラーム、フラッピング — DDM の値、リンクフラッピング |
| 12 | 取り外し | MOD_ABS が high → 後処理 | ModPrsL が high | ModPrsL が high | デバウンスを逃すと状態が残留 |
QSFP と CMIS モジュールでは、ステップ 3–6 は低電力の状態で行われます。ホストは、光学系に電力を使う前に検証を行うのです。ロックされたモジュールやコーディングを誤ったモジュールのレーザーが決して点灯しない理由、そして電気的には問題のないモジュールで遠端が −40 dBm を示す理由は、ここにあります。
ホストが待機するタイミング
| 待機 | SFP | QSFP | CMIS |
|---|---|---|---|
| 挿入後に管理可能になるまで | 300 ms | 2 s | ≤ 2 s(MgmtInit)、その後 LowPwr 状態 |
| 低電力解除後 | — | Data_Not_Ready が解除されるまで | モジュール状態が Ready になるまで(最大所要時間はページ 01h でアドバタイズ) |
| データパス初期化 | — | — | ステップごとにアドバタイズ(ニブルコード:< 1 ms … < 50 min) |
| Tx 有効化から発光まで | t_on ≤ 1 ms | ton_txdis 100 ms / toff 400 ms | DPTxTurnOn の所要時間をアドバタイズ |
| フラグから割り込みまで | — | ton_IntL 200 ms | ハードウェア仕様のとおり |
バスレベルのタイミング(t_WR、クロックストレッチ): 2線式インターフェース。
ホストによってポリシーが分かれる点
- ホワイトリストの厳格さ — 「ベンダー名のみ」から、署名付きのベンダー固有ブロックまで。
- 拒否された場合の挙動 — ポート無効化、レーザーオフ、あるいはログを残してリンクを許可(サードパーティ製光モジュール)。
- CMIS 対応の深さ — フルのアプリケーション/データパス制御か、「LPMode を解除して祈る」だけか(CMIS の問題)。
- FEC と速度の既定値 — コンプライアンスコードから導くか、静的に設定するか。
- DDM ポーリング — 間隔、しきい値超過でポートをシャットダウンするか、外部校正を適用するか(校正)。
ホストがどこで止まったかを確認するベンダーごとの CLI: スイッチでの光モジュール検証。
プログラマーとホストの違い
CodingBox のようなプログラマーは、ステップ 1–5 と 11 を実行しますが、ポリシーはありません。ベンダー領域やパスワードバイトを含め、モジュールが公開するものすべてを読み取り、指示がない限り CMIS モジュールを低電力のまま保ち、レーザーを自ら有効化することは決してありません。ベンチでは健全に見えるモジュールがポートでは動かないことがあるのはこのためです — ベンチにはステップ6がないのです。
CodingBox では
Check transceiver は、ステップ 3–5 の結果をホストが見るのと同じ形で表示します。種別、レート、チェックサム、電力クラスです。モジュールがポートに届く前に不整合を検出します。DDM は、リアルタイムの監視項目とフラグでステップ 11 をカバーします。
ステップ 6(ポリシー)の背後にあるハードウェアと、ステップ 8 の背後にあるポートグループの制限:スイッチの内部、 NOS ごとのモジュール検証方法。