|
この時期、毎年寒くなるとこまめに風邪をひいたりして体調を崩します。ようやく戻ってきたのでハナシの続きを。って、どこまで話したっけ?状態。
あ、そうそうMSXの汎用ポートにSDカードをつないで、SPIモードでアクセスしようとしているところです。
で、ハードウエアはさて置き、電気的に接続できたとしてソフトウエアを書きかけたのでした。
しかし、いくつかの分からないところが出てきて調査に戻ったのであります。
分からないところの第一点は、「初期化」の部分です。
大雑把には
に書いたとおりでいいかと思いますが、細かいところで、SDカードは<CMD0>→<CMD1>でいいのか? <CMD0>→<ACMD41>としないと受け付けられないのか? という疑問があります。
<ACMD41>というのは、SDC専用の初期化開始コマンドで、アプリケーション特化コマンドの<CMD55>をアタマに付けて、<CMD55>→<ACMD41>として使います。
elm-chan さんの「MMC/SDCの使いかた」
にフローがありました。
・・・場合分けが多いですね。アセンブラ止めてC言語にしようかな?(・∀・;)
でも、既にMMCは身近には売ってないし「2GBまで」と宣言しちゃったから、<CMD55>→<ACMD41>しか選択肢はない・・・という判断でいいのだろうか?
この「SASI HDD用I/F」の MSX用はぼくも持っていまして、肝心の32MB HDDがクラッシュしたのがしばらくMSXを離れていた直接の原因でもあります。
さて、このサイトで興味深い記述をみつけました。
(ここから引用)
「その他も含めて、SDカードアクセスのバスライン初期化に際してうまくいかない原因を調べてみたところ、ざっとこれだけのものがありました。
…正解は最後のやつでした。文献なんかを読んでもあまりこんなこと書いてないみたいな気がするのですが、これで一発で動作しました。それどころか、昔1chip MSX版MZ-700でロジックを変更して以降初期化できなくなった8MBのSDカードもあっさり初期化できるようになりました。おお、これは1chip MSXにも反映せねばなりませんな。
今まで動いていたのは…偶然か。」(引用ここまで) ・・・いろいろと面白いですねえ。「1chip MSXにて、SDカードでもCMD1を受け付けることがわかっている」とか「1chip MSX版MZ-700」とか。
で、<CMD1>でいいなら、これで行きます。ほいで、「各コマンド終了直後、CS='H'状態で8クロックのダミークロックが必要」、これ行きます。
ただし、ぼくが参照しいているテキスト「フラッシュ・メモリ・カードの徹底研究」(2006年CQ出版)には、「ダミー・クロック送信時の/CSは”H”でも”L”でもかまいません」とあります(95頁)。「どっちでもいい」というのが困るんですよね。/CS='H'で行きます。フロー先頭の「74クロック以上のダミーコード」の部分で「/CS='H'」とあるのと整合的です。先頭ではDIも'H'なのねん。「苦悶式SDカード 4」の「/CS=Lで統一」は撤回。 フローを参照しておきながらアレですが、なるべく一本道で行きたいのです。フローチャートでいうと「MMC Ver.3」に至る道ですね。一歩前進したのか後退したのか分かりませんが、とにかく少し疑問の部分が整理できました。ダメだったら、またそのとき考えます。
フローに記載はありませんが、SDカードからのレスポンスを待っている部分にタイムアウトも必要だと思います。「苦悶式SDカード 4」では「100ms」と書いていますが「数100ms」かかることもあるらしい。大容量SDだと1秒かかることも。でも、「対象は2GBまで」と宣言したので「数100ms」のタイムアウトで考えます。(本日これまで。)
|
過去の投稿日別表示
-
詳細
2014年12月30日
全1ページ
[1]
コメント(2)
全1ページ
[1]




