バックナンバーはこちら。
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を使用する際の基本的なフロー。
- CMD49(WRITE_EXTR_SINGLE)でEnable CQ=1にする。
- CMD44(Q_TASK_INFO_A)で読み込みor書き込み、優先度、制御Block数を設定 ← これの第3回/全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 position | 31 | 30 | [29:24] | 23 | [22:21] | [20:16] | [15:0] |
bit width | 1 | 1 | 6 | 1 | 2 | 5 | 16 |
value | 0 | x | xxxxxx | x | 00b | xxxxx | xxxxh |
Description | Reserved | Direction | Extended Address | Priority | Reserved | Task ID | Number of Blocks |
CMD44(Q_TASK_INFO_A)のリクエストパラメータのNumber of Blocks
CMD44(Q_TASK_INFO_A)の最後のリクエストパラメータのNumber of Blocksだね。
これは、シンプルに読み出し、または書き込みのBlock数を指定するってことかな?
正解!
ということで、CMD44(Q_TASK_INFO_A)は終了だね!
まぁ、もうちょっとあるかな。
(まじかー)
CMD44(Q_TASK_INFO_A)のエラーハンドリング
CMD44(Q_TASK_INFO_A)のエラーハンドリングについて触れておこう。
まずCMD44(Q_TASK_INFO_A)がエラーになるパターンは以下3種。
- Task IDが既に存在する
- Task IDがサポートされているQueue Depthより大きい。
- Block数が0
これに該当するとR1レスポンスがIllegal Commandとしてエラー通知されるって流れになる。
パラメータエラーだから、まぁ普通にそうなんじゃないの?
って気はするけど・・・。
どこら辺が注意点なんだ?
ちょっと難しいのが、Commandとしては正しいんだけど、Illegal Command扱いってところだねー。
SDカード側のリソースの都合のエラーなんで。
これを知らずにいると、Commandの電文が間違ってるのか?
って思いこんでドツボにハマることがある。
あ、確かにそれはあり得そう。
Illegal Commandエラーとか返ってきたら、電文がおかしいって思うよね。
というわけで注意点ということで今回説明したってところだ。
以上で、CMD44(Q_TASK_INFO_A)の話は終わりかな。
まぁそうだね。
まとめ
まとめだよ。
- CMD44(Q_TASK_INFO_A)のリクエストパラメータのNumber of Blocksについて説明。
- CMD44(Q_TASK_INFO_A)のエラーハンドリングについて説明。
- SD側のリソース都合のエラーもIllegal Commandとして返ってくる点に注意が必要。
バックナンバーはこちら。
コメント