« 2008年11月16日 - 2008年11月22日 | トップページ | 2008年11月30日 - 2008年12月6日 »

2008年11月23日 - 2008年11月29日の2件の記事

2008年11月28日 (金)

H8/3069FのMMCインタフェースがやっと動く

実にくだらないところが原因 (11/26/08)
 この夏からの懸案だった秋月のH8/3069LANボードのOS(MES)で、MMC(SDカード)インターフェースが動かない問題がやっとのことで解決した。OSのバージョンの問題もあったのかもしれないが、最終的な原因はここに書くのもためらわれる基本的でお粗末な原因だった。これを読んでも余り参考にならないと思うが、まあトラブルシューティングのケーススタディとしては少しは役に立つかもしれない。Pict0797

 ネット関係のマイコンでは、AVRのMega168で作ったプリンタ電源の遠隔制御が、あれから全くトラブルなく快調に稼動を続け子供たちから喜ばれている(階段の往復が一回で済む)。お父さんも鼻が高い。一方、このH8ボードは余り計画性なしに買ったマシンで、イーサネットインターフェースと2MBのRAMはついているが、Linuxを動かすには少し力不足で、イーサネットはそのうち雑誌の付録マイコン(インターフェース誌2008年7月号)にもついてきたので、H8の立場は微妙になっていた。

 H8の汎用ボードを作ったときも、SDカードスロットは作りこまず、ブレッドボード用のSDカード基板を流用して、基板にはそのソケットしかつけていない。結果としてはこれが良くなかったのだが、SDカードにこだわったのは、家庭内の小さなWebサーバーにするにしても、テキストだけでなくちょっと気の利いたテキスチャーを張った背景をつけたいとか、フラッシュメモリの書き込み制限が100回と少ないので、TFTPなどで起動のたびにプログラムを送らなくても良いように、独立の不揮発性の記憶装置が欲しかったからなどの理由である。

 しかし、こいつは最初どうしても動かず、クロックのクリスタルを20Mhzから25Mhzに換装するまで棚に放置されていた。クリスタルは表面実装でこの取り外しは、前の記事に詳しくあるように難儀を極めた。ちょうどフラックスが接着剤がわりになってクリスタルの背面シートが基板に固着しているうえ、ランドが大きく、サンハヤトの低温半田でも一部が溶け切れずランドをはがしている。ウェブで「H8」で検索すると、同じことをしてボードをおしゃかにした人の報告があったりして苦笑いである。

 そもそも換装したのは、MMCが安定稼動しているという古いカーネルを入れるためである。あれだけ苦労したのだから、意地でもMMCは動くようにしなければいけない。しかし古いカーネルに取り替えても、MMCは頑として動かない。ロジアナでシーケンスを追うと前と同じ、カードの初期化がすむのを延々と待っている。

 H8とMMCとのハード接続は、いくつかの回路例がウェブに載っているが余り大差はない。こちらのSDカード基板はchaN氏の記事そのままの回路に、3ステートバッファーの74VHC126を追加してレベルシフトしているが、ウェブではインバータや、NORの石を使って3.3Vと5Vのレベルシフトをやっている。デジタル的には全く変わりがない。しかもSDカードからはレスポンスが返っているので誤配線は考えられない。その証拠に、ブレッドボードに残したAVRのSDカードシステムでは問題なく稼動する。

 回路に問題がないとはいえ、ウェブとソフトが同じなので、ハードしか考えるところがない。プルアップ抵抗を、SDカードまわり(3.3V)からH8(5V)に移したり、AVRの回路図ではクロックがプルダウンされているのをプルアップにしてみたり、パスコンを大きくしてみたり、まあ、考えられる変更はすべてやったが、やっぱり動かない。

 途方に暮れて、こうなったら別のインタフェースをインバータで作ってみるかと、これまで色々いじったSDカード基板をすべて元に戻し、念のためAVRで動作確認してみたら、今まで動いていたSDカードアクセスが急に動かなくなった。半田付け?このあいだの半田ボール?いや、大丈夫。ロジアナを引っ張り出す。あれあれ、H8と同じように初期化でreadyが戻っていない。うーむ、これはH8のときと同じ現象だ。これは何かにおうぞ。

 おや、SDカードの電源をFETでコントロールするピンの配線がブレッドボードにない。いやこれは前からなかったような気がする。うーん、思い出せない。電源制御のFETのゲートは無接続で動くはずだ。念のため、ソースコードで確認する。うわあ、えらいことだ。電源ONはLowだ。H8のボードはここをどうしている。あーっ、何もしていない。これではSDカードの電源が入らない。しかし、入らないなら何故、レスポンスをかえすのだ。とにかくブレッドボードのジャンパーでピンをグランドに落としてAVRを動かす。問題なく元に戻った。これだ!

 電源が入っていないのに動く理由を調べているときではない。とるものもとりあえず半田ごてに電気をいれ、H8ボードのピンをグランドに落とし、SDカード基板を移す。あせる手で、コンソールに「mount  mmc1」とこれまで何百回も入れたコマンドを入力した。Ws000001

 アクセスランプが点き、エラーなしでプロンプトが返ってくる。やった。動いたようだぞ。「cd   /mmc1」を入れる。これもエラーがでない。どきどきしながら「dir」を入れると、やった、やった、差したSDカードのファイルリストが表示された。これ、これ、この夏から、夢にまで見た、H8でSDカードがつながった瞬間である。いやあ、長かった。苦労すればするほど喜びは大きいというが、電子工作での久しぶりの感激である。

 人間と言うのは因果なものである。楽しみだけでは人生は愉快に送れない。古いカーネルを入れてMMCが動かないときは、今やっていることだけでなくこれまでの人生すべてが無駄なことのようにみえて、自分の越し方行く末を暗い気分であれこれ考えていたのだが(いや、根が躁鬱なだけかも)、動いたとなると世界が一変して、まるで天下をとったような爽快な気分になる。アルコール中毒者が酒を飲むとそうなるらしいが、その意味ではこちらも少し中毒気味なのかもしれない。

