作成者 Takaharu Konno
ロジック回路なし、LPC(Winbond W49V002A)、FWH(SST49LF002A)用あんちょこフラッシュROMライター
1.1 回路図
これがフラッシュROMライタの回路図です。単純です。基本は、ICソケット、コネクタと抵抗の構成だけです。
これで、2種類のフラッシュROMの読み書きができます。
※1
SST49LF002A では、クロック入力への信号が引き込まれやすく、入力の駆動能力を高めた抵抗値にしています。
テストで、手持ちのトランジスタ1個を使ってかませてみましたが、クロックの立ち上がりが遅れるのでパスしました。
データが正常に読み取れているかどうかは、FWH_CHK、FWH_READ を使って確認します。
※2
D0-D3 は、双方向でデータのやりとりをします。
データ読み込み時において、PRN 側は、信号をプルアップにした状態にし、ROM 側は、Low または High の信号を送ります。
この時、PC機器によっては、1K/2.2K では、信号 Low が正常に読み取れなくなる場合があります。
その場合は、テストプログラム CHKVOLT とテスター等を用いて電圧を調べ、抵抗値を調整します。
自分の複数のPCでは、1K/2.2K か、または、470/1K のどちらかで動作することを確認しています。
※3
Intel82802 フラッシュROMを扱う場合は、1番、27番ピンにVCCの電圧、26番ピンにGNDを割り当てる必要があります。
一般のFWH/LPCフラッシュROMは、1番、27番、26番ピンは、NCピンにあたりますので、両方とも扱える形で使用しています。
※4
GPIピンには、プルアップで+3.3vをあてていますが、GNDに割り当ててもOKです。
ちなみに、標準ロジックを使ってクロックやデータにあててみたので、参考にしてください。
インバータを使った場合は、プログラムオプション "/I:1" を使ってください。
1.2 試作機と見た目を良くした1号機
試作機の写真
見た目を良くした1号機
試作機は、ICソケット(DIP)と電池ボックスに抵抗値と配線を付けた感じです。
前に作ったPLCCとDIPのROM切り替え機があったので、それと併用しました。
電池は、CR2032系のボタン電池。電圧は3.3Vが基準ですが、使い古しでも3.0Vあれば、問題ないと思います。
パソコンへの接続は、プリンタポートを使います。
動作確認したものは、Winbond W49V002A(LPC)、SST49LF002A(FWH) です。
他のメーカーは、試していませんが、基本部分は押さえたと思いますので、ソフトウェアの設定値と抵抗値の設定で無難にいけると思います。
1.3 抵抗器を切り替えられるようにICソケットSIPを使った2号機。
部品面からのパターンと部品配置図。
2.1 動作環境
ソフトウェア konflash は、MS−DOSの環境で使います。
MS−DOS起動のフロッピーディスクを作り、そこにダウンロードしたソフトウェアを解凍して保存します。
フロッピーディスクでパソコンを起動し、フラッシュROMツールを使ってください。
Win9xでは、WindowsからのMS−DOS起動でも動作します。
Win9xのDOS互換ボックス(フルスクリーン)でも、読み書き速度は遅くなりますが動作します。
2.2 内容
ソフトウェアは、ベースプログラム konflash.exe とLPCとFWHのバッチファイルになります。
各バッチファイルは、次のようになります。
xxx_ID.BAT -> 製造元ID、デバイスID
xxx_DUMP.BAT -> ROMデータの表示。アドレスは、FFFC0000 〜 FFFFFFFF で示す。
xxx_CHK.BAT -> 指定アドレスをカウント分、読み出して表示。ボード動作チェック用。
xxx_READ.BAT -> ROMデータを読み出してファイルに保存。
xxxERASE.BAT -> ROMデータの消去。
xxxWRITE.BAT -> ファイルデータをROMに書き込む。
xxx_COMP.BAT -> ファイルデータとROMデータを比較チェック。
4MのフラッシュROM用に、F4M_READ.BAT、F4M_COMP.BAT のバッチファイルを用意しました。
Intel82802 の消去/書き込みには、N82ERASE.BAT、N82WRITE.BAT のバッチファイルを使います。
パフォーマンスは、P4−1.4GHzパソコンで、読み込み時間30秒、書き込み時間3分半ぐらいです。
ボードチェックプログラムに TEST.EXE を用意しました。これは、ボードを製作した後に、正常に配線されているかどうか確認するために使います。
3.1 ボード単体での導通チェック。
まず、ボード単体でのテスターでの導通チェックをします。各部品と部品の端子をチェックします。
パワースイッチをON時に、+3.3VとGNDが導通していないことを確認。
3.2 電池チェック。
電池を取り付け、パワースイッチON時に、ICソケットのVDD(32、25ピン)、INIT(24ピン)、
TBL(8ピン)、WP(7ピン)がHighになっていることをチェック。
3.3 プリンターポート接続。パワースイッチはOFF。 プリンターポートと接続します。そして、TEST.EXE を実行して各信号のHigh/Low(ON/OFF)をチェックします。
3.4 CHKVOLT.BAT での電圧チェック。
これは、PRN 側を読み込みのプルアップ状態にしたり、データ 0xFF を設定した状態にしたりして電圧測定に使います。
D0-D3 の抵抗器設定の目安は2種類あります。
(1) 抵抗値 1K/2.2K で、データ読み込み状態では、PRN側 1.8V 前後、ROM側 1.2V 前後 です。
電圧値がこの値から離れていた場合は、470Ω/1K などに抵抗値を変更して調整します。
(2) 抵抗値 100Ω/2.2K を使う。この場合は、まず、データ 0xFF を設定した状態で電圧を測ります。
PRN側、ROM側 が 3.3V 前後であることを確認します。4.0V 付近では、この抵抗設定値は使えませんが、3.5V 以下なら問題ないと思います。
3.5 ROMセット。
パワースイッチOFFで、フラッシュROMをセット。
パワースイッチONで、フラッシュROMの表面や電池の表面に熱を持たなければOK。熱があれば止める(ROM自身が既に壊れている可能性あり)。
プログラム xxx_ID.BAT を実行し、製造元ID、デバイスIDが表示されればOK。エラーの場合は、もう一度配線、電圧チェックする。
3.6 動作テスト。
メモリのダンプをする。xxx_DUMP FFFC0000 100
このときに、ダンプされたデータの中で、00 の値を持つアドレス(addr)を調べる。
00 のアドレスのみを指定回数、読み取りテストする。xxx_CHK FFFC00xx 10000
00 の値が画面上にダンプされ続けるので、それを確認。データが化けたら、電池の電圧チェック(3V以上)やクロックへの抵抗値の設定値を変更をする。
データ読み取りテストをする。xxx_READ fileA 、xxx_READ fileB のデータ読み出しを複数行い、FC 等で同じデータであることをチェックする。
3.7 あとは、実際のフラッシュROMの読み出し、書き込みテスト。
ROMのデータをファイルに保存する。 xxx_READ filename
ROMのデータ消去。 xxxERASE ALL
ROMの書き込み。 xxxWRITE bios_filename ALL
書き込んだデータの比較。 xxx_COMP bios_filename
4.1 マザーボードのフラッシュROM不良
このフラッシュROMライタを作るきっかけは、Leadtek社の WinFast K7NCR18GM のボードのフラッシュROMにビットエラーが起きて、
まったく起動しなくなったことからはじまります。
だんだんに、パソコンの起動時、リセットや再起動時に起動したり、しなかったりを繰り返して最後に全く起動しなくなります。
この現象は、BIOSのアップデートでROMを書き込むたびに症状はいったん薄れますが、時間とともにまた発現します。
フラッシュROMにビットエラーが起こっていることが解ったので、販売店やサポート代理店にROMを送るようにいったのですが、
壊れたら送くれという販売店や、NoAckのサポート代理店でしたので、話がかみ合いませんでした。
暗黙的に「マザーボードを買え」と言っているようで、癪に障り、腹が立ちます。
しかたないので、フラッシュROMメーカーのホームページからデータシートをダウンロードし、眺めているうちに、
最近のフラッシュROM(LPC、FWH)は、扱う信号数(ピン数)が少なくてよいとのことなので、
プリンターポートの信号数で扱うことができそうだったので、実際作ってみたしだいです。
4.2 ROMの調査
ROMのデータを読める段階になって調査した結果、書き込まれた特定のビットが消えていました。fc /b 59370726.bin err_rom.bin
*****************************************************
ファイル 59370726.bin と err_rom.bin を比較しています
000262BB: 9F DF
00037E50: 03 11
00037E51: 80 3F
00037E52: 80 03
00037E53: 4B 01
00037E54: 04 00
00037E55: 00 04
00037E56: 00 30
00039FFE: C2 F8
00039FFF: 78 AE
0003E250: 03 11
0003E251: 80 3F
0003E252: 80 03
0003E253: 4B 04
0003E254: 04 30
*****************************************************
この異なるデータで 37E50 以降は、BIOSの設定で正常に書き換えられたもののようで、問題なのは、262BB のデータです。
データ 9F が DF になっていました。これは、ビットD6が消された状態です。
フラッシュROMのデータは、消去時 FF で、全てのビットを書き込むと 00 で保存されます。
書き込んだデータが正常に保存できないと、ビットエラーになってしまいます。
ちなみに、書き換え数の上限を超えると逆に、書き込んだデータを消去できなくなるそうです。
解決方法としては、書き込むのデータが初めからビット1の状態であればよいので、各BIOSバージョンを調べた結果、 Memory Pre-Fetch バージョン以降の物であったので、現在、そのバージョンで使って安定動作しています。
000262BB ビットD6(High)
------------------------------------------------------
59370401.BIN 69 OK
59370422.BIN 26 NG
59370726.BIN 9F NG
59370812.BIN 3B NG
59370903.BIN 7A OK
59370930.BIN CA OK
59371222.BIN 5E OK
59370129.BIN CF OK
パソコンショップに行った時に、LPC系のフラッシュROMを売っていないかどうか聞いてみたのですが、
フラッシュROMは、ないとのこと。サポート等で使うはずなのですけれど、ここでも、暗黙的に「マザーボードを買え」と
言っているようです。
とは言え、この現象は、販売店やサポート代理店ではどうすることもできないようで、根本的にマザーボードメーカーと
BIOSメーカーのフラッシュROMの扱い方に問題があるようです。
今回の、あんちょこフラシュROMライター程度の回路なら、簡単にマザーボードに組み込めれるし、
既存のプリンターポートとの切り替えるようにして使えば、他のパソコンからBIOSの復旧ができるようになります。
BIOSも、ビット反転バージョンを用意すれば、解決手段の一つになると思います。
フラッシュROM用のICソケットの部品コストを省くこともできると思います。
かなり前にも、PC9801 と 8255 を使ってフラッシュROMライタを作ったことがありました。
この時は、Pentium90 から K6-III に置きかえるにあたり、BIOS未対応のFXマザーボードに、
強引にHXのBIOSをあてたときに、初期のBIOSは成功したのだけれど、
次のバージョンで見事に失敗しました。
そのときに使っていなかった古いパソコンを引き出し、フラッシュROMライタを作って復活しました。
今回は、その時以来のハードウェア製作です。
今回、製作にあたり、フラッシュROMのインターフェースが簡略化されていたのと、
最近の速いパソコンでは、パラレルポートから意外にも高速クロックが出せることに驚きました。
今後、レガシーフリーという昔のシリアル、パラレルがないパソコンが増えると思いますが、
今回のようにあんちょこに何か作れなくなるのが寂しい気がします。
あんちょこフラッシュROM焼き機は、製作としては、簡単の部類に入りますが、回路図が読めて、半田付けができる必要があります。
まわりに、作れる人は、大概いると思いますが、
私の手作りで良いのでしたら、あんちょこフラッシュROM焼き機の手作り販売します。
回路図を片手に秋葉原の電子部品ショップをめぐるのも良いと思います。
tkon@ap.wakwak.com
http://park2.wakwak.com/~tkon/
Copyright(C) 2003,2004 Takaharu Konno