バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSDモード通信の初期化シーケンスのCMD11(VOLTAGE_SWITCH)によるVoltage Switchの手順詳細について。
登場人物
博識フクロウのフクさん
イラスト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モード通信の初期化シーケンス詳細
「CMD11(VOLTAGE_SWITCH)によるVoltage Switch」の手順詳細の話になる。
- CMD8(SEND_IF_COND)によるSDv2判定及びサポート電圧判定。
- ACMD41(SD_SEND_OP_COND)によるHigh Capacity設定とVoltage Switch可否判定。
- CMD11(VOLTAGE_SWITCH)によるVoltage Switch。 ← これ2回目/全4回
- CMD2(ALL_SEND_CID)によるCIDの取得。
- CMD3(SEND_RELATIVE_ADDR)によるPublished RCAの取得。
- CMD7(SELECT/DESELECT_CARD)によるTransfer State(tran)遷移。
全体のフロー図はこれ。
VOLTAGE_SWITCHの手順はこれ。
今回は(1)から(3)までだね。
(1) ホストからのCMD11発行
(2) カードからのR1レスポンス
(3) カードがCMDとDAT[3:0]をLowにする
(4) ホストがSDCLKを停止
(5) 5ms以上wait
(6) ホストが1.8VでSDCLK送出
(7) SDCLK送出から1ms以内にカードが1.8VでCMDラインをHigh
(8) ホスト側でCMDラインのプルアップチェック
(9) カード側でDAT[3:0]のいずれかのラインをHigh
(1)ホストからのCMD11発行
最初の「ホストからのCMD11発行」はそのままの話なんだろうけど、
なんかパラメータとかはあるの?
CMD11はパラメータは無い。
だからそのまま投げればOK。
以外!
ちょっと拍子抜けだ!
(2)カードからのR1レスポンス
これもまんまかな?
R1レスポンスはこれだったね。
Bit position | 47 | 46 | [45:40] | [39:8] | [7:1] | 0 |
Width(bit) | 1 | 1 | 6 | 32 | 7 | 1 |
Value | ‘0’ | ‘0’ | x | x | x | ‘1’ |
Description | start bit | transmission bit | command index | card status | CRC7 | end bit |
そうそう。
確かここでやった記憶がある。
(3)カードがCMDとDAT[3:0]をLowにする
これはSDカード側がR1を投げた直後にCMDとDAT[3:0]の信号ラインをLowにするってことだよね?
そうそう。
なのでHost側はHZにしてる必要があるが、
元々R1受信待ちで入力になってるはずだから、問題は出ない。
出力が衝突すると故障原因になるけど、
そこの問題は無さそうだね。
まとめ
まとめだよ。
- VOLTAGE_SWITCHはCMD11(VOLTAGE_SWITCH)の発行が起点となる。
- CMD11にはパラメータはない。
- SDカードはR1レスポンスを返した直後にCMDとDATのラインをLowにする。
- ホスト側は入力モードになっているので出力が衝突することは無い。
バックナンバーはこちら。
コメント