【FileSystem】車載外部ストレージ その82【SD応答向上仕様㉛】

【FileSystem】車載外部ストレージ その82【SD応答向上仕様㉛】 車載外部ストレージ

バックナンバーはこちら。
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のステートマシン(State Diagram in CQ Mode)、CMD49(WRITE_EXTR_SINGLE) Enable CQ=1、CMD49(WRITE_EXTR_SINGLE) Enable CQ=0、CMD12(STOP_TRANSMISSION),CMD13(SEND_STATUS),CMD32(ERASE_WR_BLK_ADDR),CMD33(ERASE_WR_BLK_END_ADDR)、CMD44(Q_TASK_INFO_A),CMD45(Q_TASK_INFO_B)、Read:CMD19(SEND_TUNING_BLOCK),CMD46(Q_RD_TASK),CMD48(READ_EXTR_SINGLE),CMD58(READ_EXTR_MULTI)、Write:CMD47(Q_WR_TASK),CMD49(WRITE_EXTR_SINGLE),CMD59(WRITE_EXTR_MULTI)、CMD38(ERASE),CMD43(Q_MANAGEMENT)、End of R1b,End of Data Transfer、CMD12(STOP_TRANSMISSION),CMD13(SEND_STATUS)、CMD44(Q_TASK_INFO_A),CMD45(Q_TASK_INFO_B)、CQ Disable、CQ Tran、CQ Enabled
フクさん
フクさん

そして、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の拡張アドレスを指定する。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました