2008年4月17日木曜日

Flash ROM Writer Rev.1.1

※ISA バスの動作速度やアクセスタイミングについて間違っていたので修正...orz

先日プリンターポートを壊したと報告したが、その原因はこれである。

そう、Flash ROM Writer の制御プログラムを作っていてその検証中にプリンターポートを壊してしまったのだ。

Pentium III を使っていた頃に作ったもので、もう6,7年前になるだろう。
当時の BIOS ROM は丁度 DIP から PLCC に切り替わる途中であった為、ベースは DIP にしておき PLCC はアダプターで対応しようと考えていたのだが、結局は DIP しか使わずアダプターを作っていなかった。

特に回路図は載せないが、写真でも判るように多くのラッチとバッファ、ゲートが少しと電源制御のリレーのみの単純な回路だ。構成としては、74HC574 のラッチを使い制御レジスタ 8bit と ROM のデータ 8bit、アドレス 23bit(1bit は制御で利用)を持ち 74HC245 で ROM のデータ読み込みを制御している。つまり、プリンターポートを 8bit の双方向バスとして使うような作りとなっている。

今回、何故これが必要になったかと言うと...

最近仕入れたノート PC の BIOS を書き換えて実験していたら、突然電源が入らなくなってしまった。「あ、BIOS 飛ばした!」と割と冷静に考えていた。そう、前に作った Flash ROM 切替機で簡単に復旧できると思っていたのだ。

しかし、そうは簡単ではなかったのだ!?

その BIOS を飛ばしてしまったノート PC では、シャドー RAM に BIOS ROM を読み込んでアクセスするようにはなっておらず常に Flash ROM をアクセスする物であった為だ。状況としては、正常に動く BIOS で起動して書き込みの寸前で Flash ROM を切り替えると、そのタイミングで電源が落ちてしまう。

このままでは電源が落ちてしまって Flash ROM を書き込むことが出来ない。
そこで、Flash ROM Writer を引っ張り出してきたのである。

作成時は MS-DOS 上で動くプログラムで制御していたが、その制御ソフトが入っている CD-R が読めなくなっていたので、今回は Windows 上で動くように VisualBasic で作ってみた。
VisualBasic からは直接ポートを制御できないので、フリーソフトで適当なアクセス用 DLL を使っているが、どの DLL でもそんなに差はないようである。

DLL 経由でポートをアクセスしてて更に Windows であることを考えるとアクセスのタイミングはそんなに意識しなくても良いだろうと単純に作っていたのだが、なかなか安定しない。

やはりタイミング的に厳しい部分があるのかとオシロスコープで探ってみると、制御用のラッチがリセットされてしまう場合があるようだ。タイミング的にはポートを出力から入力に切り替えてデータを読み込む時に消えてしまう。

そのタイミングを擬似的に連続して実行してみると...入力に切り替えてからバッファ出力をイネーブルにする時に制御レジスタのラッチに使っていた -STROBE に 0.5V 前後のノイズが載っている!

前回のプリンターポートを壊したレポートはこの辺り!?(笑)

マザーボード(ASUSTeK P4GE-V)のプリンターポートとインピーダンスが合わなかったのかデータ線の反射が -STROBE に出てしまったようだ。まあ、原因はインピーダンスであろうと思いデータ線に集合抵抗でプルダウンすると、綺麗な信号になり安定するようになったが、まだ読み込みでデータ化けがあるようだ。

更にアクセスタイミングを調べてみると...ありました。2つも!

1つは、ROM へ供給するデータとアドレスを持つラッチの動作で、ここは制御レジスタからの 2bit で 74HC138 のデコードからラッチを作っているが、データのホールド時間が足りなくなる。もう1つは、書き込み時のライトパルス幅が少なくて正常に書き込みできない。
適当なウェイトループやダミーステップを入れたら、完全に安定して動くようになった。

プリンターポートは IBM PC/AT の頃から仕様が変わらないため ISA バスのアクセス速度である 33.3MHz が限界なのだが、VisualBasic で組んだアプリケーションで DLL 経由でアクセスしているにもかかわらず 33.3MHz の限界に近い速度で動いているようだ。
プリンターポートは IBM PS/2 の頃から基本的な仕様は変わらないが、Super I/O やサウスブリッジの中に組み込まれたので動作速度は使用する LSI で決まってくる。当然、CPU やチップセットが早くなれば、それなりにアクセスタイミングを考慮しなければならないようだ。
※33MHz は PCI バスでした。PC/AT の ISA バスは 8MHz です。
※入力が可能になったのは PC/AT の頃ではなく PS/2 になってからでした。

しかし、PC の速度は昔に比べてかなり速くなったものだ...

2008年4月16日水曜日

ASUSTeK P4GE-V

