バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの読み書き以外のコマンドたちの話。
CMD38(ERASE)の続きでFULEについて。
登場人物
博識フクロウのフクさん
イラスト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)の続きでFULEについての話だ。
CQ Modeのステートマシン図は以下。
そして、CQ Modeの読み書き以外のコマンドたち。
- CMD19(SEND_TUNING_BLOCK)
- CMD32(ERASE_WR_BLK_START)
- CMD33(ERASE_WR_BLK_END)
- CMD38(ERASE) ← これの第2回/全3回
- CMD43(Q_MANAGEMENT)
CMD38(ERASE)のFULE
前回も説明したが、FULEはFull User Area Logical Eraseの略で、全領域のEraseだ。
全領域って、
随分思い切った使い方だねー。
Windowsとかでフォーマットする時に
クイックフォーマットとか完全フォーマットとかでてくるじゃん?
確かに出てくるね。
それの完全フォーマットをする時に使うものと思っておけばOKかな。
確かクイックフォーマットだと
ファイルシステムの管理領域だけを初期化して、
実はデータは残ってたりするんだっけ?
それを復元したりも出来る場合があるっぽいね。
完全フォーマットの方は、
管理領域だけでなく、データ部分も完全に消去する。
FULEをサポートしてないこともあるんで、その場合は普通にEraseしているんだろう。
CMD38(ERASE)のFULEのサポート有無確認
ということはFULEがサポートされてるか確認できるってこと?
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操作サポート |
あー。一番下にいたのか。
これが有効になっていれば、FULEで一気に消去ができるってことになるのか。
そういうことだねー。
仕様面のいろいろ
FULEが全体消去ってことは特に開始アドレス、終了アドレスの指定は要らないってことかな?
いや、要るよ。
ちゃんとBlock0から最後のBlockを指定してあげる必要がある。
指定の範囲が違ってると通常のErase動作になる。
え?だったらEraseで全領域Eraseするのとなんにも変わらなくない??
FULEは通常Eraseと違って、busyの待ち時間が1秒固定なんだよね。
つまり、高速に全領域をEraseできる。
開始アドレス、終了アドレスを指定させるのは、間違って単発コマンドを送ってしまわないようにする処理上のゲートなんじゃないかなー?
あー高速に消去できるのか。
アドレスを指定するのも、消去する意思があることを示す上では重要な気もするね。
まとめ
まとめだよ。
- CMD38(ERASE)のFULEについて説明。
- 完全フォーマットとかで使われる仕様。
- CMD38(ERASE)のFULEのサポート有無はSD_STATUSで確認できる。
- 通常のERASEと違い、全領域ERASEであっても1秒以内に完了する仕様となっている。
- 間違って使わないように消去範囲を明示する必要はある。
バックナンバーはこちら。
コメント