バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの話。
登場人物
博識フクロウのフクさん
イラスト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のステートマシン
今回から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)で書き込み
なんとなくわかるようなわからんような・・・。
普通の読み書きとどう違うの?
CMD44(Q_TASK_INFO_A)、CMD45(Q_TASK_INFO_B)で処理を予約できるんだけど、
CQの数だけ先行して予約ができる。
その後はTask IDっての識別するのだけど、
CMD46(Q_RD_TASK)、CMD47(Q_WR_TASK)にTask IDを指定して実際の読み書きをする感じだ。
ほー。
ということは、予約をできるだけして、
先にSDカード側でいろいろ準備しておいてもらって、
実際の読み書きの段階では高速に応答できるって感じか。
そうそう。
その認識でOKだ。
CMD49(WRITE_EXTR_SINGLE)でEnable CQ=1にする
最初の「CMD49(WRITE_EXTR_SINGLE)でEnable CQ=1にする」って話って、
前回のPerformance Enhancement RegisterのEnable CQを書き換える話かな?
そうだね。
Enable CQを1にすると、CQ ModeのステートマシンはCQ Tranという状態へ遷移する。
うーん、これだけでCQ Modeが使えるのかと思ってたけど、
まだまだ先があったのか・・・。
(まぁ今回のフローでは語ってない話もあるんだけど・・・これは今は言わない方が良いな・・・。)
(今回のフローの中で出てきてないコマンドがステートマシン図にあるけど・・・これは今は聞かない方が良いな・・・。)
まとめ
まとめだよ。
- CQ Modeのステートマシンを見せた。
- 基本フローも書き出し。
- CQ Modeは読み書き処理の予約ができ、その予約はTask IDで識別される。
- Task IDをもって、実際の読み書き結果を取得する。
- 「CMD49(WRITE_EXTR_SINGLE)でEnable CQ=1にする」は前回出た話。
バックナンバーはこちら。
コメント