バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSDモード通信の初期化シーケンスのCMD8(SEND_IF_COND)による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カードのSDモード通信の初期化シーケンス詳細

今回は、「CMD8(SEND_IF_COND)によるSDv2判定及びサポート電圧判定」について。
- CMD8(SEND_IF_COND)によるSDv2判定及びサポート電圧判定。 ← これの前半
- ACMD41(SD_SEND_OP_COND)によるHigh Capacity設定とVoltage Switch可否判定。
- CMD11(VOLTAGE_SWITCH)によるVoltage Switch。
- CMD2(ALL_SEND_CID)によるCIDの取得。
- CMD3(SEND_RELATIVE_ADDR)によるPublished RCAの取得。
- CMD7(SELECT/DESELECT_CARD)によるTransfer State(tran)遷移。

フロー図も載せておく。

CMD8(SEND_IF_COND)のリクエスト

具体的にどんなリクエストになるのかな?

こんな構成になるね。
Bit position | [37:31] | [30:14] | 13 | 12 | [11:8] | [7:0] |
Width(bits) | 6 | 18 | 1 | 1 | 4 | 8 |
Value | ‘001000’ | ‘00000h’ | x | x | x | x |
Description | Command | Reserved | PCIe 1.2V Support | PCIe Availability | Voltage Supplied | Check pattern |
PCIe(PCI express)

PCIeって何?

PCI expressのことだねー。
SDカード仕様のversion8から導入された仕様で、
PCI express4.0準拠の高速通信ができるようになってるらしい。
PCI Express(ピーシーアイエクスプレス)は、2002年にPCI-SIGによって策定された、I/Oシリアルインタフェース、拡張バスの一種である。書籍、文書ではPCIeと表記されることも多い。この表記はPCI-SIG自身もウェブサイト上で使用している。PCI-Xはパラレルインタフェースの別規格である。
Wikipediaより
PCI Express 4.0:1レーンあたりの物理帯域をPCI Express 3.0 (Gen3) の2倍に引き上げて片方向16 GT/sとする。単純に高速化しただけではバスを活かしきれない可能性があったため、パケットヘッダのタグが256個から768個へ拡張され、それらを効率的に扱うためのクレジットのスケーリング機能 (クレジットを1倍/4倍/16倍として扱う機能) が追加された。
Wikipediaより

まぁ今回はPCIeまで話を踏み込むと恐ろしく長くなるんで、そういうものがあるってところだけ覚えておけば良いと思うよ。

うん。そうしとく。
Voltage Supplied

そして次はVoltage Suppliedかな?

これも内訳を書いとく。
現状で有効な値は「0001b」だけなんだけどねー。
Voltage Supplied | Value Definition |
---|---|
0000b | Not Defined |
0001b | 2.7~3.6[V] |
0010b | Reserved |
0100b | Reserved |
1000b | Reserved |
Others | Not Defined |

ほー。
サポート電圧関係のパラメータって感じか。
そういえば、SPIモードの時はCMD58でサポート電圧を見てたね。
その時の話だとSDモードのCMD58は異なる役割って言ってたから、
どうしてるのかと思ったら、CMD8で先に指定する方式なんだ。
SPIモード時のサポート電圧の話
Check pattern

あとはCheck patternか。

これは、セットした値が、そのまま帰ってくるパラメータだね。
だいたいAAhをセットすることが多い。

なんでそんなパラメータが。

まぁSDv1ではサポートしていないコマンドなんで、ハンドシェイクを確実にするための仕掛けなんだろうねー。

まぁ確かに、そっちの方が堅牢にはなるね。

まだ、レスポンスの話が残ってるけど、そこは次回かな。
まとめ

まとめだよ。
- CMD8(SEND_IF_COND)によるSDv2判定及びサポート電圧判定の説明。
- 以下のパラメータが存在。
- PCI express 4.0 Support有無。
- Voltage Supplied。
- Check pattern。
- セットした値がそのままレスポンスに乗ってくる。
バックナンバーはこちら。
コメント