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

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

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

はじめに

SDカードのCQ Modeの話。
「CMD13(SEND_STATUS/SEND_TASK_STATUS)でCQの状態を確認」について。

登場人物

博識フクロウのフクさん

指差しフクロウ

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

フクさん
フクさん

今回は「CMD13(SEND_STATUS/SEND_TASK_STATUS)でCQの状態を確認」について。
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)で書き込み

CMD13(SEND_STATUS/SEND_TASK_STATUS)でCQの状態を確認

フクさん
フクさん

実は、今回の「CMD13(SEND_STATUS/SEND_TASK_STATUS)でCQの状態を確認」については、以前やってたりするんだよねー。

太郎くん
太郎くん

確かに見覚えがあるな。
ここでやったやつか。

フクさん
フクさん

そうそう。

CMD13(SEND_STATUS/SEND_TASK_STATUS)の復習

太郎くん
太郎くん

CMD13(SEND_STATUS/SEND_TASK_STATUS)のリクエストパラメータはこれ。

Bit position[31:16][15][14:0]
Width(bit)16115
Valuexx
DescriptionRCASend Task Status Registerstuff bits
太郎くん
太郎くん

Task Statusを取得する場合は、
Send Task Status Registerを1にセットすればOK。

太郎くん
太郎くん

レスポンスはR1フォーマットなんだけど、
card statusがtask statusに置き換わるんだよね。

Bit position4746[45:40][39:8][7:1]0
Width(bit)1163271
Value‘0’‘0’xxx‘1’
Descriptionstart bittransmission bitcommand indexcard statusCRC7end bit
太郎くん
太郎くん

そして、task statusの内訳はこれ。

BitsIdentifierValue
31STATUS_TASK_31‘0’:Not Ready、’1’:Ready
30STATUS_TASK_30‘0’:Not Ready、’1’:Ready
0STATUS_TASK_0‘0’:Not Ready、’1’:Ready
太郎くん
太郎くん

ここで、Command Queueの話が出てきて、「なにこれ?」にはなったけど
今見返すと、Command QueueとTask IDに紐づいた情報だったわけか。

フクさん
フクさん

正解!

フクさん
フクさん

予想以上にバッチリで驚いた!

太郎くん
太郎くん

よっしゃ!

task statusの使い方

太郎くん
太郎くん

で、このtask statusは何に使うの?

フクさん
フクさん

登録したTask IDと同一のSTATUS_TASK_XXを参照して、
それがReadyになっていたら、次のCMD46(Q_RD_TASK)かCMD47(Q_WR_TASK)を投げていいよってやつだな。

太郎くん
太郎くん

なるほど。
そこは割とシンプルな考え方だね。

まとめ

フクさん
フクさん

まとめだよ。

 

  • 「CMD13(SEND_STATUS/SEND_TASK_STATUS)でCQの状態を確認」について説明。
  • CMD13は以前やったものなので、復習。
  • task statusを参照して、ReadyになってるTaskは次のCMD46(Q_RD_TASK)かCMD47(Q_WR_TASK)を投げて良い。

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

コメント

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