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

マイコン独立大作戦
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

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