バックナンバーはこちら。
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の読み書き以外のコマンドたち。
- 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 Function | Description |
---|---|
00000001h | Discard |
00000002h | FULE |
Others | Erase |

ん?
DiscardとFULEとErase?

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

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

???

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

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

正解だ。

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

でも、全領域Eraseだと時間掛かりそうだよね。
CMD38(ERASE)のレスポンスR1bのタイムアウト値

busyのタイムアウト時間も規定されていて、SD_STATUSを参照することで分かる。
以前も一回見せたが如何SD_STATUSの内訳だ。
Bits | Identifier | Value | Description |
---|---|---|---|
511:510 | DAT_BUS_WIDTH | ’00’=1(default),’10’=4bit | 現在のバス幅。ACMD6(SET_BUS_WIDTH)でも取得可能 |
509 | SECURED_MODE | ‘0’=Not in the mode,’1’=In Serured Mode | Secured modeか否か |
508:496 | reserved | – | – |
495:480 | SD_CARD_TYPE | ‘0000h’=SD,’0001h’=SD ROM,’0002h’=OPT | |
479:448 | SIZE_OF_PROTECTED_AREA | Size of protected area | 保護領域サイズ |
447:440 | SPEED_CLASS | Speed Class of the card | カードのSpeed Class |
439:432 | PERFORMANCE_MOVE | AUのコピー速度 | |
431:428 | AU_SIZE | Size of AU | Allocation Unit(NAND-FLASH消去単位) |
427:424 | reserved | – | – |
423:408 | ERASE_SIZE | Number of AUs to be erased at a time | ERASE_TIMEOUTで指定された時間で消去できるAU数 |
407:402 | ERASE_TIMEOUT | Timeout value for erasing areas specified by UNIT_OF_ERASE_AU | ERASE_SIZEで指定されたAU数を消去するのに必要な時間 |
401:400 | ERASE_OFFSET | Fixed offset value added to erase time. | AU消去時に必ずかかるオフセット時間 |
388:396 | UHS_SPEED_GRADE | Speed Grade for UHS mode. | UHS mode時のSpeed Grade |
395:392 | UHS_AU_SIZE | size of AU for UHS mode | UHS mode時のAUサイズ |
391:384 | VIDEO_SPEED_CLASS | Vedeo Speed Class value of the card | ビデオスピードクラス |
383:378 | reserved | – | – |
377:368 | VSC_AU_SIZE | AU size in MB for Video Speed Class | ビデオスピードクラスに於いてのAUサイズ |
367:346 | SUS_ADDR | Suspension Address | サスペンドアドレス |
345:340 | reserved | – | – |
339:336 | APP_PERF_CLASS | Application Performance Class Value of the card | アプリケーションパフォーマンスクラス |
335:328 | PERFORMANCE_ENHANCE | Support for Performance Enhancement functionalities | 応答向上機能 |
327:314 | reserved | – | – |
313 | DISCARD_SUPPORT | ‘1’:Supported | ERASE操作サポート |
312 | FULE_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から算出する。
バックナンバーはこちら。
コメント