大丈夫と思ったところが危ない(11/27/08)
 浮かれる気分はともかく、今後の課題として今度の騒ぎを整理してみた。まず原因は明らかで、SDカードの電源を制御するピンの勘違いで、グランド(電源OFF)、オープン又はHigh(電源ON)だとばかり思い込み、その配線をしなかったため、SDカードの電源が不安定になったことである(測ってみたら2V以上あった)。こんな基本的なミスが気がつかなかったのは、不安定ながらも、SDカードがコマンドにレスポンスを返したため、ここでのチェックを怠ってしまった。ブレッドボードでは恐らくグランドに落とすジャンパー線があったのだろう。それが、SDカード基板の接続替えのときか何かのときに偶然はずれ、AVRでも動かなくなった。

 しかし、H8でも、AVRでもこの状態(ゲートが浮いた状態)で、SDカードが初期化コマンドにレスポンスを返していることは、ロジアナで確認している。このレスポンスを見る限りでは、最新バージョンのMESのカーネルでも動いた可能性がある。 それはともかく、直接の原因はこの際、余り問題ではない。ここは本来、グランド(0)か、Vcc(1)でなければならず、無配線というハイインピーダンスの状況を追求してみても仕方がない。言えることは、これまでに何度も書いたようにデバッグの極意「デバッグは外へ、外へ」という教訓を忠実に守らなかったことである。Ws000000

 システムは膨大な要素で成り立っている。ひとつの要素が故障しているかどうかを確認するときは、普通、他の要素は正しく動いているという前提がなければ先に進めない。しかしトラブルは必ずしもその要素にあるとは限らない。プログラムのデバッグなど最たるものだ。問題だと思うルーチンのロジックをいくら念入りに調べてもだいたい解決しない。大抵は他のところに原因がある。

 これが、デバッグは外へ、外へと言う所以なのだが、今回はロジアナでカードのレスポンスを見たために、すっかりこの教訓を忘れてしまった。昔、ソフト開発の参考書を執筆したときに「絶対はありえない。変数より定数を疑え」などと偉そうなことを書いていたが、今回は正しく「SDカードは正常に動いている」という前提が間違っていた。お恥ずかしい。

 すべての前提を最初から疑い、ひとつひとつ複数の手段でその前提を確認して行ったらここまで解決が長引くことはなかったのではないかと思う。まあ、それにしても偶然ブレッドボードのジャンパー線がはずれたからAVRで動かなくなり解決の糸口が見つかった。もし、これがなかったらH8ボードは再びお蔵入りになっていたかもしれない。

 閑話休題。OSのMESのことである。小さなシステムの小さなOSだから多くは期待していなかったが、プログラムのロード以外にコマンドが何もないのに困った。欲しかったら自分で作れということなのだろうが、ネット関係はTFTPが動いたりそこそこ揃っているのに、ファイルの操作や、プロセスの管理はないに等しい(ファイルのdeleteがあるだけ)。一旦プロセスを動かすと、リセットしない限り止める事が出来ない(killがない)。

 それに開発元が、H8についてのサポートを打ち切ってしまい、このあいだソースの提供を電子メールでお願いしたけれど、今になっても全く音沙汰がない。一部のサイトには、デバイスドライバーの開発法が出ていたりして何とかコマンドの追加は出来るようだが、折角、MMCが動いたのに先行きが余り見通せなくなってきた。

 今、考えているH8での開発イメージは、シリアルコンソールをいちいち繋ぐのではなく、Telnetあたりからシステムを操作し、ウェブページの送り込みやHTTPサーバーの再起動、CGIによる別プロセスの操作などをやりたいのだが、相当量の作りこみが必要な感じである。それならもうちょっと汎用性の高い、TOPPERSプロジェクトのμITRONでも試してみようかと思う。

