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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/

はじめに

SDカードのCQ Modeの話。
「CMD46(Q_RD_TASK)で読み出し」と「CMD47(Q_WR_TASK)で書き込み」について。

登場人物

博識フクロウのフクさん

指差しフクロウ

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

フクさん
フクさん

今回は「CMD46(Q_RD_TASK)で読み出し」と「CMD47(Q_WR_TASK)で書き込み」について。
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数を設定
  • 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)で書き込み ← これ

CMD46(Q_RD_TASK)のリクエストパラメータとレスポンス

太郎くん
太郎くん

まずは恒例のリクエストパラメータかな。

フクさん
フクさん

CMD46(Q_RD_TASK)のリクエストパラメータはTask ID一個だけだね。

Bit position[31:21][20:16][15:0]
Width(bit)11516
Value0x0
DescriptionReservedTask IDReserved
太郎くん
太郎くん

ほう。
5bit長のTask ID以外はReservedなのか。

フクさん
フクさん

そして、レスポンスはR1フォーマットで、
それに追従する形でDATラインから読み出しデータが取得できる。
CMD44(Q_TASK_INFO_A)でBlock数の指定はしてあるので、CMD12(STOP_TRANSMISSION)は不要だ。

CMD47(Q_WR_TASK)のリクエストパラメータとレスポンス

太郎くん
太郎くん

次はCMD47(Q_WR_TASK)かな。

フクさん
フクさん

実はリクエストパラメータとしてはCMD46(Q_RD_TASK)と一緒で、Task ID一個だけ

Bit position[31:21][20:16][15:0]
Width(bit)11516
Value0x0
DescriptionReservedTask IDReserved
太郎くん
太郎くん

まぁ必要な情報は事前に渡してるから、Task IDだけで十分ってことだよね。

フクさん
フクさん

そして、こちらもレスポンスはR1フォーマットとなり、
それに追従する形で書き込みデータをDATラインで送信だ。

太郎くん
太郎くん

なんか、一気に2つのコマンドが終わってしまってちょっと拍子抜けだな。

Task IDについて

太郎くん
太郎くん

そういえば、
Task IDって一旦整理が必要な気がするんだけど・・・。

フクさん
フクさん

と言うと?

太郎くん
太郎くん

いやー。
たぶん同じような数値なんだろうけど。
Task IDだったり、Command Queueだったり、STATUS_TASKだったりで結構ごっちゃごちゃで・・・。

フクさん
フクさん

まぁ確かにややこしいと言えばややこしいな。

フクさん
フクさん

よし。
次回、そこら辺を一旦整理しよう。

まとめ

フクさん
フクさん

まとめだよ。

  • 「CMD46(Q_RD_TASK)で読み出し」と「CMD47(Q_WR_TASK)で書き込み」について説明。
    • 共にリクエストパラメータはTask IDのみ。
      • 事前にTask IDに紐づけて情報を渡しているため、Task ID以外の情報は不要。
  • Task IDの概念がややこしいので整理が必要。

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

コメント

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