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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/

はじめに

SDカードのSPIモード通信の初期化シーケンス詳細について。

SDカードに通電しただけでは読み書きはできない。
初期化シーケンスを必ず通す必要がある。


初期状態遷移、SDカードVersionの判定、電圧判定、容量判定。
などが代表的な手順となる。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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カードのSPIモード通信の初期化シーケンス詳細

フクさん
フクさん

前回は、初期化フローの図を見せて終わりにしたんで、
もうちょい詳細に説明しようか。

太郎くん
太郎くん

そうしてもらえると助かるよー。

フクさん
フクさん

一応、前回の図を載せとくか。

SDカードSPIモードに於いての初期化シーケンスのフロー
フクさん
フクさん

とりあえず、以下の流れで説明になると思う。

  • 初期状態に戻す
  • SDv2以降判定
  • 駆動電圧判定
  • 読み書き可能状態へ
  • SDv2の容量判定

初期状態に戻す

フクさん
フクさん

まず、強制的にSDカードの内部状態を初期状態あるidle状態に戻すコマンドがある。

太郎くん
太郎くん

フローの中のCOMD0ってやつ?

フクさん
フクさん

そうそう。
CMD0(GO_IDLE)になるんだけど、
大体SDカード側がハングった場合に発行することが多いねー。

太郎くん
太郎くん

SDカードってハングるの?

フクさん
フクさん

まぁ内部で結構複雑なNAND-FlashROMの管理をしてるんでね。
状況によってはハングすることもある。
その場合は、一旦idle状態に戻して、再度初期化シーケンスを通すことで復活することが多い。

太郎くん
太郎くん

ということは、初期化シーケンスは電源ON直後に一回やればOKって感じじゃないのか。

フクさん
フクさん

そうだねー。

SDv2以降判定

フクさん
フクさん

次にSDv2以降判定かどうかの判定。

太郎くん
太郎くん

CMD8(SEND_IF_COND)ってので判定してるみたいだね。

フクさん
フクさん

CMD8(SEND_IF_COND)はSDv1にはないコマンドで、
SDv1の場合、Illegal commandのエラーになる
Illegal command errorは
R1レスポンスの中にあるエラービットとして規定されてる。

SDカードSPIモードR1フォーマット
太郎くん
太郎くん

なるほど。
わざとSDv1でエラーになるコマンドを発行して判断するわけか。

フクさん
フクさん

若干、荒業にも見えるけど、
それなりの歴史がある仕様なんでね。
こういうのも仕方ないかもね。

まとめ

フクさん
フクさん

まとめだよ。

  • SDカードのSPIモード通信の初期化シーケンス詳細を開始。
    • 以下の順番で説明予定。
      • 初期状態に戻す。
      • SDv2以降判定。
      • 駆動電圧判定。
      • 読み書き可能状態へ。
      • SDv2の容量判定。
  • 初期状態に戻すのはCMD0(GO_IDLE)。
  • SDv2を判定するのはCMD8(SEND_IF_COND)でエラーになるかどうか。

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

コメント

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