バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSPIモード通信の読み書き詳細の
「ACMD23(SET_WR_BLK_ERASE_COUNT)による消去ブロック数指定」
について。
登場人物
博識フクロウのフクさん
イラスト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モード通信の読み書き詳細
じゃ、今回は
「ACMD23(SET_WR_BLK_ERASE_COUNT)による消去ブロック数指定」
について。
- 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)による停止
ACMD23(SET_WR_BLK_ERASE_COUNT)のリクエスト
まずはACMD23(SET_WR_BLK_ERASE_COUNT)のリクエストパラメータかな。
23bit長の”Number of blocks”ってパラメータだけだね。
Bit position | [31:23] | [22:0] |
Width(bit) | 9 | 23 |
Value | x | x |
Description | Stuff bits | Number of blocks |
これで事前に消去ブロックを指示するわけか。
あれ?
事前に消去ブロックする数を設定するのはわかったけど、
どのアドレスというかどのBlockという指定はいらないの?
あくまで事前に数を設定するだけだね。
SDカードの内部的なdefault値は1になっているようで、
これを実際にWRITE_MULTIPLE_BLOCKする際の消去単位にしているらしい。
事前に消去ブロック数を書き込みBlock数にすることで高速化が見込めるってことだと思う。
なんかめずらしく歯切れの悪い言い方するねぇ・・・。
まぁ仕様書上はそう書いてるってだけだからね。
実際に高速になるかは、SDカード内部の設計次第なんで。
まぁ仕様書上で推奨されているなら、それに従った方が良いね。
ACMD23(SET_WR_BLK_ERASE_COUNT)のレスポンス
ACMD23(SET_WR_BLK_ERASE_COUNT)のレスポンスはR1フォーマット。
まぁ大体のコマンドがR1フォーマットだよねー。
そうだね。
基本はR1。
特殊な役割をもったコマンドは専用レスポンス。
って考え方の設計/実装が妥当だろう。
まとめ
まとめだよ。
- ACMD23(SET_WR_BLK_ERASE_COUNT)による消去ブロック数指定について説明。
- ACMD23のリクエストパラメータはNumber of blocks。
- 指定しない場合のdefault値は”1″となる。
- 仕様書上は書き込み高速化が見込めるとあるが、実際はSDカード側の設計次第。
バックナンバーはこちら。
コメント