« がた老AVR研、音響研究へ | トップページ | 禁断のアナログの世界に入る »

2008年9月11日 (木)

気分転換にH8/3069Fに挑戦

H8/MES(8/11/08)
 体の鍛錬のためテニスを続けている。昨日は猛暑をものともせずテニスをやってきた。この日は、これまで全く勝てなかった常勝のペアに珍しく勝つことが出来、すこぶる気分が良い。思い切り体を動かすことと、地下室で拡大鏡をつけて細かい半田付けする作業を並行してやると、何かとても体の中に充実感を覚える。これからもどちらも気を抜かず頑張ろう。

 電子工作の方は、このところデジタルオーディオに思わずのめり込みそうになり、少し冷静になろうと別のことを始めることにした。 これは大げさな話ではない。オーディオの世界の「良い音」というのは麻薬に近い強い依存性があり、求め始めると電子工作の比ではない。良い音を聞いて、一旦、鳥肌が立つような感覚を経験すると、良い音を探し求めて止まらなくなる。

 私の数少ない経験でも、スピーカーを換えたり、カートリッジを替えて、同じソース(レコード)から全く違う音楽が出てきて、しびれたことが何度もある。人から借りた高価なプリアンプを朝の目覚ましのFM放送に使って余りの音の違いに寝ぼけ眼で飛び起きたこともある。

 DACの研究をしているうち、この魔力にとりこまれそうになった。ウェブサイトの制作記などを読んでいると、ハイエンドの装置が素人でも作れそうな雰囲気である。ハードの技術が進歩して音質がチップ次第になったからだ。それこそ秋月で¥800のDACチップがSACDのレベルを満たしている。

 120万円もする舶来高級ブランドのDVD-Rプレーヤーの基板が、3万円の日本の普及版プレーヤーと全く同じだったなどという記事を見ると制作欲望がふつふつと湧いてくるが、危ない、危ない。実用的といえば、これほど実用的な応用はないのだが、この道は際限がない。深入りは少し見合わせることにする。

 ということで、大分前に買った秋月のH8/3069 LANボードを気分転換に久しぶりに取り出した。どうも2~3年前にブームになったらしく、検索でヒットするサイトはみな少し古く、このあいだ入れたMESというマルチタスクのOSは制作者がサポートを打ち切ってしまい、色々なことを簡単に試すことが出来なくなった。

 当面の目標を、SDカードインタフェースをつけて少しまともなHTTPサーバーを動かすことに置いた。折角2MのSRAMがついているのでSDカードを利用して自立的なサーバー、あわよくばLinuxを入れて運用してみようと思っている。

 このH8のROMの書き込みを保証している回数はAVRと違って100回しかなく、余り気楽な開発をしていると制限を越えてしまう。 このMESはMMC(SDカード)をサポートしているので、SDカードにデータだけでなく実行ファイルも収容し、2MあるSRAMでアプリケーションを動かし、ROMは余りいじらないで済むようにしたい。

 というので、正式なボードに作りこむ前に、SDカードの動作をプローブコードなどで仮配線してつないで確認してみた。しかし、アクセスLEDが点滅するものの「Disk I/O Error」という冷たいメッセージではね返されてしまう。こういうときはウェブが頼りである。「H8 MMC SDC MES」などのキーワードで調べる。あったあった。沢山の人がこれに挑戦している。そのなかで、「H8はCSが反転しているので」という文言を見つけた。

 これだ、動かない原因は。MMCやSDカードのCS(チップセレクト)は負論理だ。モジュール化されたカーネルの部分は公開されているので、慌ててソースコードを調べるが、OSのソースコードはI/Oが極度に抽象化されており確認するところまで追い込めなかった。しかし、動かない原因はこれに違いない。とにかくまともなマザーボードのための工作を始めた。

 それと同時に論理を反転させる回路を考える。一箇所だけにインバーターICを使うのも芸がない。必然的にトランジスタということになるが、MMCのスピードはUARTなどより一桁速いので気楽にトランジスタでつなぐと遅延でおかしくなる。相手はCSなのでそれほどシビアではないかもしれないが、測っておきたい。

 ブレッドボードで適当に回路を組み、ソースはI2CでやりとりしているRTCのついたブレッドボードのAVRマシンにロジアナを入れて測ってみた。いやいや大変な進歩である。こういうことが手軽に測定できるようになるなんて昨年の秋まで思いもしていなかった。自分の世界がこの年になって広がったことを実感する。素直に嬉しい。

 これまでストックのあった2SC945(2SC1815の前身)でベース抵抗10KΩ、コレクタにつけるプルアップ抵抗10KΩで、立ち上がりこそナノセカンドのオーダーだが、立下りは、3μs近くもあることがわかった。こうした用途のためこのあいだ買ったパワーのある2SC1213はもっと遅い。うーむ、3マイクロなんて遅すぎる。その証拠に100KhzのI2Cのデータはいたるところで取りこぼしてちゃんとした反転データになっていない。メガオーダーのMMC(SPIインタフェース)ではチップセレクトと言えども心配だ。

 ここで10年以上も前に買ったデジタル回路の参考書を思い出した。そうだスイッチングの高速化の方法の解説があったはずだ。早速取り出して見てみる。なになにスピードアップコンデンサーを入れろと書いてある。なるほどコンデンサーの微分効果で逆パルスをベースにかけてコレクタの電子を早く吐き出すのだそうだ。

 言われるまま、100pFのコンデンサーをベース抵抗に並行に入れて測ってみる。おお、立下りが飛躍的に改善され、0.4μsまでになった。I2C(100Khz)のデータが完全に反転している。調子に乗って200pFにしたらI2Cの通信に干渉し測定不能になる。まあ、想定している入力はH8のI/O出力ポートだからこれは問題ない。

 デッドストックだったトランジスタが役に立ち、10年も前に買った参考書が役に立ち、一万円の廉価なロジアナが見事に機能して目的の回路が完成する。何かこれまでになく気分が高揚してこの日はなかなか寝付けなかった。

