リード/ライトのパフォーマンス
NAND型フラッシュのデータポートは、通常20MHz (50ns) のリードサイクルに対応できます。
つまりフラッシュ内部のバッファへのデータの読み書きは、20Mバイト/s (×8) ないし 40Mバイト/s (×16) の転送スピードが出せるのです。
しかしながら、実際のシステムに接続した場合には、さまざまな要因によってこれだけのスループットを出すことは不可能です。
まず、チップ自身のオーバヘッドがあります。
読み出しのセットアップタイムや書き込みの処理時間、さらにはコマンドとアドレスを投入するサイクルの時間などのオーバヘッドがかかります。
次にメモリバスがこれだけのスループットを出せません。
CPUからI/Oマッピングされたデバイスへアクセスするには、アドレスサイクルとデータサイクル、それにいくらかのウェイトサイクルが必要です。
さらに読み出したデータはメインメモリ上のバッファ領域に書き込まれるので、こちらの書き込み動作でもバスがふさがれてしまいます。
ファイルシステムなどを通じてデータをアクセスする場合は、データの転送だけでなく、ソフトウェアでECCを計算するオーバヘッドなどもあり、最大でも2~3Mバイト/sが目安になるでしょう。
上記のようにメモリバスのサイクルを考慮して、 CPUのキャッシュをぎりぎりまで使ったとしてこの倍程度が限界でしょう。
これ以上のパフォーマンスが必要ならば、何か特殊なハードウェアの支援が必須です。
NANDフラッシュからのデータ転送をNANDコントローラのDMA機能を使ったとしても、同様にメモリバスのバンド幅がボトルネックになってくるので、データ転送の性能はそれほど向上しません。
DMAを使うことでCPUを空けることができるので、システム全体の効率向上には効果があるでしょう。
以上から、データ転送速度を試算したものを表3に示します。
| フラッシュ | |
|---|---|
| ページサイズ | 528バイト (512+16) |
| メモリセル読み出し時間 | 25μs |
| プログラミング時間 | 200μs |
| アドレス投入 | 4サイクル |
| データサイズ | 8ビット |
| メモリバス | クロック 50MHz (20ns) 4wait リード/ライト 6clock 120ns |
| リード | |
|---|---|
| リードコマンド | 1×120ns = 120ns |
| アドレス | 4×120ns = 480ns |
| メモリセル読み出し | 25ns |
| データ転送 | 528×120ns = 63,360ns |
| 合計 | 88,960ns |
| 転送速度 | 512バイト/88,960ns = 5.76Mバイト/s |
| ライト | |
|---|---|
| データ投入コマンド | 1×120ns = 120ns |
| アドレス | 4×120ns = 480ns |
| データ | 528×120ns = 63,360ns |
| プログラムコマンド | 1×120ns = 120ns |
| プログラミング時間 | 200μs |
| 合計 | 264,080ns |
| 転送速度 | 512バイト/264,080 = 1.94Mバイト/s |

