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

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

バックナンバーはこちら。
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のステートマシン(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数を設定 ← これの第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 position3130[29:24]23[22:21][20:16][15:0]
bit width11612516
value0xxxxxxxx00bxxxxxxxxxh
DescriptionReservedDirectionExtended AddressPriorityReservedTask IDNumber 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 RegisterCQ 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から取得できる。

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

コメント

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