バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSPIモード通信の初期化シーケンスの中のSDv2の容量判定について。
登場人物
博識フクロウのフクさん
イラスト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モード通信の初期化シーケンス詳細
じゃ、今回はSDv2の容量判定のところだね。
- 初期状態に戻す
- SDv2以降判定
- 駆動電圧判定
- 読み書き可能状態へ
- SDv2の容量判定 ← これ
フロー図も載せておく。
SDカードのSPIモード通信の初期化シーケンスSDv2の容量判定
これもやってること自体はシンプルでCMD58(READ OCR)をなてげるだけなんだよねー。
あれ?
CMD58(READ OCR)ってSDv2のルートの先頭で一回やってるよね?
またやる意味ってあるの?
まぁ意味はないかもしれないのだけど、
仕様上はCMD58(READ OCR)をidle stateを抜けた後に発行しないといけないことになってる。
詳細はわからないが、idle stateを抜けないと、CCSのbitが有効にならないのかもねー。
CCS(Card Capacity Status)
で、CCSビットって何だっけ?
一応、一回OCRの内訳の時に出てきてはいるね。
説明はしてないけど。
OCRのbitアサインを再掲しておこう。
bit Position | Definition |
---|---|
[0-14] | reserved |
15 | 2.7~2.8[V] |
16 | 2.8~2.9[V] |
17 | 2.9~3.0[V] |
18 | 3.0~3.1[V] |
19 | 3.1~3.2[V] |
20 | 3.2~3.3[V] |
21 | 3.3~3.4[V] |
22 | 3.4~3.5[V] |
23 | 3.5~3.6[V] |
24 | Switching to 1.8V Accepted |
[25-26] | reserved |
27 | Over 2TB support Status |
28 | reserved |
29 | UHS-Ⅱ Card Status |
30 | Card Capacity Status(CCS) |
31 | Card power up status bit(busy) |
あー、ここのbit30がそうなのね。
これが0だとSDSC(Standerd Capacity)で
これが1だとSDHC(High Capacity)かSDXC(eXtended Capacity)にってことになるのね。
そうそう。
CMD58を2回投げるのは良く分からないけど、
手順として必要ならここで判定すべきってことなんだろうね。
まぁそこらへんの経緯はさすがにわからないので仕様書に合わせるしかないね。
次からの話
これで、SPIモードに於いて、SDカードの読み書きができる準備が整ったってことになる。
じゃー、次は読み書きの手順?
折角だから、SDモードの方の初期化シーケンスもやっちゃうかー。
って思ってる。
そうだねー。
知っておいた方が良い気がするよー。
まとめ
まとめだよ。
- SDカードのSPIモード通信の初期化シーケンスの中のSDv2の容量判定について説明。
- CMD58(READ OCR)を投げてCCS(Card Capacity Status)ビットを確認する。
- CCSが0ならSDSC、1ならSDHC/SDXC。
- 結果的にCMD58(READ OCR)を2回発行するが、仕様書上はmust要件となってる。
バックナンバーはこちら。
コメント