バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのPERFORMANCE_MOVEの話。
NAND-FlashRomの省メモリ制御について。
登場人物
博識フクロウのフクさん
イラスト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_STATUS詳細
PERFORMANCE_MOVEの説明で、
NAND-FlashRomの省メモリ制御についてが今回の話だ。
- PERFORMANCE_MOVE ← これの第2回/全4回
- VIDEO_SPEED_CLASS
- APP_PERF_CLASS
SD_STATUSの上記に関係するところの明細。
Bits | Identifier | Value | Description |
---|---|---|---|
439:432 | PERFORMANCE_MOVE | Performance of move indicated by 1[MB/s] step. | AUのコピー速度 |
391:384 | VIDEO_SPEED_CLASS | Vedeo Speed Class value of the card | ビデオスピードクラス |
377:368 | VSC_AU_SIZE | AU size in MB for Vide Speed Class | ビデオスピードクラスに於いてのAUサイズ |
339:336 | APP_PERF_CLASS | Application Performance Class Value of the card | アプリケーションパフォーマンスクラス |
NAND-FlashRomの共通の性質
前回の話だと、
「書き戻さずにコピーする」
ってことだけど、これの詳細を聞こうか。
まぁそのまんまの話なんだけど、
まずNAND-FlashRomの共通の性質を整理しよう。
よろしくー。
NAND-FlashRomは、
- 1page単位で読み書き可能。
- 1block単位で消去可能。
- 1blockは複数pageで構成される。
具体的な数値を入れるとするとどんなレベル感になるのかな?
まぁNAND-FlashRomによるが、比較的集積度が高めのものの数値を採用すると・・・。
1[page]=4[kbyte]
1[block]=64[page]=256[kbyte]
そういえば、消去単位が256[kbyte]になり得るってところでRAMが足りないって話になったね。
NAND-FlashRomの省メモリ書き込み手法
本来であれば、256[kbyte]以上のRAMが無いと以下のフローは使えない。
- 1[block]読み出し
- 書き換え部分更新
- 1[block]消去
- 1[block]書き戻し
うん。
それはわかる。
じゃー、とりあえず、更新は置いておいて、
1[block]を別のblockへコピーする場合は?
んー?一緒なんじゃない?256[kbyte]のRAMが必要って状況は。
読み書き単位は1[block]じゃなくて、1[page]になるけど?
あ、そうか!
とりあえず4[kbyte]あれば、一応足りるのか!
①1[block消去]
②1[page]読み出し
③1[page]書き込み
あとは、
②、③を64回繰り返せばOKだ!
そして、
どっかの1pageを書き換えたい場合は、
②、③をやってるうちの目的のpageが来た時に書き換えてしまえばOKだ!
そうそう。
それが「書き戻さずにコピーする」ってやつだ。
でも、コピーってことは別のBlockになるから、異なるアドレスになるよね?
まぁNAND-FlashRomをリニアなアドレス空間として見なすとそうなるね。
その言い方だと、
まだなんかあるっぽいな・・・。
それは次回説明しよう。
まとめ
まとめだよ。
- NAND-FlashRomの共通の性質を説明。
- page(読み書き)、block(消去)の概念が共通。
- NAND-FlashRomの省メモリ書き込み手法説明。
- 書き戻さずに、page単位でコピー。
- コピーの最中に書き換えたいpageだけ更新。
バックナンバーはこちら。
コメント