CodingBox ドキュメント

書き込み保護の方式とプログラミング

フォームファクターは、モジュールの各フィールドがどこにあるかを教えてくれます。もう一つの独立した軸が、それを変更できるかどうか——モジュールが書き込みに対してメモリーをどう保護するか——を決めます。メーカーは5通りの方式を使っており、それぞれ異なるプログラミング方法が必要です。先に種類を見極めることで、書き込み失敗による何時間もの無駄を避けられます。

5つの保護方式

#種類見分け方プログラム方法
1保護なしただちに書き込みを受け付ける直接書き込み——ただし低速クロック
2ハードウェア書き込み保護ピン何を試しても読み取り専用のまま。パスワードも効かない書き込み中にWP ラインを制御
3パスワード(ファームウェアコントローラー)パスワードを入力するまで WRITE FAILまず 0x7B にパスワードを入力
4一時記憶 + 保存コマンド書き込みは「成功」するが電源再投入後に元に戻るベンダーの保存シーケンスを送信
5複合方式解除にベンダー固有の I/O シーケンスが必要ベンダーのプログラミングアルゴリズム(スクリプト)

1. 保護なし

EEPROM に書き込み制限はありません。実務上のネックはタイミングです。安定したプログラミングには、通常の読み取り速度よりおよそ10倍遅い、1 kHz 前後の2線クロックが必要です。標準速度では書き込みが断続的に失敗し、一部だけ書き込まれたページが残ります。関連する兆候として、一部の単純なモジュールでは A0h だけが正常に読み取れ、A2h はエラーを返します。

2. ハードウェア書き込み保護ピン

EEPROM のWP ピンは抵抗を介して電源に接続されているため、チップは電源投入時にロックされた状態になります。ロックの解除には、書き込みの最中に WP ラインを低インピーダンス経路でグラウンド側へ引き下げる必要があり、これはそのラインを制御できるプログラマーボードでなければできません。ソフトウェアだけではこのタイプを突破できません。電源再投入やパスワードを試しても、モジュールは読み取り専用のままです。

3. パスワード保護(ファームウェアコントローラー)

SFF-8472 に従い、A2h ブロックはオフセット 0x7B から始まる7バイトのパスワード領域を確保しています。ほとんどのモジュールは4バイトのパスワードを使用します。モジュール内のコントローラーは、そこに書き込まれた値を保存済みの値と比較し、一致した場合のみ EEPROM への書き込みを解除します。パスワードなしでは、すべての書き込みが WRITE FAIL を返します。

  • 正しいパスワードを入力してから書き込みます。
  • 不明な場合:既知のベンダーパスワードの辞書探索(よくある値はEEPROM のリコーディングを参照)か、メーカーへの問い合わせ。
  • これらのコントローラーはクロック速度やブロック間の間隔に敏感です——これも低速でプログラムすべき理由の一つです。

4. 一時記憶と保存コマンド

書き込みは揮発性メモリーに入ります。一見すべて問題ないように見えますが、モジュールの電源を再投入すると古いコードに戻ってしまいます。ベンダーのファームウェアは、一時的なイメージを永続ストレージへ確定させるために、明示的な保存コマンド(ベンダー独自のバイトシーケンス)を必要とします。これを定めた標準は存在せず、ベンダーごとにシーケンスが異なり、スクリプトとして記録されます。

5. 複合保護

最新のモジュールは、ハードウェア WP パスワード保存コマンド動作上の前提条件——たとえば書き込みを受け付ける前にモジュールを低消費電力モードにする必要がある、といったもの——を組み合わせて重ねています。これは、A2h オフセット 0x80 以降に256ページ以上を公開する最近の SFF-8472 改訂版のモジュールや、CMIS モジュールに典型的です。プログラミングにはメーカーのアルゴリズムが必要で、通常は大口購入顧客にのみ提供されます。

種類の見分け方

  1. まず素の読み取りを試します。A2h は正常に読み取れるか?(タイプ1はここでよく失敗します。)
  2. 保護されていないフィールドへ1バイトの書き込みを試します。即座に成功→タイプ1。WRITE FAIL→タイプ3(またはタイプ5)。エラーなく成功したように見えて電源再投入後に元に戻る→タイプ4。
  3. 既知のパスワードを入力します。それでも読み取り専用のまま→タイプ2(ハードウェア)またはタイプ5(複合)。
  4. フォームファクターと仕様の改訂版を確認します——CMIS と後期改訂版の SFF-8472 モジュールは、通常タイプ5です。

CodingBox では

  • パスワード設定 — テーブルアドレス、パスワードアドレス(0x7B)、値は書き込み保護されたメモリとパスワードで設定します。既知のパスワードはデータベースから適用されます。
  • スクリプト — CodingBox のプログラミングスクリプトには、タイプ4とタイプ5向けのベンダー保存シーケンスと解除アルゴリズムが収められています。
  • 標準速度で失敗するモジュール向けの1バイトずつの書き込みと低速クロック
  • ハードウェア WP はソフトウェアではなく、プログラマーボード側で扱います。
  • 書き込みを行う前に、読み取った内容はすべてcode databaseに保存されるため、失敗しても必ず復元できます。

ベンチで見られる症状——WRITE FAIL、元に戻ってしまう書き込み、拒否されるパスワード——とその対処法:EEPROM の読み書きエラー

これらの種類が存在する理由——独立した EEPROM か MCU がエミュレートするマップか、保存コマンド、ファームウェアミラー、ファームウェアが実装する署名について:コントローラーとファームウェア


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