ChaNさんの
MMCの使いかたを理解するために、
SDカードをSPIモードで操作してみました。 使用したSDカードKINGMAXの2GBです。 ハイパーターミナルでコマンドを送ると、 そのコマンドの動きを表示するようにしました。(115200 8-N-1) |
コマンド インデックス | 引数 | 応答 | データ転送 | 省略形 | 説明 |
---|---|---|---|---|---|
CMD0 | 無し(0) | R1 | 無し | GO_IDLE_STATE | ソフトウェアリセット |
CMD1 | 無し(0) | R1 | 無し | SEND_OP_COND | 初期化開始 |
ACMD41 | 40 00 00 00 | R1 | 無し | APP_SEND_OP_COND | 初期化開始(SDC専用) |
CMD8 | 00 00 01 aa | R7 | 無し | SEND_IF_COND | 動作電圧確認(SDC V2専用) |
CMD9 | 無し(0) | R1 | 有り | SEND_CSD | CSDの読み出し |
CMD10 | 無し(0) | R1 | 有り | SEND_CID | CIDの読み出し |
CMD12 | 無し(0) | R1b | 無し | STOP_TRANSMISSION | リード動作の停止 |
CMD16 | ブロック長[31:0] | R1 | 無し | SET_BLOCKLEN | R/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_OCR | OCRの読み出し |
ハイパーターミナルの画面
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 |