バックナンバーはこちら。
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の基本的なフローは以下。
- 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) | 11 | 5 | 16 |
Value | 0 | x | 0 |
Description | Reserved | Task ID | Reserved |

ほう。
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) | 11 | 5 | 16 |
Value | 0 | x | 0 |
Description | Reserved | Task ID | Reserved |

まぁ必要な情報は事前に渡してるから、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のみ。
- Task IDの概念がややこしいので整理が必要。
バックナンバーはこちら。
コメント