« Mega168インターネット開通 | トップページ | LAN電源制御成功! »

2008年8月29日 (金)

EEPROM 93C46の怪

次々にデータが消えていく(3/21/08)
 まだ、モジュラーのLEDの橙色側(リンク成立)が点かないとか、5VではやっぱりMegaがリセットを繰り返して動かない、などの問題を抱えているが、予想に反して余りにも早くネットワークが開通してしまったので、予定が全く狂ってしまった。 AC電源を入り切りする部分、ケースなどの実装も実は具体的な設計は何もしていない。 デバッグしながら準備しようと思っていたのだが、何か気がぬけてしまって先に進めない。

 前に、ダウンロードしました。コンパイルしました。動きましたでは、面白くないと書いたが、現実はそのとおりになっている。だいたいSPIインタフェースそのものが私にとっては始めてのインタフェースなのである(ISPはSPIを使っているが)。 ソースを眺めていても良く理解できない。

 そういうこともあって、SPIの勉強を兼ねて、将来このコントローラを外部から動かすことを考えて、正規のMACアドレスをジャンクのPC用のNICカードから拝借することにした。自宅、会社で使わなくなったNICカードをISAバス時代から残してあり(別にこれが目的ではなかったが)戸棚から出してみたら4枚も出てきた。何とこのうち3枚がお馴染みのEEPROM、93C46(DIPとSOIC)とそのコンパチ(HT93LC46)を使っていた。

 ISAバスのNICカードはさすがにもう使わないだろうと、このカードから93C46をとろうとするが、これが難しい。ピンまわりの半田溜まりが結構深く小さなこてでは、簡単にはとれない。ピンの半分近くを折ってしまってやっとのことで取り出す。ピンに細い線を半田付けしてソケットにつけなおし、早速SPIを組んで、データを取り出そうとした。0713_93c46

 Megaには標準のSPIがあるが、これまたへそ曲がりが出て、わざわざTiny861でUSIインタフェースを使う。I2Cの経験がものを言ってこのときのロジックを大幅に拝借し思いのほか早くできた。I2Cに比べれば格段にプロトコルは簡単である。ただ、読み書きが2バイト単位なのが少しややこしい。

 93C46のデータシートはWebに沢山ころがっている。問題はどこにMACアドレスがどういう形で収容されているかである。幸い、このあいだ買った参考書にNE2000互換のNICチップが使うデータマップがでていたので、これが参考になりそうである。

 最初、うんともすんとも言わなかったが、USIのシフトレジスタの設定をいじっていたら、突然動き始めた。このへんがUSIインタフェースが難解だといわれるところだろう。クロックの作り方に関して非常に自由度が高いのだ。システムクロックでも、タイマでも、外部からでも、何でも駆動できる。今のプログラムは、Atmelのアプリケーションノートを参考にしているが、これなどUSICRという制御レジスタをアクセスするだけでクロックラインが上下する。

 うんちくはさておき、データが出たので間違えて消してしまったときのためすぐ記録する。このNICカードはISA時代なのでP&Pの会社情報などは入っていなかった。OUIというコードをWebで探したら、台湾製のノーブランドのカードのMACアドレスは韓国籍の会社が取得していた。

 謎が始まったのはこのあとである。機嫌よく何度か、EEPROMの中身をダンプさせていたら、おかしなことにデータが段々消えていくのである。えー、読むだけでデータが消えてしまう?そんな馬鹿な。コードを調べたら、1Kビットを1Kバイトと勘違いして、ありえないアドレスまで読みに行っていることがわかり制限内にもどすが、後の祭り。データはすべてAll 1(0xFF)で埋め尽くされた。

 この段階で、開発が終わったのは読むだけの処理であった。急いで書き込みの処理を加えて動かしてみる。うむ、ちゃんと書ける。最初の読み返しでは正しく書いたデータが表示される。ところが何回かすべてのデータを読み出す読み出しをやると、データが崩れてくるのである。今までの常識が音を立てて壊れる。こんなことってデジタルの世界であるのか。

