SASIバス用SD/MMCアダプタ

 SASIバス用CompactFlashアダプタがそもそもダメだったんじゃないか、と6年半越しで気づいたわけですが、これであきらめるのはもったいない。実はその数週間前、出張のついでに寄った秋葉原・秋月電子通商にて、スルーホール基板とSDカードスロットを買ってありました。実は帰ってから「カードの電源電圧って3.3Vじゃん!」と気づいて一気にモチベーションが下がっていたんですが、残る手段がこれしかないとすればやるしかありません。

 カードはもちろんSPIモードでアクセスするわけですが、その端子について、当初はGPIOをえっちらおっちら上げ下げしてクロックとか作ろうと思っていたんですけど、データシートを確認したらシリアルポートに同期モードが存在するというのを確認。ほとんどSPIだったのでこれでいこうかと思ったのですが、なんとビットの順番がひっくり返っているじゃないですか。
 普通ならソフトでひっくり返すんですが、CFをアクセスしようとしていたメモリバスがそのまま汎用ポートとして浮いていますので、このうち2ポートを使い、ビット順が逆になるように接続することで解決。

 電源は、以前買って予備に残していた3.3Vのレギュレータをボードに実装します。ここで気づいたのが、「カードって電源だけじゃなくて信号ラインも3.3Vじゃないか…」って当たり前なんですが、H8は5Vマイコンなので、果たしてどうするか…。文献によるとHC125とかHC245なんかを3.3V駆動させて動かしてますね。でも手元のジャンク箱を探してもHCMOSなんてほとんど見あたりません。だからと言って日本橋に買い出しに出かける余裕はないし、たかだかICをひとつ買うだけで往復820円は痛すぎます。
 どこかにないか探したところ、今まで捨てるつもりで分解もせず残していたSOARのロジックアナライザの中身が、ほとんどHCMOSであることを発見。HC245もあるじゃないですか。ここから部品をもらっちゃいましょう。


2008年4月29日・配線と初期動作チェック

 朝から作業スタート。まずはHC245の取り外し。両面基板でグランドとかも広くないのに、ちょっと苦労しました。なんとか無事にHC245をゲット。

 SDカードスロットとHC245、レギュレータの位置を決めて電源配線。コネクタの電源端子の位置を忘れてしまってるので、資料を参照しながら。一瞬、端子配列がおかしいと思いこんで、まさかCFでのトラブルはこれが原因だったのかもと調べた結果、コネクタの端子番号の順序の違いによるものだと判明…。昔もこれで悩んだ気がするな…。

 配線もろもろは夕方までに一応終了。カードを差し込む前に、電圧チェック…4.7Vくらいありますが?!レギュレータ周辺の回路は間違ってないし、なんでかな…。いろいろ調べた結果、どうも電流負荷が軽すぎるんじゃないか、ということで無理矢理抵抗で電流を喰わせることに。ある程度の抵抗で電圧が落ちることがわかったので、思い切って100Ωをつないでみたら3.4Vくらいになりました。これでなんとかなるか。
 いろいろ触っていたら、CF時代に用意していたアクセスランプが点きっぱなしになったりとか。論理が合っているかわからなくなっていたので使わないでおこうと思っていたんですが、一部ロジックで使用しているHCMOS ICの入力が解放されちゃうなどよろしくない状態があったので、その始末ついでに論理を確認の上でカードのCS信号をアクセスランプの端子に接続しておきました。

 ビット反転ポートをアクセスしてみるプログラムを走らせて、ちゃんと反転していることを確認。続いてシリアルポートの初期化とかいろいろファームを改造して、カードをアクセスできるようにしました。カードの初期化を試してみたんですが、どうもエラーフラグが帰ってきてるような…?

 疲れた、もう寝ようと思いつつ文献を見てみると、なんとほぼ全く同じ構成でMMCをアクセスする記事を発見。初期化とか送受信ルーチンとか全部書いてありますよ!明日この線でトライしてみよう…。


4月30日・チェックの続きとFATファイルシステム

 文献のとおりにファームを書き直して…いると…あ、自分の受信ルーチンでは受信データを読み出す代わりにシリアルポートのステータスを読み出していた…。
 SDカードを入れてトライしてみると、CMD0に対して正しく応答されることを確認。でもCMD1の応答がおかしい、いつまでもレディにならない…。まさかなぁと思ってMMCを入れると、初期化に成功するじゃん!なんでなんで?よくわかんないけど時間がないので先に進もう!

 チェックのため小さなテキストファイルをMMCに入れてH8から読み出させ、正しく表示できることを確認。次いでSASIバスにつないでフォーマットから…おお、ちゃんと動いてるじゃん…あれ、途中で止まった?ベリファイで止まってますね。
 アクセスランプも消えてるので、デッドロックみたいなもんかな。とにかくどこで止まったか確認するためにデバッグメッセージを仕込んで、再挑戦。…止まらない…。結局最後までできてしまいました。うーん、読み出しが連続するとコケてるのか。配線が適当すぎるのかな?

 というわけでちょっとノイズ対策をするために、ジャンク箱からフラットケーブルの切れっ端を取り出して、信号とGNDが交互になるように並べて別線で配線してみました。結果は…問題ない、のかな?時間ももったいないんでフォーマットとかはせず、さっき作ったディスクイメージをアクセスさせたり起動させたりして、アクセスが止まるようなことがないのを確認しました。ちなみにこのイメージファイルをEmuZ-2500に持って行ったところ、正しく起動しました。ふむ、これなら目的は達成ですな。
 ただSDカードの初期化に成功しないのは相変わらず。ACMD41を使用してもダメなんで、なんとも見当がつきません。MMCなら大丈夫なんで、オリフェスはこれで乗り切りましょう。


