SDカード


ChaNさんの MMCの使いかたを理解するために、 SDカードをSPIモードで操作してみました。
使用したSDカードKINGMAXの2GBです。
ハイパーターミナルでコマンドを送ると、 そのコマンドの動きを表示するようにしました。(115200 8-N-1)

SPIコマンド
コマンド
インデックス
引数応答データ転送省略形説明
CMD0無し(0)R1無しGO_IDLE_STATEソフトウェアリセット
CMD1無し(0)R1無しSEND_OP_COND初期化開始
ACMD4140 00 00 00R1無しAPP_SEND_OP_COND初期化開始(SDC専用)
CMD800 00 01 aaR7無しSEND_IF_COND動作電圧確認(SDC V2専用)
CMD9無し(0)R1有りSEND_CSDCSDの読み出し
CMD10無し(0)R1有りSEND_CIDCIDの読み出し
CMD12無し(0)R1b無しSTOP_TRANSMISSIONリード動作の停止
CMD16ブロック長[31:0]R1無しSET_BLOCKLENR/Wブロック長の変更
CMD17アドレス[31:0]R1有りREAD_SINGLE_BLOCKシングルブロックの読み出し
CMD18アドレス[31:0]R1有りREAD_MULTIPLE_BLOCKマルチブロックの読み出し/td>
ACMD23ブロック数[22:0]R1無しSET_WR_BLOCK_ERASE_COUNT次のマルチブロックの書き込みコマンドでの
プレ消去ブロック数を設定(SDC専用)
CMD24アドレス[31:0]R1有りWRITE_BLOCKシングルブロックの書き込み
CMD25アドレス[31:0]R1有りWRITE_MULTIPLE_BLOCKマルチブロックの書き込み
CMD55無し(0)R1無しAPP_CMDアプリケーションの特化コマンド
CMD58無し(0)R3無しREAD_OCROCRの読み出し


sd_card_protocol.gif


sd_card_command.gif


sd_card_response.gif


sd_card_data.gif


ハイパーターミナルの画面
sclk80
SCLK80
DI,CSをHighにしてSCLKを74クロック以上出すと
コマンドを受け付ける準備ができます。

cmd0
CMD0
ソフトウェアリセット
まだSPIモードでないのでCRCは有効な値にする。
CMD0を実行後はSPIモードなのでCRCはチェックされません。
R1レスポンスは01になればOKです。
DI 40 00 00 00 00 95
DO                   ff 01 ff ff ff ff ff ff

cmd8
CMD8
動作電圧確認 (SDC V2専用)
CMD8はCRCは有効な値にする。
R7レスポンスは00(or 01) 00 00 01 aaになればOKです。
DI 48 00 00 01 aa 87
DO                   ff 01 00 00 01 aa ff ff

acmd41
ACMD41
アプリケーションの特化コマンド
R1レスポンスは00になるまで繰り返します。
DI 77 00 00 00 00 01
DO                   ff 01 ff ff ff ff ff ff

初期化開始 (SDC専用)
R1レスポンスは00になるまで繰り返します。
DI 69 40 00 00 00 01
DO                   ff 01 ff ff ff ff ff ff

acmd41
ACMD41
アプリケーションの特化コマンド
R1レスポンスは00になるまで繰り返します。
DI 77 00 00 00 00 01
DO                   ff 01 ff ff ff ff ff ff

初期化開始 (SDC専用)
R1レスポンスは00になるまで繰り返します。
DI 69 40 00 00 00 01
DO                   ff 00 ff ff ff ff ff ff

cmd1
CMD1
初期化開始
R1レスポンスは00になるまで繰り返します。
DI 41 00 00 00 00 01
DO                   ff 00 ff ff ff ff ff ff

cmd9
CMD9
CSDの読み出し
R1レスポンスは00になればOKです。
DI 49 00 00 00 00 01
DO                   ff 00 ff fe