やっぱりMMCインタフェースが動かない(8/14/08)714h8

 インバータ実験の成功に気を良くし、SDカードソケットのついたH8/3069Fの正式なマザーボードの実装を急ぐ。2日間で出来上がった。勇んで、電源を入れたが期待に反して全く動かない。CSが反転していることは他のサイトでも確認し、これで良いはずなのだが、MMCのマウントが成功しない。バラックのときと違ってSDカードの種類によって「DiskError」だったり、ハングアップしたままだったり少し事態は進展しているように見えるが、動かないことに変わりはない。

 SDカードからの出力が3.3VでH8のポートのドライブ限界に近いということで、5Vからのプルアップ抵抗を入れてみたが、やはり動かない。ロジックアナライザーを再び投入する。これがいかにももっともらしいシーケンスが記録されている。初期化が進んであるところで同一のやりとりを永遠に続けている。これがハングアップの状況である。

 また、ウェブ情報を探索する。SDカードのメーカーによって動かないという報告や、最新バージョンのカーネルではMMCが動かないというレポートを発見し、肩の力が抜ける。モジュールでMMCドライバーを組み込むと動くと言うことなので、いちからカーネルを作り直し、モジュール版のカーネルを作り直したが、やっぱり駄目だった。古いバージョンなら大丈夫だと言うが、本家のサイトでサポート打ち切りを宣言されているので、ネットに古いカーネルがころがっている可能性も薄く、今のところ完全に手詰まり状態である。

 MESのソース提供をこのあいだメールで申請したが、やはり個人開発のOSの限界を見るようで、少し熱が冷めてきた。LinuxがどうもH8でも快調に動きそうなので、そちらに関心が移りそうだ。しかし、LinuxでSDカードがアクセスできるかどうかはまだわからない。

MMCディバイス実装は一時中止へ(8/15/08)

 結局、MESでSDカード(MMC)を動かすことは諦めることにする。ウェブに出ているハードの工夫(プルアップ、大容量パスコン)はみなやってみたが、状態が変わらない。ソースも調べたが、chaN氏のFatFSのMMCドライバーと全く構造が違い見当がつかない。FatFSにはH8用のドライバーソースがあるので移植しようと思えば出来ないことはないがこれは相当ハードルが高い。よほどの決意と集中力がないとこれは手がつけられない。

 H8クラスでLinuxを動かすのも最初は乗り気だったが、調べてみると、このあたりがLinuxが動く最下限の性能でそれ以上の進展が望めなさそうである。それにH8自体が相当古いチップで、このルネサス製のCPUチップは新しいSHシリーズが主流になっている。¥8000も出せば、LANもMMCインタフェースもつき、SRAMが32MBもあるSHのCPUボードが手に入ることがわかった。これならLinuxも楽々動く。 単にLinuxを動かしました(uClinuxだが)、というだけでは余り面白くない。どうせならLinuxの豊富なソフトを利用して省電力のお家サーバーを作ってみたい。

 ということで、H8まわりの開発は少し中断することにした。LANならこのあいだのフリースケールの付録基板MCF52233があるし、フラッシュもH8の半分の256Kある。こいつのHTTPサーバーの動作は確認してある。ただ無料の開発環境が128KまでなのでGCC環境が整備されるまでLAN関係は少しお休みすることにする。

 と、書いてみたものの、折角マザーボードまで作り、今のところ2メガもメモリのある機械はこれしかない。幸い、ディバイスドライバーのソースは手元にある。仕事の原稿も凡そ書き上げたので少しづつ調べていくことにした。ディバイスの初期化のプロセスは詳しくウェブに載っているので、どこでおかしくなっているかはロジックアナライザーの記録でわかるはずだ。カーネルのディバイスドライバーの形で動いているが、これはコンパイルオプションでアプリケーションとしても動くはずだ。今のままではモジュールと言えどもROMの中に入るので、書き込み制限のため試行錯誤が出来ない。

 アプリケーションで動かす手順がわからないため、モジュールになっているカーネルドライバーを解析してみた。やっと、MMCを初期化しているところを見つける。ロジックアナライザーの波形をひとつひとつ調べ、コマンド0のinitialize、コマンド8のcheck、までは正しくMMCがレスポンスを返していることがわかった。

 問題はこのあとの、コマンド1のenableである。何回やっても、X'01'のビジーフラッグが上がり、先に進めないということがわかる。乱暴だが、この無限ループを有限回に替えてさきに行くようにした。ところが動きに変わりがない。どうも関係ないループの方を有限にしたらしい。

 デバッグステートメントを入れてみたいが、いろいろ試した関数はみなコンパイルエラーではじかれる。カーネルのドライバーとアプリとの差がわからないので、手探りである。やれやれ、やはり難しい。まあ、わからないまま、色々やっているうち薄紙をはがずように見えてくるものだ。もう少し様子を見てみよう。

|

« がた老AVR研、音響研究へ | トップページ | 禁断のアナログの世界に入る »

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

コメント

コメントを書く



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


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



トラックバック


この記事へのトラックバック一覧です: 気分転換にH8/3069Fに挑戦:

« がた老AVR研、音響研究へ | トップページ | 禁断のアナログの世界に入る »