バックナンバーはこちら。
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の基本的なフローは以下。
- 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)
バックナンバーはこちら。
コメント