バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSPIモード通信の初期化シーケンスについて。
SDカードは電源投入直後にすぐに読み書きができるわけではない。
特定の初期化シーケンスが必要となる。
この初期化シーケンスの概要をざっくりと説明する。
登場人物
博識フクロウのフクさん
イラスト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カードの読み書きの雰囲気はわかったから、あとはやってみればOKって感じかなー。
ところがそうでもないんだなー。
え?なんかあるの?
SDカードの初期化シーケンスってのを通す必要がある。
なにそれ?
SDカードは初期状態では、読み書きができない。
適切なコマンドを発行して、読み書き可能な状態へ遷移させてあげる必要がある。
加えて、SDカードもSDv1、SDv2とversoinがあって、
さらにSDv2もSDSC、SDHC、SDXCと容量が異なる。
ここら辺の判定も必要になるねー。
なんだかめんどくさそうだな。
SDカードのSPIモード通信の初期化シーケンス
とりあえず、SPIモードに於いての初期化シーケンスのフローを書いてみた。
大雑把に2つのシーケンスに分岐するのかな?
SDv2か否かを判定して、
SDv1関係の判定処理ルートと
SDv2関係の判定処理ルートって感じに見える。
そうだね。
おおよそその認識であってるよ。
初期化シーケンスで分かるSDカードの種類
ところで、SDv2側のルートのSDSCとSDv1ルートのSDはなんか違うの?
まぁものとしては一緒だね。
作られた時期が違うというか、
対応しているコマンドが違うって感じかなー。
つまり、
SDv1はSDカード確定で。
SDv2はSDカードかSDHC/SDXCのどれか。
SDv2の最後のCCSってやつの判定で初めてSDSCかが分かる。
ってことか。
ま、SDv1の時にはなかった仕様だからねー。
作らた時期の話、容量の話の2つが判断のポイントとなるね。
まぁ仕様自体がアップデートされてるが故に発生する話なんだろね。
そうそう。
まとめ
まとめだよ。
- SDカードはいきなり読み書きはできない。
- 初期化シーケンスを通してSDカード状態を読み書き可能状態へ遷移させる。
- 初期化シーケンスはSDv1、SDv2のルートに分かれる。
- SDv1とSDv2 SDSCはモノとしては一緒。
- SDSCかSDHC/SDXCはSDv2の最後のCCSの判定で分かる。
バックナンバーはこちら。
コメント