【FileSystem】車載外部ストレージ その29【SD初期化⑫】

【FileSystem】車載外部ストレージ その29【SD初期化⑫】 車載外部ストレージ

バックナンバーはこちら。
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)遷移。
フクさん
フクさん

そしてフロー図。

SDカードのSDモード通信の初期化シーケンスのフロー図
フクさん
フクさん

そして、ACMD14(SD_SEND_OP_COND)のリクエストとレスポンスの電文。

ACMD41(SD_SEND_OP_COND)リクエスト電文

bit position31302928[27:25]24[23:8][7:0]
bit width111131168
value0x0x000bxxxxxh00000000b
DescriptionBusyHCSReservedXPCReservedS18ROCRReserved

ACMD41(SD_SEND_OP_COND)レスポンス電文(R3レスポンス)

bit position313029[28:25]24[23:8][7:0]
bit width11141168
valuexxx0000bxxxxxh00000000b
DescriptionBusyCCSUHS-IIReservedS18AOCRReserved

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にすることでこれになる。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました