書き込み保護の方式とプログラミング
フォームファクターは、モジュールの各フィールドがどこにあるかを教えてくれます。もう一つの独立した軸が、それを変更できるかどうか——モジュールが書き込みに対してメモリーをどう保護するか——を決めます。メーカーは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 モジュールに典型的です。プログラミングにはメーカーのアルゴリズムが必要で、通常は大口購入顧客にのみ提供されます。
種類の見分け方
- まず素の読み取りを試します。A2h は正常に読み取れるか?(タイプ1はここでよく失敗します。)
- 保護されていないフィールドへ1バイトの書き込みを試します。即座に成功→タイプ1。
WRITE FAIL→タイプ3(またはタイプ5)。エラーなく成功したように見えて電源再投入後に元に戻る→タイプ4。 - 既知のパスワードを入力します。それでも読み取り専用のまま→タイプ2(ハードウェア)またはタイプ5(複合)。
- フォームファクターと仕様の改訂版を確認します——CMIS と後期改訂版の SFF-8472 モジュールは、通常タイプ5です。
CodingBox では
- パスワード設定 — テーブルアドレス、パスワードアドレス(0x7B)、値は書き込み保護されたメモリとパスワードで設定します。既知のパスワードはデータベースから適用されます。
- スクリプト — CodingBox のプログラミングスクリプトには、タイプ4とタイプ5向けのベンダー保存シーケンスと解除アルゴリズムが収められています。
- 標準速度で失敗するモジュール向けの1バイトずつの書き込みと低速クロック。
- ハードウェア WP はソフトウェアではなく、プログラマーボード側で扱います。
- 書き込みを行う前に、読み取った内容はすべてcode databaseに保存されるため、失敗しても必ず復元できます。
ベンチで見られる症状——
WRITE FAIL、元に戻ってしまう書き込み、拒否されるパスワード——とその対処法:EEPROM の読み書きエラー。
これらの種類が存在する理由——独立した EEPROM か MCU がエミュレートするマップか、保存コマンド、ファームウェアミラー、ファームウェアが実装する署名について:コントローラーとファームウェア。