バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSDモード通信の初期化シーケンスのACMD41(SD_SEND_OP_COND)によるHigh Capacity設定とVoltage Switch可否判定について。
今回はACMD41(SD_SEND_OP_COND)のパラメータによる挙動に違い。
登場人物
博識フクロウのフクさん
イラスト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
SDカードのSDモード通信の初期化シーケンス詳細
今回は、「ACMD41(SD_SEND_OP_COND)によるHigh Capacity設定とVoltage Switch可否判定」の話の中の、
パラメータによる挙動の違いについて説明する。
- CMD8(SEND_IF_COND)によるSDv2判定及びサポート電圧判定。
- ACMD41(SD_SEND_OP_COND)によるHigh Capacity設定とVoltage Switch可否判定。 ← これの4回目/全4回
- CMD11(VOLTAGE_SWITCH)によるVoltage Switch。
- CMD2(ALL_SEND_CID)によるCIDの取得。
- CMD3(SEND_RELATIVE_ADDR)によるPublished RCAの取得。
- CMD7(SELECT/DESELECT_CARD)によるTransfer State(tran)遷移。
そしてフロー図。
そして、ACMD14(SD_SEND_OP_COND)のリクエストとレスポンスの電文。
ACMD41(SD_SEND_OP_COND)リクエスト電文
bit position | 31 | 30 | 29 | 28 | [27:25] | 24 | [23:8] | [7:0] |
bit width | 1 | 1 | 1 | 1 | 3 | 1 | 16 | 8 |
value | 0 | x | 0 | x | 000b | x | xxxxh | 00000000b |
Description | Busy | HCS | Reserved | XPC | Reserved | S18R | OCR | Reserved |
ACMD41(SD_SEND_OP_COND)レスポンス電文(R3レスポンス)
bit position | 31 | 30 | 29 | [28:25] | 24 | [23:8] | [7:0] |
bit width | 1 | 1 | 1 | 4 | 1 | 16 | 8 |
value | x | x | x | 0000b | x | xxxxh | 00000000b |
Description | Busy | CCS | UHS-II | Reserved | S18A | OCR | Reserved |
ACMD41(SD_SEND_OP_COND)の挙動の種類
で、
ACMD41(SD_SEND_OP_COND)はリクエストパラメータによって挙動が変わるって前回聞いたけど、
具体的どう変わるの?
挙動としては以下2パターン。
- inquiry ACMD41
- first ACMD41
firstは、「最初」とかの意味だけど、inquiryってなんだ?
「問い合わせ」とか「照会」って意味になるね。
まぁそれぞれ説明していこう。
inquiry ACMD41
inquiry ACMD41は一言で言うと、「OCR取得用AMCD41」ってことになる。
ほう。
inquiry ACMD41になる条件は、
電圧窓フィールド(bit 23-0)を0にすること。
パラメータとしてはOCRとReservedのところを0にするってことだね。
この場合、他のフィールド(bit 31-24)のパラメータは無視される。
なんとなくわかったぞ。
そのリクエストをするとOCRがレスポンスとして取得できるわけだ。
大正解!
first ACMD41
first ACMD41が今回使用するAMCD41で、
一言で言うと「初期化用AMCD41」。
SPIモードでの役割と一緒なのがこっちか。
そうそう。
first ACMD41になる条件は、
電圧窓フィールド(ビット 23-0)が非0になっていること。
つまり、OCRのところに0以外の値が入っていればOK。
この場合だと、bit 31-24のパラメータが有効になって、初期化処理として機能する。
実際は、初期化時のACMD41は複数回投げることになるんだけど、
その場合、最初にOCRに入れた値を変えずに投げる必要がある。
OCRに入れた値を変えるとどうなるの?
仕様書上の明記は無いが、恐らく、再度first ACMD41が投げられたと認識して
ACMD41に初期化処理のやり直しになるんじゃないかな。
ほー。
じゃー、最初にOCRに入れた値を記憶しておく必要があるってことだねー。
そうそう。
そして、そのうちBusyビットが0に落ちるんで、
そうなったら初期化終了。
って感じだ。
SPIモードの時はほとんど悩まなかったAMC41がSDモードではこんなややこしいことになっていたとは・・・。
かなり驚きだ。
まぁSDカードの仕様が増えて、その増えた分をACMD41が吸収してるのかもねー。
とありえずACMD41の話は終了ー。
まとめ
まとめだよ。
- ACMD41(SD_SEND_OP_COND)のパラメータによる挙動に違いについて説明。
- inquiry ACMD41。
- OCR取得用ACMD41。
- OCRパラメータを0にすることでこれになる。
- first ACMD41。
- 初期化用ACMD41。
- OCRパラメータを非0にすることでこれになる。
- inquiry ACMD41。
バックナンバーはこちら。
コメント