本来は、ネットワークとサーバーをどう、何のために使うか具体的に決めてから始めて、次にシステムを考えるべきなのだが、機械の方が先行してしまうのは、これはお遊びだから許してもらおう。まあ、世の中のプロジェクトだって余り威張れたものではないが。

| | コメント (0) | トラックバック (0)

2008年11月24日 (月)

H8/3069Fの水晶発振子換装で大騒ぎ

表面実装のクリスタル交換でボードが.....(11/22/08)
 ケースに入れた秋月のファンクションジェネレーターが稼動して、すっかり気が抜けてしまった。測定器の自作はあくまでも手段であって目的ではない。元々は、アナログ機器の調整用に、あらゆる周波数の信号が気楽に出せるようにケースに入れて周波数が見えるようにした。そこまでは良かった。しかし、いよいよこれを使ってどんなアナログ機器を作るかという段になって、急にやる気が失せてしまったのである。具体的な目標が見当たらないのだ。困った。

 最初はオペアンプを使ったヘッドフォンアンプでも作ろうと考えていた。そのために、オーディオ用の低雑音オペアンプと1WのパワーアンプICまで買ってある。計画では、昔のPCからはずしたCD-ROMドライブで卓上のCDプレーヤーにしようとでも思っていたが、考えてみると殆どのCD-ROMドライブには既にアナログ出力が出ている。これにアンプをつけてみても今さら始まらない。音質が良くなるとは思うが、これは今までに書いたように「良い音の地獄」に入りそうで余りやりたくない。

 そもそものアナログ研究のきっかけは、前のプロジェクト、リズムキャプチャーのときの音響パルス入力である。あのとき考えていた次の目標は、ネットを使った音声付きの電光掲示板で、音声発生のため、SDカードなどに入れたWAVデータをDACでアナログにすることだったのだが、CD-ROMドライブ出力からでは、DACの練習にしかならず、どうも食指が動かない。そう、AVR研究所と名乗るからには、マイコンが動かないと面白くない。

 ということで、秋月のH8/3069LANボードを棚から持ち出した。このボードは、この夏、OS(MES)のMMCインタフェースを動かそうと散々いじりまわしたが動かず、一時断念して放置してあるボードである。こいつは8ビットながらDACも持っているし、OSでMMCが動かなければchaN氏のコードをアプリケーションで動かしても良い。次の目標にもなる。

 それにこのボードは、このあいだ例のサンハヤトの実装部品取り外しセットのテストで、表面実装の20Mhzの水晶発振子を25Mhzに取り替えたまま、まだ動作確認をしていない。このクリスタルはキットの袋の中に、おまけのつもりか入っていたもので、換装しようとして基板の元のクリスタルが、2本の半田ごてを使ってもどうしてもとれず、くやしい思いをして、今度の取り外しキットでやっと換装したものである。

 この換装は、実は大変だった。半田が溶けたのは良いが、半田面が石の裏まで広がっており、その一部が良く溶けておらず水晶発振子を表面からずらすとき、無理をしてランドを大分ちぎってしまった。何とか残ったランドに新しい25Mhzの石を載せ固定したがFGキットの制作の方が忙しくてそのままになっている。Pict0795_2

 久しぶりに電気を入れてみる。クロックを25Mhzにしたので最初のカーネルロードからやりなおしである。このボードのクロックを25Mhzにしたのは実は目的がある。このあいだMMCインタフェースを動かそうと散々実験し、結局、MESの最新バージョンにMMCの不具合があるという情報で断念した。ところが別のウェブサイトで旧バージョンのMESのカーネルが公開されていることを見つけ、ダウンロードしたのは良いが、これが25Mhz版だったのである。

 旧バージョンならMMCも動くかもしれない。淡い期待を抱いて換装したボードの電源を入れる。しかし、フラッシュライターは「そんなシリアルインタフェースはないよ」とプログラムロードを拒否してしまう。H8のファーム書き込みは沢山の方法があるので別の方法と思ったとき、ちょっと不安になった。そもそもH8が動いているか確認していない。クリスタルがちゃんと接続されているかどうか確認するほうが先だ。

 不安は的中した。換装したH8のクロックが動いていないことがオシロでわかった。やれやれ。半田付け不良か。テスターでピンとクリスタルの接続をチェックする。うわあ、片側がコンデンサーとはつながっているが、肝心のピンとはつながっていないことがわかる。ランドをはがしたとき、ピンとの配線パターンを切ってしまったのだ。

 幸いH8ボードは2層基板でとりあえずクロック周りの配線は全て見える。ルーペでピンからの配線を調べると確かにクリスタルのランドの前でパターンが切れている。しかしピンからの配線パターンには余裕があり、レジストをはがして、クリスタルのランドから、そこへ細い線を半田付けすれば接続できそうである。カッターとピンセットで少しづつ配線パターンの上のレジストをはがし銅面を出した。そこへ、電子工作を始めるとき最初に買ったが細すぎて使っていない0.17ミリのUEW線をつけ半田を流してみた。おお、つながったようだ。引っ張ってみるがとれない。結構強く半田付けされている。テスターで確認する。うむ、しっかり導通している。やった。

 これで発振回路は大丈夫だ。通電する。しかし、ピンにはクロックがあらわれない。うーむ、やっぱり駄目か。原因はこれだけではないのだ。それにしても、可哀そうなことをした。何もしなければ少なくともハードは何の問題もなく動いていたのに、下手にクリスタルを換装しただけでボード全体が使い物にならなくなってしまった。LANコントローラがちゃんと動いてLEDが点滅するのが哀れである。

