バックナンバーはこちら。
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だけ更新。
バックナンバーはこちら。
コメント