バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSPIモード通信の読み書き詳細の
「CMD24(WRITE_BLOCK)による書き込み」
について。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
SDカードのSPIモード通信の読み書き詳細

じゃ、今回は
「CMD24(WRITE_BLOCK)による書き込み」
について。
- CMD24(WRITE_BLOCK)による書き込み ← これ
- ACMD23(SET_WR_BLK_ERASE_COUNT)による消去ブロック数指定
- CMD25(WRITE_MULTIPLE_BLOCK)による書き込み
- Start Block/data Response/STOP_TRAN tokenの発行
- CMD17(READ_SINGLE_BLOCK)による読み出し
- CMD18(READ_MULTIPLE_BLOCK)による読み出し
- CMD12(STOP_TRANSMISSION)による停止
CMD24(WRITE_BLOCK)のリクエスト

まずはCMD24(WRITE_BLOCK)のリクエストパラメータだね。

パラメータとしては32bitの”data address”が入るだけ。

その”data address”は何を指すの?

名前のまんまで、書き込みたいアドレスを指定する。
ちなみに、ソフトウェアで使用するROM/RAMのアドレスは1byte単位であることがほとんどだけど、
SDカードはBlock Length単位になる。
まぁ512byte単位と思っておけば良いかな。

ということは
512 × 0xffffffff = 2,199,023,255,040
までの範囲でアクセスできるってことか。

そうそう。
SDHCの上限である2TBはここからきている。

そういえば、そういう上限があったねー!
CMD24(WRITE_BLOCK)のレスポンス

次はCMD24(WRITE_BLOCK)のレスポンスかな?

CMD24(WRITE_BLOCK)のレスポンスはR1フォーマットになる。


これを見てエラーハンドリングをすればOKって感じだね。

うーん、これだけならすごくシンプルなんだけどねー。

そうね。
Single Blockだけなら恐ろしくシンプル。

まぁ効率面も必要だからシンプルなだけじゃどうにもならないんだろうねー。
まとめ

まとめだよ。
- CMD24(WRITE_BLOCK)による書き込みについて説明。
- CMD24(WRITE_BLOCK)のリクエストパラメータは32bitのdata addressが付く。
- 1block512byteとすると2TBが上限。
- CMD24(WRITE_BLOCK)のレスポンスはR1フォーマット。
バックナンバーはこちら。
コメント