バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの話。
Commnad Queue番号、Task ID関連について整理する回。
Commnad Queue番号、TaskIDは基本的には同じものを指しているが、利用タイミングの都合で言い回しが変わっている。
他にもまだ触れていないコマンド群があるので、それらを列挙。
登場人物
博識フクロウのフクさん
![指差しフクロウ](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)
今回は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](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の基本的なフローは以下。
- 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について情報整理
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
一旦整理してみよう。
- 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番号
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
情報整理というえば情報整理だが・・・。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
要するに、
Task ID = Command Queue番号 = (STATUS_TASK_XXのXXの部分)
ってことでOK?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
OKだ!
CQ Modeのその他いろいろ
![フクさん](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)
ステートマシン図に乗ってるけど基本フローに居なかったヤツラだ!
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」09アップ.png)
やっぱりそれかーー!!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
とりあえず、列挙するとこんな感じだ。
- 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)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
とはいえ、CMD58(READ_EXTR_MULTI)とCMD59(WRITE_EXTR_MULTI)は、
CMD48(READ_EXTR_SINGLE)とCMD49(WRITE_EXTR_SINGLE)のMULTI版なので端折っても良いだろう。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
それ以外も端折っても良いかもしれないが・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/はてなフクロウ.png)
どうする?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
うーん、このまま放置ってのも気持ち悪いから説明だけでも聞いておこかな・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
じゃ、次回から片付けていこう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- Task ID関連について情報整理した。
- 端的に言うとTask ID = Command Queue番号 = (STATUS_TASK_XXのXXの部分)。
- まだ語っていないコマンド群あり。
- チューニング(CMD19)。
- ERASE(CMD32、CMD33、CMD38)。
- アボート(CMD43)
バックナンバーはこちら。
コメント