ピンとピンの間の半田ボール(球)(11/24/08)
 H8/3069LANボードがただのゴミになってしまった。大した値段ではない(¥3400)が悔しい。
「H8はもう古い、Linuxを動かすために新しいボードを買おう」と大分前に言っていたはずだが、やはり諦めきれない。心が残る。貧乏性というか、¥1の抵抗でも生きていれば、ニッパーで切り取らずに再利用しようと半田ごてで回収する性分である。ましてや、2MBのSRAMや、RTL8019のLANコントローラは無傷だ。H8そのものもHTTPのテストをしたくらいでまともに使っていない。

 いずれお家サーバー用に、SH3ボードか、ARM9 の玄箱くらい買うつもりはしているが、このH8ボード、まだ何かに使えるところはないだろうかと、動かないH8ボードを手にとって眺めているうち、ボードの両側に並んでいるコネクターピンのところに、半田屑が挟まっているのを見つけた。ちょっと大きめの半田が上から落ちたような形でピンとピンを完全にショートさせている。これはまずいよね、と取り除き、もしかしたらこんなことが原因で、まさかとは思いながら、まあ、ものは試しと電源を入れてみた。

 何と、これが原因かどうかわからないが、オシロで見るとH8のクロックピンにクロックが戻ったのである。周波数は25Mhzを指している。間違いない。あわててフラッシュライターをつなぐ。25Mhz用のMESのカーネルは順調に読み込まれた。PCのコンソールを立ち上げ、ボーレートを25Mhzのときの115200bpsにする。動いた! 

 MMCはどうだ。コマンドを入れようとして殆どのコマンドを忘れていることに気づく。とりあえずうろ覚えでMMCをマウントするが、やはりHardErrorでつながらない。しかし、前と違っていきなりではなく、暫く経ってからエラーになる。ハングアップもしない。少なくとも前よりは進んでいる。まあ良かった。これで解析が進められる。

 以前の資料を取り出し、手順を考えてから、暫く経ってコンソールにコマンドを入れた。おやまた動かない。MMCのところでハングアップしたか。電源を入れなおす。やっぱり動かない。調べてみるとクロックが出ていない。あれから何も触っていない。熱で水晶をドライブするコンデンサーの容量抜けを疑ったが、追加してみても同じ。テスターで導通を調べるが異常なし。何かさっき動いたのが幻であったかのような感じでまたH8は頑として動かなくなった。

 あーあ、やっぱりこわしてしまったか。それにしても何故動いたのか、突然、動き始めて、また突然動かなくなる。理由がわからないので、手の施しようがない。そもそもクロックが動かなければMCUはただの石である。コネクターピンにはMCUのI/Oポートしか出ていない。このあたりのショートでクロックが動かないということも本来有り得ないはずなのだが、調べるところがない。とうとう、これ以上の究明はあきらめることにした。

 次の日、机を片付けながらH8ボードの最後のお別れに、動かないことを確かめようと、電源を入れてみた。ありゃりゃあ、またクロックが出ている。一体これは何だ。PCコンソールと接続してみる。ちゃんとつながる。ネットワークを始動させるコマンドを入れる。大丈夫。HTTPサーバーのバイナリをTFTPで送ってみる。送れた。何だ全く問題ないじゃないか。794_2

 ところが、そうこうするうちにまた動かなくなった。うーむ、これはやっぱり換装した場所がくさい。発生熱かなにかで部品がやられたか、水晶か、コンデンサーか。それとも断線か。それなら動かすと変化がありそうだが、少々強く動かしても変化はない。テスターでクロックピンまわりをもういちどチェックする。大丈夫だ。断線はない。それとも、ショートか、いや5Vはしっかり出ている。もう一方は0Vだが、これで良いのか。そう言えば、今まで断線は疑ったが、ショートは余りチェックしていない。

 電源を切って導通を確かめる。何ということだ。クロックピンの片側がグランドとショートしているではないか。これはおかしい。やっぱり換装したクリスタルをはずしてもう一度ランドをチェックする必要がある。半田ごての電気を入れてもういちどはがす準備をする。

 「食事ですよ」との家族の声で作業を中断して、食事から戻って来て念のためテスターで問題のピンをチェックしたらグランドとショートしていない! えーっ、これはどういうことなんだ。熱だ。熱を持つところは今の回路ではCPUチップしかない。ルーペでボードをよくよく観察する。するとH8のクロックピンと次のピンの間に光るものを発見した。ピンセットでは届かず、まち針でつつくと動く。これだ!次のピンは、何だグランドではないか。小さく光るものは半田ボール(球)だ。間違いない。針でこれを取り出し、フラックスクリーナーで丁寧にふき取る。あやしい箇所がもうひとつあって、これも綺麗にする。

 いやいや貴重な経験をした。H8のピン間隔は0.5ミリ、配線パターンに半田付けしたときフラックスのために半田が飛んで、小さな小さな半田球がピンとピンの間に入り込み、熱でピン間隔がせばまりショートしたのだ。冷えれば接触がなくなり生き返る。796_2

 この球をとってH8ボードは全く問題なく何時間置いても動くようになった。いや嬉しい。死んだと思っていた行方不明の息子が帰ってきたようなものだ。もともとこのボードはMega168を立て続けに2つ壊したとき、衝動的に買ったもので、どちらかというと継子扱いされてきた。マザーボードは作ったが、使用目的が明確に決まっているわけではない。これから少し本気になって、こいつの行く末を考えてやろう。OS(MES)でMMCが動かないなら簡単に諦めずアプリケーションで作ってやることにしよう。

| | コメント (0) | トラックバック (0)

« 2008年11月16日 - 2008年11月22日 | トップページ | 2008年11月30日 - 2008年12月6日 »