バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの話。
CMD44(Q_TASK_INFO_A)で読み込みor書き込み、優先度、制御Block数を設定について。
登場人物
博識フクロウのフクさん

イラスト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数を設定 ← これの第1回/全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)で読み込みor書き込み、優先度、制御Block数を設定

まずは、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 |

- Direction
- Extended Address
- Priority
- Task ID
- Number of Blocks
ってパラメータがあるのはわかったけど、
それぞれの意味と言うか、どういう目的に設定されるのかな?

一個ずつ説明していこう。
CMD44(Q_TASK_INFO_A)のリクエストパラメータのDirection

まずはDirection。

1bitパラメータだから、方向の切り替えってことなんだろうけど、
なんの方向?

「読む」か「書く」かだね。
1だったらRead、
0だったらWrite。

あー!なるほど。
それでDirectionこと方向っていってるのか。
CMD44(Q_TASK_INFO_A)のリクエストパラメータのExtended Address

次はExtended Addressだけど、
直訳すると拡張アドレスってことになるのかな?

そうだね。
処理を開始するBlockアドレス指定はCMD45(Q_TASK_INFO_B)で指定するんだけど、
そこで指定できるのは32bit長。
これを超える場合はこのExtended Addressで上位アドレスを指定することになる。

ここで行ってるアドレスって、byte単位じゃなくてBlock単位だよね?

SDカードの場合、1blockが512byteだから、
512×0xffffffff=2199023255040
ということで32bitあれば2TBbyteの範囲まで指定できるわけだけど、
それを超えるってことがあり得るってこと?

そうだね。
SDHCが最大32Gbyte。
SDXCが最大2Tbyte。
SDUCが最大128Tbyte。

あー!
SDUCが2Tbyteを超えるのか?!
その時にExtended Addressが必要になるってことか?!

そういうことだねー。
まとめ

まとめだよ。
- CMD44(Q_TASK_INFO_A)のリクエストパラメータ説明。
- リクエストパラメータのDirectionは「読む」か「書く」かの指定。
- リクエストパラメータのExtended AddressはSDUCのように2TByteを超える場合に使用。
- SDUCの仕様上の最大容量は128Tbyte。
バックナンバーはこちら。
コメント