前回で初期化のプロセスは完了しましたが、はんとに初期化が完了したのか確認することにします。
また、カードの種類を確認します。(SDver2 or SDHC)
コマンドは、CMD58です。

CMD58コマンドのレスポンスの30bit目と31bit目に注目します。
30bit目 0:SDVer2  1:SDHC
31bit目 0:初期化未完了 1:初期化完了

したがって、31bit目が”1”の時(初期化が完了)に30bit目が”0”の時はSDver2、”1”の時はSDHCとなるはずです。

実際にコマンドを投げた時のターミナルの返答は次のようになりました。

手持ちの2GBのSD-CARD(TOSHIBA SD-S02G)の場合

CMD58:0080FF8000   31-28bitが”8”なので ”1000” 31bit=1 30bit=0です。

手持ちの4GBのSDHCの場合

CMD58:00C0FF8000   31-28bitが”C”なので ”1100” 31bit=1 30bit=1です。

となりました。

アセンブラコードは次のようになります。

[asm] cmd58_out:
call dummy_data
ld hl,cmd58
call cmd_out
call r1_resp
push af
ld b,4
ld hl,r7
cmd58_r:
call resp
ld (hl),a
inc hl
djnz cmd58_r
cmd58_r_d:
ld hl,cmd58_msg
call msgout
pop af
push af
call hex_a_disp
ld hl,r7
ld b,4
cmd58_r_d_loop:
ld a,(hl)
call hex_a_disp
inc hl
djnz cmd58_r_d_loop
ld a,0x0d
call putchar
pop af
ret
cmd58_msg:
.str "CMD58:"
.db 0x00
[/asm]

次はブロック書き込みを行ってみます。

おすすめの記事