CSD  00 2f 00 32 5b 5a 83 92 6d b7 ff bf 16 80 00 f5  ./.2[Z..m.......

cmd10
CMD10
CIDの読み出し
R1レスポンスは00になればOKです。
DI 4a 00 00 00 00 01
DO                   ff 00 ff fe

CID  13 4b 47 53 44 30 32 47 00 c3 01 21 7c 00 cc 87  .KGSD02G...!|...

cmd16
CMD16
R/Wブロック長の変更(512バイト)
R1レスポンスは00になればOKです。
DI 50 00 00 02 00 01
DO                   ff 00 ff ff ff ff ff ff

cmd17 0
CMD17 0
シングルブロックの読み出し
R1レスポンスは00になればOKです。
DI 51 00 00 00 00 01
DO                   ff 00 ff ff ff fe

addr   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
0000  eb 3c 90 4d 53 44 4f 53 35 2e 30 00 02 40 06 00   .<.MSDOS5.0..@..
0010  02 00 02 00 00 f8 e5 00 3f 00 ff 00 00 00 00 00   ........?.......
0020  00 28 39 00 80 00 29 c3 1f 35 0c 4e 4f 20 4e 41   .(9...)..5.NO NA
0030  4d 45 20 20 20 20 46 41 54 31 36 20 20 20 33 c9   ME    FAT16   3.
0040  8e d1 bc f0 7b 8e d9 b8 00 20 8e c0 fc bd 00 7c   ....{.... .....|
0050  38 4e 24 7d 24 8b c1 99 e8 3c 01 72 1c 83 eb 3a   8N$}$....<.r...:
0060  66 a1 1c 7c 26 66 3b 07 26 8a 57 fc 75 06 80 ca   f..|&f;.&.W.u...
0070  02 88 56 02 80 c3 10 73 eb 33 c9 8a 46 10 98 f7   ..V....s.3..F...
0080  66 16 03 46 1c 13 56 1e 03 46 0e 13 d1 8b 76 11   f..F..V..F....v.
0090  60 89 46 fc 89 56 fe b8 20 00 f7 e6 8b 5e 0b 03   `.F..V.. ....^..
00a0  c3 48 f7 f3 01 46 fc 11 4e fe 61 bf 00 00 e8 e6   .H...F..N.a.....
00b0  00 72 39 26 38 2d 74 17 60 b1 0b be a1 7d f3 a6   .r9&8-t.`....}..
00c0  61 74 32 4e 74 09 83 c7 20 3b fb 72 e6 eb dc a0   at2Nt... ;.r....
00d0  fb 7d b4 7d 8b f0 ac 98 40 74 0c 48 74 13 b4 0e   .}.}....@t.Ht...
00e0  bb 07 00 cd 10 eb ef a0 fd 7d eb e6 a0 fc 7d eb   .........}....}.
00f0  e1 cd 16 cd 19 26 8b 55 1a 52 b0 01 bb 00 00 e8   .....&.U.R......
0100  3b 00 72 e8 5b 8a 56 24 be 0b 7c 8b fc c7 46 f0   ;.r.[.V$..|...F.
0110  3d 7d c7 46 f4 29 7d 8c d9 89 4e f2 89 4e f6 c6   =}.F.)}...N..N..
0120  06 96 7d cb ea 03 00 00 20 0f b6 c8 66 8b 46 f8   ..}..... ...f.F.
0130  66 03 46 1c 66 8b d0 66 c1 ea 10 eb 5e 0f b6 c8   f.F.f..f....^...
0140  4a 4a 8a 46 0d 32 e4 f7 e2 03 46 fc 13 56 fe eb   JJ.F.2....F..V..
0150  4a 52 50 06 53 6a 01 6a 10 91 8b 46 18 96 92 33   JRP.Sj.j...F...3
0160  d2 f7 f6 91 f7 f6 42 87 ca f7 76 1a 8a f2 8a e8   ......B...v.....
0170  c0 cc 02 0a cc b8 01 02 80 7e 02 0e 75 04 b4 42   .........~..u..B
0180  8b f4 8a 56 24 cd 13 61 61 72 0b 40 75 01 42 03   ...V$..aar.@u.B.
0190  5e 0b 49 75 06 f8 c3 41 bb 00 00 60 66 6a 00 eb   ^.Iu...A...`fj..
01a0  b0 42 4f 4f 54 4d 47 52 20 20 20 20 0d 0a 52 65   .BOOTMGR    ..Re
01b0  6d 6f 76 65 20 64 69 73 6b 73 20 6f 72 20 6f 74   move disks or ot
01c0  68 65 72 20 6d 65 64 69 61 2e ff 0d 0a 44 69 73   her media....Dis
01d0  6b 20 65 72 72 6f 72 ff 0d 0a 50 72 65 73 73 20   k error...Press
01e0  61 6e 79 20 6b 65 79 20 74 6f 20 72 65 73 74 61   any key to resta
01f0  72 74 0d 0a 00 00 00 00 00 00 00 ac cb d8 55 aa   rt............U.

CRC  b5 bd

cmd18 0
CMD18 0
マルチブロックの読み出し
R1レスポンスは00になればOKです。
CSはLowのままで終わる。
DI 52 00 00 00 00 01
DO                   ff 00 ff ff ff fe

addr   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
0000  eb 3c 90 4d 53 44 4f 53 35 2e 30 00 02 40 06 00   .<.MSDOS5.0..@..
0010  02 00 02 00 00 f8 e5 00 3f 00 ff 00 00 00 00 00   ........?.......
0020  00 28 39 00 80 00 29 c3 1f 35 0c 4e 4f 20 4e 41   .(9...)..5.NO NA
0030  4d 45 20 20 20 20 46 41 54 31 36 20 20 20 33 c9   ME    FAT16   3.
0040  8e d1 bc f0 7b 8e d9 b8 00 20 8e c0 fc bd 00 7c   ....{.... .....|
0050  38 4e 24 7d 24 8b c1 99 e8 3c 01 72 1c 83 eb 3a   8N$}$....<.r...:
0060  66 a1 1c 7c 26 66 3b 07 26 8a 57 fc 75 06 80 ca   f..|&f;.&.W.u...
0070  02 88 56 02 80 c3 10 73 eb 33 c9 8a 46 10 98 f7   ..V....s.3..F...
0080  66 16 03 46 1c 13 56 1e 03 46 0e 13 d1 8b 76 11   f..F..V..F....v.
0090  60 89 46 fc 89 56 fe b8 20 00 f7 e6 8b 5e 0b 03   `.F..V.. ....^..
00a0  c3 48 f7 f3 01 46 fc 11 4e fe 61 bf 00 00 e8 e6   .H...F..N.a.....
00b0  00 72 39 26 38 2d 74 17 60 b1 0b be a1 7d f3 a6   .r9&8-t.`....}..
00c0  61 74 32 4e 74 09 83 c7 20 3b fb 72 e6 eb dc a0   at2Nt... ;.r....
00d0  fb 7d b4 7d 8b f0 ac 98 40 74 0c 48 74 13 b4 0e   .}.}....@t.Ht...
00e0  bb 07 00 cd 10 eb ef a0 fd 7d eb e6 a0 fc 7d eb   .........}....}.
00f0  e1 cd 16 cd 19 26 8b 55 1a 52 b0 01 bb 00 00 e8   .....&.U.R......
0100  3b 00 72 e8 5b 8a 56 24 be 0b 7c 8b fc c7 46 f0   ;.r.[.V$..|...F.
0110  3d 7d c7 46 f4 29 7d 8c d9 89 4e f2 89 4e f6 c6   =}.F.)}...N..N..
0120  06 96 7d cb ea 03 00 00 20 0f b6 c8 66 8b 46 f8   ..}..... ...f.F.
0130  66 03 46 1c 66 8b d0 66 c1 ea 10 eb 5e 0f b6 c8   f.F.f..f....^...
0140  4a 4a 8a 46 0d 32 e4 f7 e2 03 46 fc 13 56 fe eb   JJ.F.2....F..V..
0150  4a 52 50 06 53 6a 01 6a 10 91 8b 46 18 96 92 33   JRP.Sj.j...F...3
0160  d2 f7 f6 91 f7 f6 42 87 ca f7 76 1a 8a f2 8a e8   ......B...v.....
0170  c0 cc 02 0a cc b8 01 02 80 7e 02 0e 75 04 b4 42   .........~..u..B
0180  8b f4 8a 56 24 cd 13 61 61 72 0b 40 75 01 42 03   ...V$..aar.@u.B.
0190  5e 0b 49 75 06 f8 c3 41 bb 00 00 60 66 6a 00 eb   ^.Iu...A...`fj..
01a0  b0 42 4f 4f 54 4d 47 52 20 20 20 20 0d 0a 52 65   .BOOTMGR    ..Re
01b0  6d 6f 76 65 20 64 69 73 6b 73 20 6f 72 20 6f 74   move disks or ot
01c0  68 65 72 20 6d 65 64 69 61 2e ff 0d 0a 44 69 73   her media....Dis
01d0  6b 20 65 72 72 6f 72 ff 0d 0a 50 72 65 73 73 20   k error...Press
01e0  61 6e 79 20 6b 65 79 20 74 6f 20 72 65 73 74 61   any key to resta
01f0  72 74 0d 0a 00 00 00 00 00 00 00 ac cb d8 55 aa   rt............U.