できあがったモノ

 2階の下半分を作り替えたというような見た目ですね。秋月の両面スルーホール基板を使用したのですが、若干サイズが余ってしまいました。でも修正する余裕はなかったのでそのまま実装。ACアダプタのジャックが以前とは別の位置から生えてますが、これは作業中に断線したのでつけ直したため。
 あとAKI-H8も新しいのに入れ替わってますがこれは単なる気分です。そもそもCFバージョンとSD/MMCバージョンの二本立てを考えていたので、新しいAKI-H8はROMの取り替えみたいなノリで使おうかと準備していたので、SD/MMCにするならこちらも替えてしまおうかと思った次第。
 追加した線のうち、CS信号は裏面で直に、クロックとデータは表面でフラットケーブルにて配線しました。上の方から、右側を伝って下の方まで伸びているのがそれ。右下のコネクタは、CF時代には単なる支柱でしかなかったのですけど、この改造でSPIの配線に役立っていただきました。
 SD/MMCスロット基板。秋月のスロットなのでバネとかありません。SASIバスでリムーバブルメディアが扱われる想定もないので、こちらもカード挿入スイッチとか使用してません。
 基板の上の方、いろいろ配線がありますけど、主にビット列反転用です。CF時代に16bitデータバスとして使用していた端子を、GPIOに設定した上でD0⇔D15、D1⇔D14…とつないであります。
 SD/MMC基板の裏面。数も少ないのでやっつけモードです。

 回路図はこちら。

 ベース部の、「(AKI-H8)」と注釈しているコネクタはAKI-H8/3048のコネクタそのものです。H8/3052バージョンでも動くんじゃないかと思います。あとネット名がわりと適当で統一性がなかったり、もしかしたら一つのネットに複数の名前があるものもあるかもしれませんが、わかれば良いということで微妙に手抜きしてます(さすがにバスの引き出しでは対応するようにしてあるはず)。他にもにいろいろ回路はありますが、CFアクセス用がほとんどでして、作ったので書きましたが結果としてはあまり意味がないかも。TrueIDEではなくPCカードとして、しかもSRAMメモリカードモードでアクセスすればうまくいくかもしれませんけど、それら一切合切をまとめて無保証でよろしく。

 同じく無保証ですけど、AKI-H8/3048用ファームはしばらくお待ちを。


5月4日・オリフェス

 当日の様子はこちらとかこちらをどうぞ。他にもいくつかブログなんかで取り上げていただいているようです。特に何かプログラムを動かすわけでもなく、起動後の状態を静展示同然の状態で披露。説明すればわかってもらえるのですけど、同時出展のアイマスデモの方が目立ってましたわな。それでも中にはピピッと来る人もいたようです。


SDカードアクセスを解決する

 とりあえずCF時代のリベンジは果たしたものの、思うところができてSDカードでエラーになるのをどうしても解決したくなりました。カードのステータスをチェックしたところ、CMD1のレスポンスにイリーギャルコマンドのビットが立っているのがわかったので、これをなんとかするというのが目標になります。といっても、MMCでは問題なく動いていること、SPI制御ルーチン以外は1chip MSXで使用しているものとほとんど同じ、ACMD41でも同じレスポンスが返るという現象で、果たしてどこから手を着ければいいものやら…。

 一部の回路図などでカードの電源部分にパスコンが入れてあったりしたので、私も試しに入れてみましたが変わらず。別線で配線したSPI信号ラインを疑ってみたものの、オシロで観てみるとそれはもう理想的なほどに綺麗な波形。クロックが乱れて余計なエッジができてやしないかと思ったのですけど、そうでもないようです。もちろんタイミングマージンも余裕すぎるほどあります。供給電圧が変だとインアクティブになると文献にあったのでテスターで計測してみると、3.33V。パスコン入れたので微妙に下がった?

 その他も含めて、SDカードアクセスのバスライン初期化に際してうまくいかない原因を調べてみたところ、ざっとこれだけのものがありました。

…正解は最後のやつでした。文献なんかを読んでもあまりこんなこと書いてないみたいな気がするのですが、これで一発で動作しました。それどころか、昔1chip MSX版MZ-700でロジックを変更して以降初期化できなくなった8MBのSDカードもあっさり初期化できるようになりました。おお、これは1chip MSXにも反映せねばなりませんな。
 今まで動いていたのは…偶然か。


もうちょっと続く予定

 「思うところができた」とは言え先もいろいろありますので、一旦ここで公開しておきます。ファームの改良もしたいですしね。


戻る