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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/

はじめに

SDカードのCQ Modeの読み書き以外のコマンドたちの話。
今回はCMD38(ERASE)について。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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のステートマシンと読み書き以外のコマンド

フクさん
フクさん

今回はCMD38(ERASE)についての話だ。
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) ← これの第1回/全3回
  • CMD43(Q_MANAGEMENT)

CMD38(ERASE)

太郎くん
太郎くん

今回はCMD38(ERASE)だけど、
これはまさに消去指示ってだけで、これと言って説明する話はないんじゃない?

フクさん
フクさん

まぁそう思うよねー。

太郎くん
太郎くん

って、ことはなんかあるのか?!

フクさん
フクさん

まずはリクエストパラメータを確認してみよう。

CMD38(ERASE)のリクエストパラメータ

フクさん
フクさん

CMD38(ERASE)のリクエストパラメータは
32bit長のErase Function

太郎くん
太郎くん

Erase Function?

フクさん
フクさん

Erase Functionの内訳は以下になる。

Erase FunctionDescription
00000001hDiscard
00000002hFULE
OthersErase
太郎くん
太郎くん

ん?
DiscardFULEErase

太郎くん
太郎くん

Eraseは・・・まぁ消去ってことだと思うが
他の2つはなんだ?

フクさん
フクさん

Discardが管理の破棄で、
FULEFull User Area Logical Eraseの略で、全領域のEraseだな。

太郎くん
太郎くん

???

フクさん
フクさん

まぁこれは次回説明するとして、
先にレスポンスの方を片付けておこう。

CMD38(ERASE)のレスポンス

太郎くん
太郎くん

CMD38(ERASE)のレスポンスは・・・。
R1と見せかけてR1bだな。
消去って時間掛かりそうだし。

フクさん
フクさん

正解だ。

フクさん
フクさん

これは、Erase FunctionでDiscard、FULEを指定した場合でも一緒だな。

太郎くん
太郎くん

でも、全領域Eraseだと時間掛かりそうだよね。

CMD38(ERASE)のレスポンスR1bのタイムアウト値

フクさん
フクさん

busyのタイムアウト時間も規定されていて、SD_STATUSを参照することで分かる。
以前も一回見せたが如何SD_STATUSの内訳だ。

BitsIdentifierValueDescription
511:510DAT_BUS_WIDTH’00’=1(default),’10’=4bit現在のバス幅。ACMD6(SET_BUS_WIDTH)でも取得可能
509SECURED_MODE‘0’=Not in the mode,’1’=In Serured ModeSecured modeか否か
508:496reserved
495:480SD_CARD_TYPE‘0000h’=SD,’0001h’=SD ROM,’0002h’=OPT
479:448SIZE_OF_PROTECTED_AREASize of protected area保護領域サイズ
447:440SPEED_CLASSSpeed Class of the cardカードのSpeed Class
439:432PERFORMANCE_MOVEAUのコピー速度
431:428AU_SIZESize of AUAllocation Unit(NAND-FLASH消去単位)
427:424reserved
423:408ERASE_SIZENumber of AUs to be erased at a timeERASE_TIMEOUTで指定された時間で消去できるAU数
407:402ERASE_TIMEOUTTimeout value for erasing areas specified by UNIT_OF_ERASE_AUERASE_SIZEで指定されたAU数を消去するのに必要な時間
401:400ERASE_OFFSETFixed offset value added to erase time.AU消去時に必ずかかるオフセット時間
388:396UHS_SPEED_GRADESpeed Grade for UHS mode.UHS mode時のSpeed Grade
395:392UHS_AU_SIZEsize of AU for UHS modeUHS mode時のAUサイズ
391:384VIDEO_SPEED_CLASSVedeo Speed Class value of the cardビデオスピードクラス
383:378reserved
377:368VSC_AU_SIZEAU size in MB for Video Speed Classビデオスピードクラスに於いてのAUサイズ
367:346SUS_ADDRSuspension Addressサスペンドアドレス
345:340reserved
339:336APP_PERF_CLASSApplication Performance Class Value of the cardアプリケーションパフォーマンスクラス
335:328PERFORMANCE_ENHANCESupport for Performance Enhancement functionalities応答向上機能
327:314reserved
313DISCARD_SUPPORT‘1’:SupportedERASE操作サポート
312FULE_SUPPORT‘1’:Supportedユーザエリア全域のERASE操作サポート
太郎くん
太郎くん

そういえば、こんなのあったねー。

フクさん
フクさん

この中の
AU_SIZE、ERASE_SIZE、ERASE_TIMEOUT、ERASE_OFFSET
が消去待ち時間に必要なパラメータだ。

太郎くん
太郎くん

説明文を見た感じだと以下の関係性になるのかな?

CMD38(ERASE)のbusy待ち時間

=消去したいサイズ ÷ AU_SIZE × ERASE_TIMEOUT + ERASE_OFFSET

フクさん
フクさん

正解。

太郎くん
太郎くん

ということは、ERASEするサイズは常に意識している必要があるってことか。

まとめ

フクさん
フクさん

まとめだよ。

  • CMD38(ERASE)について説明。
  • CMD38のリクエストパラメータは32bit長Erase Function。
    • Eraseが通常の消去、Discardは管理破棄、FULEは全領域Erase。
  • busy待ちはAU_SIZE、ERASE_SIZE、ERASE_TIMEOUT、ERASE_OFFSETから算出する。

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

コメント

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