バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの読み書き以外のコマンドたちの話。
今回はCMD38(ERASE)について。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
CQ Modeのステートマシンと読み書き以外のコマンド
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
今回は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](https://www.simulationroom999.com/blog/wp-content/uploads/2021/03/02_CQ-ModeのステートマシンState-Diagram-in-CQ-Mode-1024x707.png)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そして、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)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
今回はCMD38(ERASE)だけど、
これはまさに消去指示ってだけで、これと言って説明する話はないんじゃない?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁそう思うよねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
って、ことはなんかあるのか?!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まずはリクエストパラメータを確認してみよう。
CMD38(ERASE)のリクエストパラメータ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
CMD38(ERASE)のリクエストパラメータは
32bit長のErase Function。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
Erase Function?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
Erase Functionの内訳は以下になる。
Erase Function | Description |
---|---|
00000001h | Discard |
00000002h | FULE |
Others | Erase |
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ん?
DiscardとFULEとErase?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
Eraseは・・・まぁ消去ってことだと思うが
他の2つはなんだ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
Discardが管理の破棄で、
FULEがFull User Area Logical Eraseの略で、全領域のEraseだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
???
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁこれは次回説明するとして、
先にレスポンスの方を片付けておこう。
CMD38(ERASE)のレスポンス
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
CMD38(ERASE)のレスポンスは・・・。
R1と見せかけてR1bだな。
消去って時間掛かりそうだし。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
正解だ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
これは、Erase FunctionでDiscard、FULEを指定した場合でも一緒だな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
でも、全領域Eraseだと時間掛かりそうだよね。
CMD38(ERASE)のレスポンスR1bのタイムアウト値
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
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操作サポート |
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
そういえば、こんなのあったねー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
この中の
AU_SIZE、ERASE_SIZE、ERASE_TIMEOUT、ERASE_OFFSET
が消去待ち時間に必要なパラメータだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
説明文を見た感じだと以下の関係性になるのかな?
CMD38(ERASE)のbusy待ち時間
=消去したいサイズ ÷ AU_SIZE × ERASE_TIMEOUT + ERASE_OFFSET
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
正解。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
ということは、ERASEするサイズは常に意識している必要があるってことか。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- CMD38(ERASE)について説明。
- CMD38のリクエストパラメータは32bit長Erase Function。
- Eraseが通常の消去、Discardは管理破棄、FULEは全領域Erase。
- busy待ちはAU_SIZE、ERASE_SIZE、ERASE_TIMEOUT、ERASE_OFFSETから算出する。
バックナンバーはこちら。
コメント