ゴテ屋の机の周りはいつもゴチャゴチャしている。テスターにオシロスコープ、電源、PC 一式、取り外した部品や電線のゴミ、資料の山と灰皿...当然ゴテもある。
そんな中、ある装置を PC のプリンターポートに接続しながらプログラムのデバッグしていたのだが、突然プリンターポートが反応しなくなった...

あぁ、何かに接触してポートを壊してしまったらしい!

サブ用の PC なのでプリンターが使えなくても問題は無いが、プログラミング環境を別の PC に移すのが面倒である。

と言う事で?この PC のマザーボードを修理することにした。

マザーボードは ASUSTeK P4GE-V で、もうかなり古い Socket 478 の物であるが、Pentium4 1.6GHz を 2GHz にオーバークロックしているのでビジネスアプリやちょっとしたプログラミングならばストレス無く使えていたのだ。

早速とマザーボードを取り出してプリンターポートを調べてみると、案の定 Super I/O である ITE IT8708F-A から直接プリンターポートに接続されている...QFP 100pin !取り外すのが面倒である。

QFP のようなピン数の多い物を取り外すには、普通なら低温半田を使うと綺麗に取り外せるが、使い捨てであるにもかかわらず価格が高いのが難点だ。しかも、正常に動く Super I/O を単品で購入する訳でもなく、ジャンクのマザーボードから移植するので2倍の量を使うことになってしまう。
そこで、いつもの手法で作業することにした。

(1)壊れた Super I/O は足の根元から切断
(2)パッケージ部分だけ取り出した後に残った足をゴテで取る
(3)正常な Super I/O の足の裏側に細いメッキ線を通して、線を引きながらゴテで足を浮かせる
(4)3方の足が浮いたら残りの1方を半田を大量に載せて、あとは全体をスライドさせながら取り外す
(5)正常な Super I/O の半田を除去し、足の曲がりを修正

と、簡単に書いているがかなりコツが必要な作業方法である。

ここまで準備が出来たら、後は取り付けるだけだ。

いつものように一気に半田を載せて、半田吸い取り線で綺麗に仕上げて完了である。

慣れれば30分もかからない作業だが、半田ブリッジの確認は十分にしておきたい。せっかく修理したのに電源系でショートして他の部分を壊してしまわないようにしたいものである。

2008年4月4日金曜日

NEC MK+ Series

今回は NEC LaVie LL550/5 で使われている MK+ Series キーボードである。

この機種のキーボードは高確率でキーボード不良となるようで、ジャンクが沢山出回っている。以前に「キーボード交換では直らない」という記事を書いたが、この機種では一概にそうとは言えないので詳しく調べてみることにする。

一般的にノート PC のキーボードは分解できない構造のものが多いが、この機種では比較的容易に分解することが出来る構造になっている。分解手順は次のようになる。

(1)キートップを取り外す(パンタグラフの向きに注意)
(2)カーソルキー近くのプラスチック部品を取り外す(裏からネジ止め)
(3)パンタグラフを取り外す(2つのパーツになっていて、片方をスライドさせると外れる)
(4)シリコン系のシートを取り外す(キーの接点を押すためのシート1枚)
(5)配線パターンと接点を持つシートを取り外す(ここが回路になっている)

説明すると簡単なようだが、キーの数が多いので時間がかかる...

(5)まで作業するとこのよう状態になる。

このキーボードは何かの液体をこぼしたようで、その痕がハッキリと確認できる。しかし、配線パターンのシートは密閉構造なのでこれがキーボード不良の原因ではない。

では、何が原因かと調べてみると...なんと、原因は配線パターンの構造にあった!

写真の右下にあるのが配線パターンや接点を持っているシート1枚だが、実は上中下の3枚シートで構成されている。
中間のシートは上下のシートの絶縁のみで、配線パターンは上下のシートにあり、左端の所で折り返されていて、広げると1枚のシートになる。上下それぞれのシートには接点を持っていて、キーを押すとその接点が接触してスイッチを構成している。
配線を横切る場合もあるので、その場合は絶縁体を配線の上に塗布してからその上に更に配線している。

さて不良の場所だが、この絶縁体(写真の右下のシートの緑色の部分)が不完全なところがあり、配線の下と上で少し抵抗値を持ったような状態でショートしているのである。

今回見たキーボードでは、十字に重なるような部分では問題は無いが、下の配線と同じ向きに長い距離の上の配線がある部分で半ショートしていた。

半ショートした原因は、予想では周囲の湿度の影響で絶縁体が劣化したのだろうと思われるが、そもそも長い配線を絶縁体の上で配線するような構造が悪いのだろう。

このキーボードが付いていた NEC LaVie LL550/5 だが、キーボード不良以外にマザーボード側にも不具合があってキーボードが動かなくなっていた。やはりキーボードの交換だけでは完全には直らないようだ。