バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSPIモード通信の初期化シーケンスについて。
SDカードは電源投入直後にすぐに読み書きができるわけではない。
特定の初期化シーケンスが必要となる。
この初期化シーケンスの概要をざっくりと説明する。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
SDカードの読み書きはすぐできるのか?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
とりあえず、SDカードの読み書きの雰囲気はわかったから、あとはやってみればOKって感じかなー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
ところがそうでもないんだなー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
え?なんかあるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
SDカードの初期化シーケンスってのを通す必要がある。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
なにそれ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
SDカードは初期状態では、読み書きができない。
適切なコマンドを発行して、読み書き可能な状態へ遷移させてあげる必要がある。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
加えて、SDカードもSDv1、SDv2とversoinがあって、
さらにSDv2もSDSC、SDHC、SDXCと容量が異なる。
ここら辺の判定も必要になるねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
なんだかめんどくさそうだな。
SDカードのSPIモード通信の初期化シーケンス
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
とりあえず、SPIモードに於いての初期化シーケンスのフローを書いてみた。
![SDカードSPIモードに於いての初期化シーケンスのフロー](https://www.simulationroom999.com/blog/wp-content/uploads/2021/01/02_SDカードSPIモードに於いての初期化シーケンスのフロー-1024x976.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
大雑把に2つのシーケンスに分岐するのかな?
SDv2か否かを判定して、
SDv1関係の判定処理ルートと
SDv2関係の判定処理ルートって感じに見える。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうだね。
おおよそその認識であってるよ。
初期化シーケンスで分かるSDカードの種類
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ところで、SDv2側のルートのSDSCとSDv1ルートのSDはなんか違うの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁものとしては一緒だね。
作られた時期が違うというか、
対応しているコマンドが違うって感じかなー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
つまり、
SDv1はSDカード確定で。
SDv2はSDカードかSDHC/SDXCのどれか。
SDv2の最後のCCSってやつの判定で初めてSDSCかが分かる。
ってことか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
ま、SDv1の時にはなかった仕様だからねー。
作らた時期の話、容量の話の2つが判断のポイントとなるね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
まぁ仕様自体がアップデートされてるが故に発生する話なんだろね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうそう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- SDカードはいきなり読み書きはできない。
- 初期化シーケンスを通してSDカード状態を読み書き可能状態へ遷移させる。
- 初期化シーケンスはSDv1、SDv2のルートに分かれる。
- SDv1とSDv2 SDSCはモノとしては一緒。
- SDSCかSDHC/SDXCはSDv2の最後のCCSの判定で分かる。
バックナンバーはこちら。
コメント