バックナンバーはこちら。
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”になっていることを確認するのが読み書きする上での目的となる。
バックナンバーはこちら。




コメント