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

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

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

はじめに

SDカードのCQ Modeの話。
Commnad Queue番号、Task ID関連について整理する回。
Commnad Queue番号、TaskIDは基本的には同じものを指しているが、利用タイミングの都合で言い回しが変わっている。
他にもまだ触れていないコマンド群があるので、それらを列挙。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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のステートマシンと基本フロー

フクさん
フクさん

今回はTask ID関連について整理する回になる。
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の基本的なフローは以下。

  • CMD49(WRITE_EXTR_SINGLE)でEnable CQ=1にする。
  • CMD44(Q_TASK_INFO_A)で読み込みor書き込み、優先度、制御Block数を設定
  • CMD45(Q_TASK_INFO_B)で開始Blockアドレスを指定
  • CMD13(SEND_STATUS/SEND_TASK_STATUS)でCQの状態を確認
  • CMD44(Q_TASK_INFO_A)で読み込み指示の場合はCMD46(Q_RD_TASK)で読み出し
  • CMD44(Q_TASK_INFO_A)で書き込み指示の場合はCMD47(Q_WR_TASK)で書き込み

Task IDについて情報整理

フクさん
フクさん

一旦整理してみよう。

  • Performance Enhancement RegisterのCQ Support and Depth
    • 0の場合は非サポート
    • 1以上の場合は、この値までが使えるCommand Queue番号
      • 5だったら0~5の6個のCommand Queueが使える
  • CMD44(Q_TASK_INFO_A)のTask ID
    • CQ Support and Depthが5だった場合、0~5の6個のTask IDを使える。
  • Command Queue番号
    • Task IDと同一の番号
    • Sequential CQ Modeの場合は小さい数値のTask ID、Command Queueから処理を予約する必要あり。
  • CMD13(SEND_STATUS/SEND_TASK_STATUS)で取得できるSTATUS_TASK_XX
    • XXの部分がTask IDであり、Comand Queue番号
太郎くん
太郎くん

情報整理というえば情報整理だが・・・。

太郎くん
太郎くん

要するに、
Task ID = Command Queue番号 = (STATUS_TASK_XXのXXの部分)
ってことでOK?

フクさん
フクさん

OKだ!

CQ Modeのその他いろいろ

フクさん
フクさん

さて、ここまで特に触れてこなかったんだが・・・。

太郎くん
太郎くん

(もしかしてアレか?!ステートマシン図に乗ってるけど基本フローに居なかったヤツラ・・・。)

フクさん
フクさん

ステートマシン図に乗ってるけど基本フローに居なかったヤツラだ!

太郎くん
太郎くん

やっぱりそれかーー!!

フクさん
フクさん

とりあえず、列挙するとこんな感じだ。

  • CMD19(SEND_TUNING_BLOCK)
  • CMD32(ERASE_WR_BLK_START)
  • CMD33(ERASE_WR_BLK_END)
  • CMD38(ERASE)
  • CMD43(Q_MANAGEMENT)
  • CMD58(READ_EXTR_MULTI)
  • CMD59(WRITE_EXTR_MULTI)
フクさん
フクさん

とはいえ、CMD58(READ_EXTR_MULTI)とCMD59(WRITE_EXTR_MULTI)は、
CMD48(READ_EXTR_SINGLE)とCMD49(WRITE_EXTR_SINGLE)のMULTI版なので端折っても良いだろう。

フクさん
フクさん

それ以外も端折っても良いかもしれないが・・・。

フクさん
フクさん

どうする?

太郎くん
太郎くん

うーん、このまま放置ってのも気持ち悪いから説明だけでも聞いておこかな・・・。

フクさん
フクさん

じゃ、次回から片付けていこう。

まとめ

フクさん
フクさん

まとめだよ。

  • Task ID関連について情報整理した。
    • 端的に言うとTask ID = Command Queue番号 = (STATUS_TASK_XXのXXの部分)。
  • まだ語っていないコマンド群あり。
    • チューニング(CMD19)。
    • ERASE(CMD32、CMD33、CMD38)。
    • アボート(CMD43)

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

コメント

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