マイコン独立大作戦
SDカードインターフェースの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
そして作戦その3は、SDカードインターフェースです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第24回]
●CMD8(2)
前回の終わりに「CMD8は必須ではありません」「CMD8はSDカード(Ver.1)ではエラーになります」と書きましたがいずれも誤りでした。
時間がない中でしっかり検証しないでいい加減なことを書いてしまいました。
本日(12月4日)になりましてから「やっぱり裏を取っておかないといけないだろうなぁ」と思って、試してみたところ、意外な結果に遭遇して、前回の終わりに書いたことが誤りであることがわかってしまいました。
下図は「Physical Layer Simplified Specification」からの引用です。
[出典]SD Card Association:Physical Layer Simplified Specification Version 2.00
図を見て「CMD8はパスできるじゃないの」と思ってしまいました。
何日か前にテストして、そのときはCMD8をスルーしても普通にアクセスできたので、てっきりそういうことだと思い込んでしまいました。
本日あらためてしっかりテストしてみましたら、CMD8がなくてもいける場合と、駄目な場合が出てきました。
CMD8を含めて前回と同じ手続きで初期化をしたあとで、CMD8を抜いたプログラムを実行すると正しく実行されます。
しかし一旦ND80Z3.5とWindows7との接続を終了したあと、再度ZB3システムを起動してからCMD8を抜いたプログラムを実行すると、正常にアクセスできませんでした。
下は先にCMD8を含めたプログラム(sdcdif5s.bin)を実行したあとでCMD8を外したプログラム(sdcdif5t.bin)を実行させたときのログです。
logfile nd80zlog\12040752.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld sdcdif5s.bin,8100 loading SDCDIF5S.BIN ...0276(630)bytes loaded,from 8100 to 8375 >jp 8100 CMD0 FF01 CMD8 FF01000001AA CMD55 FF01 ACMD41 FF01 CMD55 FF01 ACMD41 FF00 RTEST FF00FFFFFE [00000000] 8800 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8810 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8820 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8830 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8840 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8850 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8860 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8870 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8880 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8890 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8900 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8910 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8920 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8930 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8940 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8950 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8960 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8970 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8980 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8990 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 82 ................ 89C0 03 00 0B 19 D1 C8 00 20-00 00 00 30 ED 00 00 00 ....ムネ. ...0.... 89D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............Uェ >/ld sdcdif5t.bin,8100 loading SDCDIF5T.BIN ...0279(633)bytes loaded,from 8100 to 8378 >jp 8100 CMD0 FF01 CMD55 FF01 ACMD41 FF01 CMD55 FF01 ACMD41 FF00 RTEST FF00FFFFFE [00000000] 8800 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8810 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8820 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8830 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8840 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8850 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8860 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8870 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8880 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8890 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8900 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8910 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8920 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8930 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8940 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8950 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8960 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8970 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8980 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8990 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 82 ................ 89C0 03 00 0B 19 D1 C8 00 20-00 00 00 30 ED 00 00 00 ....ムネ. ...0.... 89D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............Uェ >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Sun Dec 04 07:53:40 2016 |
このようにするとCMD8がなくても正しく実行されます。
なおどちらのプログラムでも、CMD58とCMD9は外してあります。
この2つのコマンドは初期化には必須ではありません。
下はその直後に一旦ZB3を終了してから再度ZB3を起動したあとでSDCDIF5T.BINを実行したときのログです。
llogfile nd80zlog\12040753.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld sdcdif5t.bin,8100 loading SDCDIF5T.BIN ...0279(633)bytes loaded,from 8100 to 8378 >jp 8100 CMD0 FF01 CMD55 FF01 ACMD41 FF01 CMD55 FF01 ACMD41 FF01 CMD55 FF01 ACMD41 FF01 CMD55 FF01 ACMD41 FF01 CMD55 FF01 ACMD41 FF01 CMD55 FF01 ACMD41 FF01 |
CMD55とACMD41を繰り返し実行しているのですがレスポンスR1のビット0が1のまま(idle state)で0になりません。
あらためて先ほどの引用図を良く見てみましたら。
[出典]SD Card Association:Physical Layer Simplified Specification Version 2.00
CMD8の左上に「It is mandatory(必須)…Version 2.00…」と書いてありました。
さらにその少し下のところには。
[出典]SD Card Association:Physical Layer Simplified Specification Version 2.00
カードがbusyである理由として、1.CMD8がACMD41よりも前に送られなかった、と書いてあります。
なるほど(説明は注意深く読みましょう)。
ちなみにCMD58は破線で囲ってあって「Not Mandatory」と書いてあります。
こちらは必須ではないということですな。
おお。
ここにも書いてありました(赤線は筆者)。
[出典]SD Card Association:Physical Layer Simplified Specification Version 2.00
うむむ。
そういうことなのですね。
ここまではよーくわかりました。
ところがところが。
それならばCMD8はSDカード(Ver.1)ではエラーになるかといいますと。
これがまた違うのですねえ。
こんなことが書いてありますけれど(赤線は筆者)。
[出典]SD Card Association:Physical Layer Simplified Specification Version 2.00
こちらには、もっとはっきり書いてありますです(赤線は筆者)。
[出典]SD Card Association:Physical Layer Simplified Specification Version 2.00
CMD8はVersion2.00で新しく定義されたコマンドである、と書いてあります。
それじゃあということで試してみたのでありますが。
logfile nd80zlog\12040805.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld sdcdif2q.bin,8100 loading SDCDIF2Q.BIN ...00f7(247)bytes loaded,from 8100 to 81F6 >jp 8100 FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01 FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01 FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01 FF01FF01FF01FF01FF01FF01FF01FF01FF01FF01FF00FF00FFFFFFFE 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000020160329620000000000000000000004 0400062CECCCFF00000001D73B00000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000055AA AF35 >/ld sdcdif5n.bin,8100 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 FF0080FF8000 CMD9 FF00FFFE002F00325B5A83BD6DB7FFBF1680009DAEB2FFFFFF RTEST FF00FFFFFE [00000000] 8800 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8810 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8820 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8830 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8840 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8850 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8860 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8870 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8880 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8890 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8900 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8910 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8920 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8930 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8940 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8950 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8960 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8970 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8980 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8990 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89B0 20 16 03 29 62 00 00 00-00 00 00 00 00 00 00 04 ..)b........... 89C0 04 00 06 2C EC CC FF 00-00 00 01 D7 3B 00 00 00 ...,.フ.....ラ;... 89D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............Uェ >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Sun Dec 04 08:08:58 2016 |
2GBのSDカードに差し換えてのテストです。
最初に普通のSDカード用のプログラム(SDCDIF2Q.BIN)を実行したあとで、SDHCカード用のプログラム(SDCDIF5N.BIN)を実行しました。
当然のことながらCMD8でこける、と思ったのでありますが。
するりと通ってしまいました。
それじゃあこのSDカードはVer.2なのかと言いますと、やっぱりVer.1なのですよねえ(いずれ説明しますがCMD9のレスポンスを確認することで、そうであることがわかります)。
次に、一旦ZB3を終了して、あらためてZB3にエントリしてから、今度はSDCDIF5T.BINを実行してみました。
logfile nd80zlog\12040809.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld sdcdif5t.bin,8100 loading SDCDIF5T.BIN ...0279(633)bytes loaded,from 8100 to 8378 >jp 8100 CMD0 FF01 CMD55 FF01 ACMD41 FF01 CMD55 FF01 ACMD41 FF00 RTEST FF00FFFFFE [00000000] 8800 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8810 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8820 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8830 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8840 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8850 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8860 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8870 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8880 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8890 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8900 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8910 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8920 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8930 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8940 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8950 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8960 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8970 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8980 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8990 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89B0 20 16 03 29 62 00 00 00-00 00 00 00 00 00 00 04 ..)b........... 89C0 04 00 06 2C EC CC FF 00-00 00 01 D7 3B 00 00 00 ...,.フ.....ラ;... 89D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 89F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............Uェ >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Sun Dec 04 08:10:45 2016 |
SDHCカードではidle stateのままだったのですが、こちらはすんなり実行できてしまいました。
これは推測なのですが。
Ver.2が発表される前に作られたSDカードは、もちろんCMD8が追加される前に作られたわけですから、当然CMD8は認識されずにエラーになります。
しかし、メーカーも生き残るために必死なのでありましょう(おそらく)。
Versionが違うから知らないよ、とは言っておれなくて、どこかの時点から以後に製造されたSDカードは、Ver.1でありながら、それでもCMD8に対応するように機能強化した、ということではないでしょうか。
あ。
もちろんこれは、今回テストしたTranscendの2GBSDカードに限っての推測ですけれど(他のSDカードについては知りません)。
●CMD8はCRC7が必要
前回書きもらしましたので、ここで書いておきます。
SPIモードでアクセスしても、CMD0とCMD8はCRC7はしっかりチェックされます。
いい加減な値を送るとCRCエラーになってしまいます。
CMD0とCMD8のレスポンスはR1(下記参照)ですが、そのビット3が1になります。
[出典]SD Card Association:Physical Layer Simplified Specification Version 2.00
SDカードインターフェースの製作[第24回]
2016.12.4upload
前へ
次へ
ホームページトップへ戻る