バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの話。
CMD44(Q_TASK_INFO_A)の続き。
登場人物
博識フクロウのフクさん

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

今回も「CMD44(Q_TASK_INFO_A)で読み込みor書き込み、優先度、制御Block数を設定」について。
CQ Modeのステートマシン図を貼っておく。


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)で書き込み

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

次はPriorityかな?

そうだね。

Priorityだから優先度設定するパラメータとは思うのだけど、
1bitパラメータってことは、優先度としては2段階しかないってことかな。

正解!

まぁこの優先度設定はVoluntary CQ modeの時のみ有効なパラメータなんだけどね。
さらに、優先度設定したからと言って、必ずしも守られる保証はない。
可能な限りの対応ってあたり、実際のハンドリングはメーカ依存だし、状況依存だろう。

Voluntary CQ modeの優先度の話は確かここでやってたねー。

とりあえず、Priorityのbitを立てると、Voluntary CQ modeに於いては、
優先的に処理する努力はする。
ってことろか。
CMD44(Q_TASK_INFO_A)のリクエストパラメータのTask ID

で、次はTask IDだけど、これはどういうパラメータだろ?
全然イメージ湧かない。

これはCommand Queueの数にも依存するんだけど、
Command Queueが最大で32個定義できる。
このCommand Queueの番号がTask IDってことになるな。

そのCommand Queueの数はどうやったら分かるの?

Performance Enhancement RegisterのCQ Support and Depthから読み出す。

また出て来たな。
Performance Enhancement Register。

ここらへんで散々できてたよねぇ。

ま、Command Queueの数がわかったら、
その数がTask IDの最大数ということにもなる。

一点注意が必要なのは、
Voluntary CQ modeの時は任意のTask IDを指定できる。
Sequential CQ modeの時は連続したTask IDを逐次設定していく。
必要がある。

まぁ名前的にもそんな感じだよねぇ。
まとめ

まとめだよ。
- CMD44(Q_TASK_INFO_A)のリクエストパラメータPriorityは1だったら優先。
- Voluntary CQ modeの時のみ有効なパラメータ。
- Task IDはCQの数に依存。
- CQの数はPerformance Enhancement Registerから取得できる。
バックナンバーはこちら。
コメント