CRC  b5 bd

next
NEXT
top addr 0x200
DO ff ff fe

addr   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
0000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00a0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00b0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00c0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00d0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00e0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00f0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0100  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0110  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0120  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0130  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0140  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0150  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0160  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0170  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0180  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0190  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01a0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01b0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01c0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01d0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01e0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01f0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................

CRC  00 00

cmd12
CMD12
リード動作の停止
CMD12の直後に返る1バイトは
無効なので、そのバイトを読み捨てます。
R1レスポンスは00になればOKです。
DI 4c 00 00 00 00 01
DO                   7f 00 ff ff ff ff ff ff

cmd24 800
CMD24 800
シングルブロックの書き込み
R1レスポンスは00になればOKです。
コマンドレスポンスとデータパケットの間は
1バイト以上空けます。
データレスポンスは00101[4:0]になればOKです。
データレスポンスの次の00 00 00はビジーです。
DI 58 00 00 08 00 01
DO                   ff 00 ff ff ff ff ff ff

DI [Data Packet ]
DO                e5 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff

acmd23 5
ACMD23 5
アプリケーションの特化コマンド
R1レスポンスは00になればOKです。
DI 77 00 00 00 00 01
DO                   ff 00 ff ff ff ff ff ff

CMD25の書き込みブロック数の設定
R1レスポンスは00になればOKです。
DI 57 00 00 00 05 01
DO                   ff 00 ff ff ff ff ff ff

cmd25 800
CMD25 800
マルチブロックの書き込み
R1レスポンスは00になればOKです。
コマンドレスポンスとデータパケットの間は
1バイト以上空けます。
データレスポンスは00101[4:0]になればOKです。
データレスポンスの次の00はビジーです。
Stop Tran Token(0xfd)に対してはレスポンスは無く、
1バイト置いてビジーを出力してきます。
DI 59 00 00 08 00 01
DO                   ff 00 ff ff ff ff ff ff

DI [Data Packet ]
DO                e5 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

DI [Data Packet ]
DO                e5 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

DI [Data Packet ]
DO                e5 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

DI [Data Packet ]
DO                e5 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

DI [Data Packet ]
DO                e5 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

DI fd
DO    80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff

cmd58
CMD58
OCRの読み出し
R1レスポンスは00になればOKです。
OCRのbit30 = 0:SDSC
     bit30 = 1:SDHC or SDXC
DI 7a 00 00 00 00 01
DO                   ff 00 80 ff 80 00 ff ff


真空管
戻る