バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのSDモード通信のCMD13(SEND_STATUS/SEND_TASK_STATUS)の話。
登場人物
博識フクロウのフクさん
イラスト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モード通信のCMD13(SEND_STATUS/SEND_TASK_STATUS)
じゃ、前回言ったように、CMD13(SEND_STATUS/SEND_TASK_STATUS)の話をしよう。
シンプルに頼むよー。
まず、名称からなんとなく予測しているかもしれないが、
このコマンド、目的が2つある。
SEND_STATUSとSEND_TASK_STATUSってことだよね。
STATUS取得とTASK_STATUS取得に分かれるってことだけど、
そもそもここで言ってる、STATUSとTASK_STATUSがわからんな。
CMD13(SEND_STATUS/SEND_TASK_STATUS)でSTATUS取得
ここで言ってる、STATUSはCard Statusのことになる。
Card StatusってSDモードのR1レスポンスフォーマットで取得できるあれ?
うん。それ。
ここでやったやつで、
R1レスポンスフォーマットの[39:8]に埋まってる、32bitのパラメータだね。
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 |
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 |
CMD13(SEND_STATUS/SEND_TASK_STATUS)のSTATUS取得で状態確認
で、状態確認ってのはどうするの?
欲しいのは、CURRENT_STATEのところだね。
そういえば、CURRENT_STATEも内訳があったね。
0:idle
1:ready
2:ident
3:stby
4:tran
5:data
6:rcv
7:prg
8:dis
あ、わかった!
ここで”4:tran”になっていることを確認するのか!
正解!
読み書きする前に”4:tran”を確認するってのがわりとスタンダードなやり方になっているようだ。
たしかに、事前に確認できるならしておいた方が良いよねー。
ま、これが今回の読み書きに於いてのCMD13(SEND_STATUS/SEND_TASK_STATUS)の使い方となるわけだ。
って、ことはそうじゃない使い方の話が残ってるわけか・・・。
まとめ
まとめだよ
- CMD13(SEND_STATUS/SEND_TASK_STATUS)はSTAUSとTASK_STATUSのどちらかを取得できる。
- STAUSはCard StatusのことでR1フォーマットに埋まっているもの。
- Card StatusのCURRENT_STATEが”4:tran”になっていることを確認するのが読み書きする上での目的となる。
バックナンバーはこちら。
コメント