2016.12.6
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
SDカードインターフェースの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
そして作戦その3は、SDカードインターフェースです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第26回]


●CMD55

CMD55はACMD(アプリケーションコマンド)の前に置いて、次に来るのはACMDであるということをSDカードに知らせるためのコマンドです。
たとえばACMD41で考えた場合、CMD55がないと、SDカードは次に来るコマンドが、CMD41なのかACMD41なのかを知ることができません。

CMD55のフォーマットは次の通りです。

77 00 00 00 00 FF

10進数の55は16進数では37です。
ビット表示では110111です。
その前にスタートビット01を置くので、01110111(77)になります。
引数はありませんから00にします。
チェックサムは計算されませんからFFにしておきます。

レスポンスは01であれば正常です。
まだ初期化の途中ですからビット0が1になります。

●ACMD41

ACMD41はホストがサポートしているバージョンと供給電圧範囲をSDカードに知らせるためのコマンドです。
その引数の内容をSDカードが正しく受け取ることで、初期化が完了して、これ以後データのREAD、WRITEなどの操作が可能になります。
上で書きましたようにACMD41の直前にCMD55を送る必要があります。
また初めて実行するACMD41よりも前にCMD8の実行が必要です。
ACMD41のフォーマットは次の通りです。

69 40 FF 80 00 FF

10進数の41は16進数では29です。
ビット表示では101001です。
その前にスタートビット01を置くので01101001(69)になります。
引数の4バイトのレイアウトは前回引用したOCRレジスタと同じです。
ただし最上位ビット(ビット31)は常に0にします。
またビット30はSDHCカードであることを示すため1にします。
それ以下の電圧範囲を示すビットは通常は1にします。
以上をビットで示すと次のようになります。
01000000 11111111 10000000 00000000
チェックサムは計算されませんからFFにしておきます。

SPIモードでのACMD41のレスポンスはCMD0、CMD8等と同じR1です。
CMD55とACMD41を繰り返し実行して、レスポンス00が返ってきたら初期化完了です。

実行例は[第23回]でお見せしました。
その初期化部分を下に再掲します(前回お見せしたログと同じです)。

loading SDCDIF5N.BIN ...026d(621)bytes loaded,from 8100 to 836C
>jp 8100
CMD0
FF01
CMD8
FF01000001AA
CMD58
FF0100FF8000
CMD55
FF01
ACMD41
FF01
CMD55
FF01
ACMD41
FF00
CMD58
FF00C0FF8000


SDカードインターフェースの製作[第26回]
2016.12.6upload

前へ
次へ
ホームページトップへ戻る