バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの読み書き以外のコマンドたちの話。
今回はCMD32(ERASE_WR_BLK_START)、CMD33(ERASE_WR_BLK_END)について。
登場人物
博識フクロウのフクさん
イラスト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
CQ Modeのステートマシンと読み書き以外のコマンド
フクさん:
今回はCMD32(ERASE_WR_BLK_START)、CMD33(ERASE_WR_BLK_END)についての話だ。
CQ Modeのステートマシン図は以下。
そして、CQ Modeの読み書き以外のコマンドたち。
- CMD19(SEND_TUNING_BLOCK)
- CMD32(ERASE_WR_BLK_START) ← これ
- CMD33(ERASE_WR_BLK_END) ← これ
- CMD38(ERASE)
- CMD43(Q_MANAGEMENT)
CMD32(ERASE_WR_BLK_START)
CMD32(ERASE_WR_BLK_START)のリクエストパラメータはたぶんBlockアドレス指定だねー。
その通り。
32bit長のBlockアドレスになる。
名前の通り、消去開始アドレスを指定する。
そして、レスポンスはR1かな。
そっちも正解。
当然、アドレス範囲はSDカードの容量の範囲内である必要がある。
範囲外だとOUT_OF_RANGEのエラーが返る。
まぁそりゃそうだろうねー。
CMD33(ERASE_WR_BLK_END)
さっきのが消去開始アドレスで、
CMD33(ERASE_WR_BLK_END)は消去末端アドレスだね。
たぶん、リクエストパラメータとレスポンスフォーマットは一緒なんじゃない?
正解だ。
リクエストパラメータは32bit長のBlockアドレス。
レスポンスフォーマットはR1になる。
こっちも範囲外だとOUT_OF_RANGEのエラーが返る。
目的がハッキリしてるから、大体予想が付くね。
アドレス指定について
そういえば、32bit長のBlockアドレスで指定とあって、
SDHC以降は1Blockは512[byte]だよね?
うん。その通りだ。
そうなると・・・。
SDUCの場合ってどうなるんだろ?
32bit長で512[byte]単位だと2Tbyteまでしか指定できなくない?
0xffffffff×512=2199023255040≒2Tbyte
で、2Tbyteが上限になると思うんだけど?
あー、SDUCの場合は
CMD22(ADDRESS_EXTENSION)で上位5bitを追加で指定することになる
これは消去に限らず、
通常の書き込み、読み込みでも同じだな。
ほー。
CMD22(ADDRESS_EXTENSION)ってのあったのかー。
本来であれば、通常の書き込み、読み込みのところで説明すべきだったな。
すっかり忘れてた。
まぁまだSDUCよりもSDHC、SDXCを使うことの方が多いだろうし、
そういうのがあるってのが知れて良かったよ。
いろいろ仕様が拡張され続けた結果として生まれたコマンドだしね。
まとめ
まとめだよ。
- CMD32(ERASE_WR_BLK_START)、CMD33(ERASE_WR_BLK_END)について説明。
- リクエストパラメータ、レスポンスフォーマットは一緒。
- 32bit長アドレス。
- R1フォーマット。
- SDUC時はCMD22(ADDRESS_EXTENSION)で5bitの拡張アドレスを指定する。
バックナンバーはこちら。
コメント