【FileSystem】車載外部ストレージ その15【SDカード⑪】

【FileSystem】車載外部ストレージ その15【SDカード⑪】 車載外部ストレージ

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/

はじめに

SDカードのSDモード通信の(Multiple) Block Write Operationについて。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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モード通信の(Multiple) Block Write Operation

フクさん
フクさん

今回は、SDモードの(Multiple) Block Write Operation。

  • No data Operation
  • (Multiple) Block Read Operation
  • (Multiple) Block Write Operation ← これ
太郎くん
太郎くん

前回がReadで、今回がWriteか。
基本的な構成は一緒になるのかな?

フクさん
フクさん

うん。
大体似てるよ。
ただ、書き込み処理と言うことでところどころbusyが挟まってHost側は送信速度を調整してあげる必要はあるね。

SDモードの(Multiple) Block Write Operation

busy

太郎くん
太郎くん

なるほど。
確かに、SDカード内部のNAND-Flashへバッファリングしながら書いてるだろうから、SDカード側の都合に合わせてあげる必要はありそうだね。

フクさん
フクさん

このbusy時間はSDカードによって結構変わること多し、
同じSDカードでもタイミングによって変わることもある。

太郎くん
太郎くん

そうなの?

フクさん
フクさん

さっき、太郎くんも言ってたけど、NAND-FlashROMがランダムアクセスし難いんで、
そこら辺の調整と、ウェアレベリングによる利用Blockの調整が入るんで、
重い処理が重なるとどうしても時間がかかることになる。

busy時間

太郎くん
太郎くん

ところで、busyは最大どの程度待てばよいとかあるの?

フクさん
フクさん

具体的にこれって数値はないのだけど、
ACMD13(SD_STATUS)でSD statusってのがとれて、
その中にAU_SIZEってパラメータが取得できる。
AU_SIZEの定義は以下。

AU_SIZEValue
0h
1h16[Kbyte]
2h32[Kbyte]
3h64[Kbyte]
4h128[Kbyte]
5h256[Kbyte]
6h512[Kbyte]
7h1[Mbyte]
8h2[Mbyte]
9h4[Mbyte]
Ah8[Mbyte]
Bh12[Mbyte]
Ch16[Mbyte]
Dh24[Mbyte]
Eh32[Mbyte]
Fh64[Mbyte]
太郎くん
太郎くん

ほー。いろんなサイズがあるんだ。

フクさん
フクさん

これが恐らく、NAND-FlashROMの消去単位になるんだと思う。

太郎くん
太郎くん

これと時間がどう関係するの?

フクさん
フクさん

SDカード仕様上では、AU_SIZE1個の消去時間が1秒
って定義されてる。
例えば、AU_SIZEが5=256[Kbyte]の場合、
512[Kbyte]の書き込みは2秒を想定する。
ちなみに256[Kbyte]未満の書き込みでも1秒は待つ必要はある

太郎くん
太郎くん

あー、SDカードが持ってるNAND-FlashROM性質に依存するから、その性質に強く起因するAU_SIZEを取得できるようにしてる。
ってわけか。

フクさん
フクさん

そういうことだね。

AU_SIZEについてあれこれ

太郎くん
太郎くん

大体AU_SIZEっていくつぐらいが主流なのかな?

フクさん
フクさん

うーん、その時々のNAND-FlashROMの製造技術に依存するんで一概には言えないけど、
大体。128[KByte]~4[Mbyte]ってところかなー。

太郎くん
太郎くん

むちゃむちゃ広いじゃん!!

フクさん
フクさん

AU_SIZEが大きいほど集積度を引き上げやすいし低価格化し易いから、
こればっかりは、具体的にコレってのは出せないな。
逆に目的に合わせて適切なAU_SZIEを持ったSDカードを選定するって考え方も必要かもね。

太郎くん
太郎くん

というと?

フクさん
フクさん

組み込みシステムだと読み書き速度が重要なんでAU_SIZEが小さい方が有利になる。
しかし、一回に書き込むサイズが明らかに1[Mbyte]を超えるのであれば、集積度重視で1[Mbyte]を選定するのも良い。
あとはAU_SIZEを見た上で書き込み単位をそれに切り揃えると、SDカードとしての最大のパフォーマンスを引き出せる
とか。

太郎くん
太郎くん

ほー。
PCでSD使うときだと全然意識しない話だなー。
組み込みならではの話だねー。

まとめ

フクさん
フクさん

まとめだよ。

  • SDモード通信の(Multiple) Block Write Operationについて説明。
    • data block送信毎にbusyが入る。
    • busyの待ち時間はACMD13(SD_STATUS)で取得できるAU_SIZEに依存。
  • AU_SIZEは組み込みに於いては重要なパラメータ。
    • AU_SIZEが小さい高速なSDカードを選択したり、AU_SIZEに合わせて書き込み単位を変えたり。

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

コメント

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