バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのPERFORMANCE_ENHANCEの話。
CMD48(READ_EXTR_SINGLE)、CMD49(WRITE_EXTR_SINGLE)について。
登場人物
博識フクロウのフクさん

イラスト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
セルフメンテナンス有効化に使うコマンド

前回、セルフメンテナンス有効化に
CMD48(READ_EXTR_SINGLE)、CMD49(WRITE_EXTR_SINGLE)
を使うってのは聞いたけど、このコマンドの詳細を聞いてないような?

んー、本筋はあまり関係無かったんで、端折ったけど、
一応説明しておくか。
CMD48(READ_EXTR_SINGLE)

CMD48(READ_EXTR_SINGLE)のパラメータは以下になる。
Bit position | 31 | [30:27] | 26 | [25:9] | [8:0] |
Width(bit) | 1 | 4 | 1 | 17 | 8 |
Value | x | x | 0 | x | x |
Description | MIO | FNO | rsv | ADDR | LEN |

MIOがMemory or I/O
で、
FNOがFunction No
だったね。

あとは、アドレスと取得するデータ長指定する感じか。

そうそう。
そして、レスポンスは恒例のR1フォーマットだ。
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 |

んで、R1レスポンスに追従する形でDATラインでレジスタが読み出せるわけか。

正解!
CMD49(WRITE_EXTR_SINGLE)

そして、CMD48(READ_EXTR_SINGLE)の逆方向になるCMD49(WRITE_EXTR_SINGLE)。
構造としてはCMD48(READ_EXTR_SINGLE)と似てはいるけど。
Bit position | 31 | [30:27] | 26 | [25:9] | [8:0] |
Width(bit) | 1 | 4 | 1 | 17 | 8 |
Value | x | x | 0 | x | x |
Description | MIO | FNO | MW | ADDR | LEN/MASK |

確かにCMD48(READ_EXTR_SINGLE)と似てるけど、
MWとLEN/MASKってところが違うね?

MWはMask Write Mode。
LEN/MASKは
MWが0の時はデータ長
MWが1の時はデータ長が1byte固定で、書き込みマスクになる。

ん?
MWが1の時の書き込みマスクのイメージわかない・・・。

単にbit単位でアクセスしたいって時に使うやつだね。
例えば、書き込み先1byteのうち、下位2bitしか書き換えたいんだけど、
1byte書き込みをすると他の6bitも書き換えてしまう。
その場合、マスクを0000_0011b(=03h)にすると
下位2bitにだけを書き込み範囲する状態になる。

あー、なるほど。
確かに書き込みする時に他のbitまで書き換えるのはちょっと困るもんね。

そして、このコマンドもレスポンスはR1。
R1に追従する形でDATで書き込みデータを送出する流れだ。

まぁ聞いてみたら普通の読み書きって感じだね。

そうだね。
書き込み時のマスクの話が少しイメージが湧きにくいくらいかな。

じゃ、次回こそは各セルフメンテナンスの振る舞いについてだ。
まとめ

まとめだよ。
- セルフメンテナンス有効化に使うコマンドは以下。
- CMD48(READ_EXTR_SINGLE)。
- CMD49(WRITE_EXTR_SINGLE)。
- 基本的にはMemory or I/O、Function Noを指定しての読み書き。
- 書き込み側はbit単位のマスクができる。
バックナンバーはこちら。
コメント