バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの話。
CMD44(Q_TASK_INFO_A)とCMD45(Q_TASK_INFO_B)の制約について。
登場人物
博識フクロウのフクさん
イラスト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)とCMD45(Q_TASK_INFO_B)の制約」について。
CQ Modeのステートマシン図を貼っておく。
CQ Modeを使用する際の基本的なフロー。
- CMD49(WRITE_EXTR_SINGLE)でEnable CQ=1にする。
- CMD44(Q_TASK_INFO_A)で読み込みor書き込み、優先度、制御Block数を設定
- CMD45(Q_TASK_INFO_B)で開始Blockアドレスを指定 ← これの第2回/全2回
- 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)とCMD45(Q_TASK_INFO_B)の制約
前回に続いてCMD44(Q_TASK_INFO_A)とCMD45(Q_TASK_INFO_B)についてだけど。
なんとなく見えてきた。
もしかして、CMD44(Q_TASK_INFO_A)とCMD45(Q_TASK_INFO_B)はセットになっていて、
CMD44(Q_TASK_INFO_A)を送った後に必ずCMD45(Q_TASK_INFO_B)を送るって制約があるのか。
正解!
CMD44(Q_TASK_INFO_A)を送った後はCMD45(Q_TASK_INFO_B)を必ず送る必要があって、
2つのコマンドが揃って初めて該当Task IDがタスクとして登録される。
CMD44(Q_TASK_INFO_A)とCMD45(Q_TASK_INFO_B)の連携仕様
この2つのコマンドの関係性は連携仕様を見ると良く分かる。
ほう。
以下がおおよその連携仕様だ。
- 有効なCMD44(Q_TASK_INFO_A)の後に、CMD45(Q_TASK_INFO_B)以外のコマンドの場合、「Illegal Command」
- この場合、CMD44(Q_TASK_INFO_A)は無効となる。
- これはCMD13(SEND_STATUS/SEND_TASK_STATUS)でも適用される仕様。
- 有効なCMD44(Q_TASK_INFO_A)の後に、有効なCMD45(Q_TASK_INFO_B)が続く場合は、タスクが割り当てられる。
- 複数のCMD44(Q_TASK_INFO_A)が発行された場合は、最後のCMD44(Q_TASK_INFO_A)が有効となる。
なるほど!
これはCMD44(Q_TASK_INFO_A)とCMD45(Q_TASK_INFO_B)は必ず並んでないといけないってことか。
そういうことだねー。
しかし、なんとも分かりにくい仕様だねー。
私も同じ感想だね。
まぁコマンドのパラメータが32bitの制約があるからね。
やむを得ない仕様なのかもしれない。
知らないと「なんだこれ?」になりそうだよ。
まとめ
まとめだよ。
- CMD44(Q_TASK_INFO_A)とCMD45(Q_TASK_INFO_B)の制約について説明。
- 2つのコマンドは必ず連続している必要がある。
- CMD44の後にCMD45以外だとエラー。
- CMD44の後にCMD45で初めてタスク登録完了。
- 複数のCMD44が来た場合は、最後のCMD44が有効。
バックナンバーはこちら。
コメント