バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの読み書き以外のコマンドたちの話。
今回はCMD43(Q_MANAGEMENT)について。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
CQ Modeのステートマシンと読み書き以外のコマンド
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
今回はCMD43(Q_MANAGEMENT)についての話。
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](https://www.simulationroom999.com/blog/wp-content/uploads/2021/03/02_CQ-ModeのステートマシンState-Diagram-in-CQ-Mode-1024x707.png)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そして、CQ Modeの読み書き以外のコマンドたち。
- CMD19(SEND_TUNING_BLOCK)
- CMD32(ERASE_WR_BLK_START)
- CMD33(ERASE_WR_BLK_END)
- CMD38(ERASE)
- CMD43(Q_MANAGEMENT) ← これ
CMD43(Q_MANAGEMENT)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
残りはCMD43(Q_MANAGEMENT)だけど。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
名前的には何かを管理するやつ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
管理と言えば管理だけど、
やれることはCommandQueueに設定したTaskを中止するだけのコマンドだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
あーそういうやつか。
CMD43(Q_MANAGEMENT)のリクエストパラメータ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
CMD43(Q_MANAGEMENT)のリクエストパラメータは以下になる。
Bit position | [31:21] | [20:16] | [15:4] | [3:0] |
Width(bit) | 11 | 5 | 12 | 4 |
Value | 0 | x | 0 | x |
Description | Reserved | Task ID | Reserved | Operation Code |
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そしてOperation Codeの内訳は以下だ。
Operation Code | Description |
---|---|
0000b | Reserved |
0001b | Abort Entire Queue |
0010b | Abort Task ID |
Others | Reserved |
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
ようは、全体を停止するかTask IDを指定して該当Task IDだけのCommandQueueを停止させるかってことか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
その通り。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
注意点としては、
Sequential CQ mode時はTask ID指定の停止指示は禁止されているってところだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ん?なんで?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
Sequential CQ modeは順番に処理していくmodeなんで、特定のTaskをいきなり停止されても困るんだろうね。
Task ID指定の停止指示をしてしまった場合の動作は未定義で何かが保証される動作にならないとされてる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
なるほど!
確かに言われてみればそうだね。
CMD43(Q_MANAGEMENT)のレスポンス
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
停止処理関係だから、レスポンスフォーマットはたぶんR1bかな。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
正解。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ちなみにCommandQueueにTask IDが登録されなくても特にエラーは返さない。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
逆にエラーを返すパターンがあるのか知りたいな。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁOperation Codeが間違ってるとかだとエラーかな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
そりゃそうだろう。
制限事項
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
普通やらないと思うけど、仕様書上で明記されてたんで制限事項を説明しておこう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
停止処理だから、終わるまで何もするなって話かな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
その通り。
R1bでbusy待ちしてるから、普通はそんなことしないんだけど、
CMD44(Q_TASK_INFO_A)で新たなタスクを追加しないよう記載されてる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
確かに普通はやらなそうだなー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
というわけで、CMD43(Q_MANAGEMENT)の話は終了
今後の方針
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
もしかして、一通り終わった・・・のか??
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
うん。
SDカード関連の話は終わった。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者04.png)
よっしゃー!完了だー!!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/びっくりフクロウ.png)
いや、SDカード関連の話が終わっただけで、
FileSystemとかの話は全然してないよ!!
発端を思い出して!!
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
あ゛
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」09アップ.png)
まじかーーー!!!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁFileSystemも結構なボリュームありそうなんだよねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者04.png)
\(^o^)/オワタ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/びっくりフクロウ.png)
だから終わってないってば!
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- CMD43(Q_MANAGEMENT)について説明。
- CommandQueueに登録されてるTaskを全部かTask ID別に停止できる。
- Sequential CQ mode時にTask ID単位の停止は禁止されている。
- 停止した際の挙動は未規定の未保証。
- SDカード関連の話はこれで完了。
バックナンバーはこちら。
コメント