バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSDモード通信の初期化シーケンスの「CMD3(SEND_RELATIVE_ADDR)によるPublished RCAの取得」について。
レスポンスパラメータのうちのcard status bitsについて。
登場人物
博識フクロウのフクさん
イラスト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モード通信の初期化シーケンス詳細
「CMD3(SEND_RELATIVE_ADDR)によるPublished RCAの取得」について。
card status bitsの説明が終わってないのでそれをやる。
- 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の取得。 ← これ2回目/全2回
- CMD7(SELECT/DESELECT_CARD)によるTransfer State(tran)遷移。
全体フロー。
CMD3(SEND_RELATIVE_ADDR)のレスポンスのR6フォーマット。
Bit position | [31:16] | [15:0] |
Width(bit) | 16 | 16 |
Value | x | x |
Description | New published RCA | card status bitsのbit23,22,19,12:0 |
card status bits
card statusって、以前どっかで聞いたような?
うん。
R1レスポンスの時に出て来たね。
あ、じゃあ、それと一緒なのか。
ちょっと違う。
え゛
表の中にも書いてるんだけど、card statusの一部が載ってるだけだね。
bit23,22,19,12:0の範囲だけ。
card statusからcard status bitsを抜き出す。
確かcard statusはこんな感じだったと思う。
Bits | Identifier |
---|---|
31 | OUT_OF_RANGE |
30 | ADDRESS_ERROR |
29 | BLOCK_LEN_ERROR |
28 | ERASE_SEQ_ERROR |
27 | ERASE_PARAM |
26 | WP_VIOLATION |
25 | CARD_IS_LOCKED |
24 | LOCK_UNLOCK_FAILED |
23 | COM_CRC_ERROR |
22 | ILLEGAL_COMMAND |
21 | CARD_ECC_FAILED |
20 | CC_ERROR |
19 | ERROR |
18 | reserved |
17 | reserved |
16 | CSD_OVERWRITE |
15 | WP_ERASE_SKIP |
14 | CARD_ECC_DISABLED |
13 | ERASE_RESET |
[12:9] | CURRENT_STATE |
8 | READY_FOR_DATA |
7 | reserved |
6 | FX_EVENT |
5 | APP_CMD |
4 | reserved |
3 | AKE_SEQ_ERROR |
[2:0] | reserved |
そこから、bit23,22,19,12:0を抜き出すと・・・。
Bits | Identifier | 備考 |
---|---|---|
15 | COM_CRC_ERROR | (bit23) |
14 | ILLEGAL_COMMAND | (bit22) |
13 | ERROR | (bit19) |
[12:9] | CURRENT_STATE | – |
8 | READY_FOR_DATA | – |
7 | reserved | – |
6 | FX_EVENT | – |
5 | APP_CMD | – |
4 | reserved | – |
3 | AKE_SEQ_ERROR | – |
[2:0] | reserved | – |
こんな感じで16bitに圧縮される感じか。
正解!
card status bitsに圧縮されている理由
でも、なんで16bitに圧縮しちゃったんだろうね?
まぁ使わないからってのが理由だと思うよ。
RCAを取得するコマンドに対するレスポスなんで、
OUT_OF_RANGE、ADDRESS_ERROR、BLOCK_LEN_ERROR・・・
と発生しようがないエラーが削られてるだけだね。
あ、確かに言われてみればそうか。
じゃー納得だ。
というわけで、「CMD3(SEND_RELATIVE_ADDR)によるPublished RCAの取得」の話は終了~。
まとめ
まとめだよ。
- CMD3(SEND_RELATIVE_ADDR)によるPublished RCAの取得の説明続き。
- card status bitsはcard statusの一部を切り出したもの。
- CMD3(SEND_RELATIVE_ADDR)として、card status内の無関係なエラーパターンを削除したものがcard status bitsになっている。
バックナンバーはこちら。
コメント