バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSDモード通信に於いてのレスポンス(R1とR1b)について。
登場人物
博識フクロウのフクさん

イラスト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モード通信に於いてのレスポンス(R1とR1b)について

本当は前回やる予定だった、SDモードのR1とR1bについてやる。

前回はR6の話からRCAの話に飛んじゃったからねー。

まぁSPIモードとの差分としては重要な話だったんで、良しとしよう。
SDモードのR1

まずはR1について。
R1のデータ構成は48bit長でこんなん。
| 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 |

ほー。
SPIモードの時は8bitだったけど、
SDモードは48bitになるのかー。
32bitのcard statusにいろいろ情報がうまってるのかな?

そうだね。
card status

んで、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 |

さらにCURRENT_STATEの明細も書いておこう。
0:idle
1:ready
2:ident
3:stby
4:tran
5:data
6:rcv
7:prg
8:dis

SPIモードと比べると情報量が半端ないなー。
基本はエラー系だけど、
CURRENT_STATEみたいに内部状態も返してるのかー。

CURRENT_STATEは想定外の状態に遷移してたら、
再初期化等を走らせることがあるね。
例えば、読み書き可能なSTATEが4=tranなんだけど、
それ以外のSTATE、例えばstbyに遷移してたら
再初期化して、再度tranに戻すとか。

へー。
裏でいろいろなことやってるんだなー。
SDモードのR1b

そして、R1bはSPIモードの時と同じように
R1にbusyが付いたもの。
busyも考え方は一緒で、DATのラインが0になっている間がbusyとなる。

これは確かにSPIモードと一緒だ。
まとめ

まとめだよ。
- SDカードのSDモード通信に於いてのレスポンス(R1とR1b)について説明。
- R1の中にcard statusという32bitのエラー&状態情報がある。
- 状態が想定と異なる場合は再初期化等で期待する状態に再遷移させる設計/実装をする必要がある。
- R1bはSPIモードと同じく、R1にbusyが付いたもの。
- busyはDATが0を維持している状態。
バックナンバーはこちら。



コメント