バックナンバーはこちら。
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になっている。
バックナンバーはこちら。




コメント