ミステリーは解決。深刻な勘違い(3/22/08)
 暗い気持ちで朝を迎えた。躁鬱(そううつ)の性格なものだから、ものごとがうまくいかないと周りがみな自分に敵意を持っているような気がして、暗い海をひとりボートであてもなくさまよう気分になる。寝ながらあれこれ考えて朝食もそこそこに地下のPCのおいてあるオーディオルームにこもる。

 昨夜までわかっていることは、64バイトまでのアクセスがすべて順調で、それ以降のアクセスで異常になることが確認できている。64というのが臭い。1Kビットだからちょうど半分、64を越えるとバイナリでは1つ、位が上がる。うーむ、何かありそうだ。念のため、ロジックアナライザーで65バイト目を読み出しているアドレスを調べてみた。なにい、コマンドがREADの10でなく、ERASEの11になっているぞ。しかしアドレスは正しく65だ。

 あれ、アドレスフィールドが6ビットしかない。しまった。このアドレスは2バイトのワードアドレスだった。64以上のアドレスは0にもどり、ビットが繰り上がって、READコマンドはERASEコマンドに変わってしまう。write enableをかけないと消去はできないはずだが、現象はERASEコマンドを出したと想定するとピッタリ合致する。そう言えば、きのう65バイト目を書き込んで0バイト目が消去されていた。

 データシートを穴があくほど読み直したが、このアドレスがワードアドレスであるとは何処にも書いていない。まあ、6ビットしかアドレスフィールドがなくて128バイトを読み書きしようというのだから、バイトアドレスでないのは自明なので、どこにも表記がないのだろう。それにしても深刻な勘違いだ。

 二つ手に入れた93C46のMACアドレスはすべて消されてしまった。いや、待てよ。これまで読んでいないデータはERASEの範囲からはずれている、残っているはずだ。これまでのデータは記録してある。早速プログラムをワードアドレスに修正して読み出してみた。あった。今まで読んでこなかったデータが出てきた。

 今度は、MACアドレスの解読である。どうも2つのカードともNE2000互換ではなく、参考書どおりのデータ配列でない。リトルエンディアンかどうかもわからない。しかたがないので、OUIのデータベースを繰り返しサーチし、シリアルナンバーがそれらしい(00が続かないなど)組み合わせで2つ取り出した。これまで韓国と日本の企業だったが、今度のは2つともアメリカ産になった。まあ、これはいんちき臭いので、外に出すときはMACアドレス書き込み済みのEEPROMを買おう。

 ということで、93C46の怪は解決した。SPIインタフェースの勉強にはなったが、やはりすべて自分の勘違いによるものだった。暴走ではないかと疑った93C46のみなさま、御免なさい。アドレスというとバイト単位という思い込みが今度もトラブルを呼んだ。自戒、自戒である。

電源部を考えている(3/27/08)
 LANによる電源コントローラは最終目標を、離れたところにあるレーザープリンターの電源を、HTMLで入り切りすることにしていた。 CGIでも書いて何か入力させると言うのならまだ先があるが、特に考えられる応用がない。単に電源を開閉するだけなら、今のコードで十分間に合う。SPIインタフェースを勉強したけれど、ソフトに手を加える余地はもうないのだ。

 こうなるとあとは電源部である。こういうこともあろうかと秋月で15A以上を入り切りできるSSRを買ってあった(¥250)。当初は、今さらリレーでもあるまいと思っていたのだが、説明書を読むとSSRはかなり大きなヒートシンクをつけないと、10A以上は無理だと言うことがわかった。今考えているケースには入りそうもない。レーザープリンタは定格が1.3KW、13Aも喰うのだ。急遽、リレーを探した。15Aを開閉できるリレーが千石で売っていることがわかる(¥350)。小さいし(25ミリ×13ミリ)、消費電力もわずか0.5W。なんだやっぱりリレーの方が合理的だ。

 問題は、コントローラの電源である。イーサネットは結構電流を食う(実測で130mA程度)ので電池というわけにはいかない。ところが裸のスイッチング電源に適当なのがない。売っているのは、30W以上の大きなものばかりで、このコントローラの予定消費電力3W程度のものは、ACコンセントと合体したアダプタタイプのものしかない。秋葉であちこち店を覗いたが、どれも最低でも10Wクラスからだ。アダプタで動かせば良いのだが、外に出るケーブルが増えるのは嬉しくない。

 考え付いたのが、ケースにコンセントをつけて、アダプタを中に入れてしまう方法だ。これなら、アダプタを固定する手間も省ける。買ってあったタカチ(SS-125 80×32×125)のケースを見ると、おあつらえ向きに間仕切りのスリットが中に入っていてここに適当な板をはさみ、ここにACプラグをつければACアダプタが固定される。間仕切りで高圧のAC部との隔離もできる。 我ながらうまいアイデアだと思うが、他の人はどうしているんだろう。

 LANコントローラの心臓部の基板に、半田付けの不備が見つかった。このあいだからモジュラジャックの橙色のLEDが点いたり消えたり不審な動きをしていたのだが、ウレタン線の半田付けの不良だった。こいつ、しっかりついているように見えるので用心しないといけない。これで2回目である。

 Mega168が5Vで動かないトラブルもあっけなく解決した。よく考えてみたらクロックをNICコントローラから貰っているが3.3Vなのだ。これでは不安定になるのは当たり前だ。一番最初の電子工作のとき買ってあった74HC126(シリアルISP書き込みアダプタの時に使ったラインバッファ)でクロックなどいくつかの信号線をレベル変更したら、全く問題なく動作した。

これで後顧の憂いはなくなった。あとは電源部の実装と、メイン基板の制作である。

|

« Mega168インターネット開通 | トップページ | LAN電源制御成功! »

電子工作」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: EEPROM 93C46の怪:

« Mega168インターネット開通 | トップページ | LAN電源制御成功! »