バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの話。
CMD44(Q_TASK_INFO_A)の続き。
登場人物
博識フクロウのフクさん
![指差しフクロウ](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)
今回も「CMD44(Q_TASK_INFO_A)で読み込みor書き込み、優先度、制御Block数を設定」について。
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数を設定 ← これの第2回/全3回
- 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)で書き込み
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
CMD44(Q_TASK_INFO_A)のリクエストパラメータ。
bit position | 31 | 30 | [29:24] | 23 | [22:21] | [20:16] | [15:0] |
bit width | 1 | 1 | 6 | 1 | 2 | 5 | 16 |
value | 0 | x | xxxxxx | x | 00b | xxxxx | xxxxh |
Description | Reserved | Direction | Extended Address | Priority | Reserved | Task ID | Number of Blocks |
CMD44(Q_TASK_INFO_A)のリクエストパラメータのPriority
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
次はPriorityかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうだね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
Priorityだから優先度設定するパラメータとは思うのだけど、
1bitパラメータってことは、優先度としては2段階しかないってことかな。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
正解!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁこの優先度設定はVoluntary CQ modeの時のみ有効なパラメータなんだけどね。
さらに、優先度設定したからと言って、必ずしも守られる保証はない。
可能な限りの対応ってあたり、実際のハンドリングはメーカ依存だし、状況依存だろう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
Voluntary CQ modeの優先度の話は確かここでやってたねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
とりあえず、Priorityのbitを立てると、Voluntary CQ modeに於いては、
優先的に処理する努力はする。
ってことろか。
CMD44(Q_TASK_INFO_A)のリクエストパラメータのTask ID
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
で、次はTask IDだけど、これはどういうパラメータだろ?
全然イメージ湧かない。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
これはCommand Queueの数にも依存するんだけど、
Command Queueが最大で32個定義できる。
このCommand Queueの番号がTask IDってことになるな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
そのCommand Queueの数はどうやったら分かるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
Performance Enhancement RegisterのCQ Support and Depthから読み出す。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
また出て来たな。
Performance Enhancement Register。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
ここらへんで散々できてたよねぇ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ま、Command Queueの数がわかったら、
その数がTask IDの最大数ということにもなる。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
一点注意が必要なのは、
Voluntary CQ modeの時は任意のTask IDを指定できる。
Sequential CQ modeの時は連続したTask IDを逐次設定していく。
必要がある。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
まぁ名前的にもそんな感じだよねぇ。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- CMD44(Q_TASK_INFO_A)のリクエストパラメータPriorityは1だったら優先。
- Voluntary CQ modeの時のみ有効なパラメータ。
- Task IDはCQの数に依存。
- CQの数はPerformance Enhancement Registerから取得できる。
バックナンバーはこちら。
コメント