【FileSystem】車載外部ストレージ その50【SD読み書きSDモード②】

【FileSystem】車載外部ストレージ その50【SD読み書きSDモード②】 車載外部ストレージ

バックナンバーはこちら。
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の内訳はこれだね。

BitsIdentifier
31OUT_OF_RANGE
30ADDRESS_ERROR
29BLOCK_LEN_ERROR
28ERASE_SEQ_ERROR
27ERASE_PARAM
26WP_VIOLATION
25CARD_IS_LOCKED
24LOCK_UNLOCK_FAILED
23COM_CRC_ERROR
22ILLEGAL_COMMAND
21CARD_ECC_FAILED
20CC_ERROR
19ERROR
18reserved
17reserved
16CSD_OVERWRITE
15WP_ERASE_SKIP
14CARD_ECC_DISABLED
13ERASE_RESET
[12:9]CURRENT_STATE
8READY_FOR_DATA
7reserved
6FX_EVENT
5APP_CMD
4reserved
3AKE_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”になっていることを確認するのが読み書きする上での目的となる。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました