CodingBox ドキュメント

プログラマーでの EEPROM 読み書きエラー

モジュールを診断またはコーディングする前に、まず読み取りが必要です。そして多くの場合、書き込みも必要になります。このどちらの手順にも、特徴的な失敗パターンがあります。このページでは、モジュールがまったく認識されない場合から、「成功」したはずの書き込みが静かに消えてしまう場合まで、それぞれの失敗を原因と、それを解決する設定や手順に対応付けます。

モジュールが検出されない

確認項目理由
挿し込みとクレードルモジュールはコネクタの奥まで確実に挿す必要がある。フォームファクターに合ったアダプターを使う — QSFP クレードルに挿した SFP は認識されない
起動待ち時間モジュールは挿入後、2線バスが応答するまでに最大約2秒(SFP)、CMIS ではそれ以上かかる
モジュール存在信号MOD_ABS/ModPrsL がアサートされている必要がある。ピンの曲がりや、この信号を持たないモジュールは「存在しない」ように見える
低電力状態(CMIS)LowPwr でも識別情報は読み取れるが、完全なアクセスにはReady状態を要求するホスト/プログラマーもある
バス速度100 kHz 以下から始める。400 kHz では NACK を返すモジュールもある
死んだモジュールどの速度でも DDM も識別情報も得られない — 故障と断定する前に、別のコーディングボードで確認する

読み取り結果が FFh、00h、または不正な値になる

症状原因対処法
すべてFFhI²C の NACK — そのアドレスにデバイスがない、またはページが存在しないアドレスを確認する(SFP では識別情報の A0h と診断の A2h、QSFP/CMIS ではページング付きの単一 A0h)
すべて00hモジュールに電源が入っていない/リセット状態にある、または実際に EEPROM が空であるクレードルへの電源供給とモジュールの装着を確認する。未コーディングの在庫品など、空のモジュールも存在する
長さは正しいが内容が違う意図したものと異なるページを読み取っているページ選択バイト(127)を書き込んでから再読み取りする。CMIS ではバンク選択(126)も
バイトが乱れる/ずれるバスが速すぎる、ケーブルが長い、ホストとの競合100 kHz 以下に落とす。短いリード線を使う。稼働中のスイッチではなくベンチで読み取る
A2h の読み取りは失敗するが A0h は正常診断機能を持たないモジュール、または診断ブロックが保護されているA0h の byte 92 bit 6(DDM implemented)を確認する。書き込み保護されたタイプの一部は A0h にしか応答しない
読み取るたびに値が変わるライブ監視 — 正常な動作。またはdata not readyDDM のバイトは変化するのが正常。スナップショットを信頼する前にデータレディビットを確認する

書き込みが完全に失敗する

WRITE FAIL、データに対する NACK、または書き込み後に読み返しても値が変わっていない場合:

原因見分け方対処法
パスワードが必要(ファームウェアコントローラー)パスワードアドレス(SFP A2h 0x7B–0x7E、QSFP 123–126、CMIS 122–125)に正しい値を書き込むまで書き込みが拒否される書き込み保護されたメモリとパスワードでモジュールのパスワードを入力する。既知のベンダーパスワードはデータベースから自動的に適用される
ハードウェア書き込み保護パスワードに関係なく読み取り専用で、電源を入れ直しても解除されないWP ピンをコーディングボードで駆動する必要がある — ソフトウェアだけでは解除できない。書き込み保護の種類を参照
タイミング断続的な失敗、ページの一部しか書き込まれないクロックを落とす(信頼できる EEPROM 書き込みには約1 kHz が必要なことが多い)、バイト/ページ間の書き込みサイクル時間(5–10 ms)を守る、ブロック間に遅延を追加する
読み取り専用領域特定のバイトが変化しない(チェックサム、一部製品のしきい値、ベンダー領域)EEPROM には設計上保護された領域がある。モジュールが許可するフィールドのみ書き込む
状態の誤りCMIS モジュールでは、書き込みを受け付ける前に LowPwr、またはデータパスの非アクティブ化が必要な場合がある先にモジュールを必要な状態にする
ページが未選択正しいオフセットに、誤ったページで書き込んでしまった書き込み前に byte 127(および 126)を設定し、ページ選択バイトを読み返して確認する

書き込みは「成功」するが定着しない

  • 電源を入れ直すと元に戻る — モジュールは書き込み内容を一時メモリーに保持しており、ベンダー独自のsave コマンドが必要です。これを実行しないと、古いイメージに戻ってしまいます。プログラミングスクリプトで対応します(書き込み保護タイプ4)。
  • 即座に元に戻る — マイクロコントローラーが自身のストアから EEPROM の内容をミラーリングし、書き込んだバイトを上書きしてしまいます。メーカー独自のアルゴリズムが必要です(タイプ5)。
  • 一部のバイトだけ定着する — 部分的に保護されたマップです。フィールドごとに書き込み、それぞれ検証してください。

書き込み成功後にホストがモジュールを拒否する

原因対処法
チェックサムが古いまま — CC_BASE(byte 63)、CC_EXT(95)、CC_DMI(A2h 95)、QSFP 191/223再計算する。CodingBox は書き込み時に自動的に行う(メモリーマップ
識別情報に矛盾が生じた — 例えばベンダーは変更したが、コンプライアンスコードや波長が異なるハードウェアを示している識別情報を実際の光学系と整合させる(速度とレート物理的な不一致
誤ったモジュール種別のレイアウトに書き込んだXFP を SFP として書き込んでしまった、または QSFP のページを取り違えた — バックアップから復元する

書き込み後にモジュールが死ぬ

校正定数、しきい値、またはベンダー固有領域(一部のコントローラーは、ここに設定を保持している)に不正な値を書き込むと、モジュールが文鎮化することがあります。復旧の手順:CodingBox が書き込み前に取得したバックアップcode database から復元し、意図したフィールドのみを書き込み直してください。

鉄則

  1. まず読み取って保存する — どの書き込みも、その前にデータベースへ記録される完全な読み取りを行う。
  2. 最初の書き込みを試す前に保護タイプを特定する書き込み保護の種類)。
  3. ゆっくり進める — クロックとバイト間タイミングが、「ランダムな」失敗の大半を解決する。
  4. 意図したものだけを書き込む — イメージを復元する場合を除き、ページ全体ではなくフィールド単位で。
  5. 電源を入れ直したあとに再読み取りして検証する。

CodingBox での作業

CodingBox は、フォームファクターごとに正しいアドレスとページングでモジュールを読み取り、EEPROM editor で生バイトとデコード後の値を表示し、書き込み時にチェックサムを再計算し、バックアップを自動的に保存します。また、保護されたモジュールや save コマンドが必要なモジュールのために、パスワード入力とプログラミングスクリプトにも対応しています(モジュールへの書き込み)。コーディングボード自体の故障が疑われる場合は、製品のトラブルシューティングを参照してください。

これらの失敗の背後にあるバスの仕組み — アドレス、ページ選択、書き込みサイクル時間、クロックストレッチ:2線インターフェース

モジュールがそのように応答する理由 — MCU によるメモリーエミュレーション、ブート時間枠、クロックストレッチ、保護領域:コントローラーとファームウェア


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