今回から書き込みの動作を確認していきたいと思います。

ブロックデータの書き込みはCMD24となります。

読み込み動作と同様に、対象となるSDカードはVer2及びSDHCカードとなります。

※2017年9月24日補足説明追記しました
また、 Ver2とSDHCカードでは 書き込み(読み込み)位置の指定方法が異なります。
Ver2では、512バイト(0x200)ごとのアドレス指定です。
つまり  1番目の512バイト 1ブック→ 0x000000
     2番目の512バイト 1ブック→ 0x000200
     3番目の512バイト 1ブック→ 0x000400
     4番目の512バイト 1ブック→ 0x000600
          ・
          ・

SDHCでは、512バイトを1ブロックとしたブロック連番指定です。
つまり  1番目の512バイト 1ブック→ 0x000000
     2番目の512バイト 1ブック→ 0x000001
     3番目の512バイト 1ブック→ 0x000002
     4番目の512バイト 1ブック→ 0x000003
          ・
          ・

動作を順に追ってみましょう。

CMD24コマンドを投げるとレスポンスが帰ってきます。
レスポンスが0x00であれば、ライト準備完了なので
引き続き データブロックを書き込みしていきます。
データブロックの最初のデータは、スタートバイトで、そのあとに書き込むデータバイトが続きます。
スタートバイトは 0ビット目が0となる0xfeをセットします。
続くデータバイトを512バイト出力します。
ここでは、データバイトはdjnz制御文で記述しているので256バイトを2回に分けて書き込みしています。
書き込むデータは、0xff~0x00を2回に分けて書き込みしています。

最後にダミー(0xff)でCRC 2バイトを書き込みしています。

CRCを書き込んだ後、レスポンスを待ちます。
レスポンスの下位4ビットに注目し、書き込み正常終了の0x5をチェックします。

その後、SDカードがビジーになり、ビジー中の読み取るデータは0x00となります。
したがって、0x00以外のデータを受信した時点で、ビジーが終了したことになります。

最後に、0xFFのダミーデータを送って書き込み動作を終了しています。

次回にプログラムを展開いたします。

おすすめの記事