前回で初期化のプロセスは完了しましたが、はんとに初期化が完了したのか確認することにします。
また、カードの種類を確認します。(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]
次はブロック書き込みを行ってみます。