バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSDモード通信の初期化シーケンスの「CMD7(SELECT/DESELECT_CARD)によるTransfer State(tran)遷移」について。
登場人物
博識フクロウのフクさん
イラスト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モード通信の初期化シーケンス詳細
「CMD7(SELECT/DESELECT_CARD)によるTransfer State(tran)遷移」について。
- 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)遷移。 ← これ
全体フロー。
ま、厳密には初期化シーケンスではないのだけど、
読み書き可能な状態にするには必要なシーケンスになるねー。
そういえばそういうこと言ってたね。
CMD7(SELECT/DESELECT_CARD)のリクエスト電文
まずはCMD7(SELECT/DESELECT_CARD)のリクエスト電文かな?
これになる。
Bit position | [31:16] | [15:0] |
Width(bit) | 16 | 16 |
Value | x | x |
Description | RCA | stuff bits |
前回のCMD3(SEND_RELATIVE_ADDR)で取得したRCAを渡せばOKって感じか。
まぁそうなんだけど、
CMD7(SELECT/DESELECT_CARD)は使い方が2種類ある。
SELECT/DESELECT_CARDって名称だから、そんな気はしていた・・・。
SELECT_CARD
まずはSELECT_CARD。
こっちが、Stand-by State(stby)からTransfer State(tran)へ遷移用。
そういう使い方になるの?
RCAパラメータにCMD3(SEND_RELATIVE_ADDR)を入れ込めばOK。
(意外と普通だった)
DESELECT_CARD
次にDESELECT_CARD。
こっちは、逆で、Transfer State(tran)からStand-by State(stby)へ遷移用になる。
パラメータとしてはRCAしかないから、
RCAにCMD3(SEND_RELATIVE_ADDR)で取得したものとは別のものをいれるのかな?
鋭いね。
DESELECT_CARDの場合はRCAを0値にすればOKだ。
おー!
こっちも話がシンプルだった!
CMD7(SELECT/DESELECT_CARD)のレスポンス(R1b)
そして、CMD7(SELECT/DESELECT_CARD)のレスポンスはR1bフォーマットになる。
R1bはR1レスポンスにbusyが付くやつだよね。
以前ここでやった。
そうそう。
しかし、なんでbusy付きなんだろ?
どうも読み書き可能状態では、高速動作するためにSDカード内部のいろいろなブロックが駆動状態になるみたいなんだよね。
それの準備が終わるまではbusyになるようだ。
ほー。
よって、Stand-by State(stby)とTransfer State(tran)では
Stand-by State(stby)の方が消費電流が少ない!
おー!
かもしれない。
おーい!
ここら辺はSDカード内部設計依存だからねー。
でも、頻繁に書かない運用をするならば、可能な限りStand-by State(stby)を維持して、
いろいろ読み書きするタイミングでTransfer State(tran)へ遷移するような設計にしておいた方が無難だろう。
まぁ消費電流は後々問題になり易いから対策打てるものを打てた方が良いよねー。
といわけで、SDカードの初期化シーケンスの話は終わり。
まとめ
まとめだよ。
- 「CMD7(SELECT/DESELECT_CARD)によるTransfer State(tran)遷移」について説明。
- CMD7にはSELECT_CARDとDESELECT_CARDがある。
- Stand-by State(stby)とTransfer State(tran)の遷移に使う。
- stbyの方が省電力の可能性あり。
バックナンバーはこちら。
コメント