概 要
emFile NANDドライバは、ファイルシステム層がNANDフラッシュデバイスとの間でデータブロック(論理セクタ)を効率的に書き込みおよび読み出すことを可能にする。NANDフラッシュデバイスの識別、NAND物理ブロックの消去、データのページ書き込みなどのNANDフラッシュへのアクセスに関するすべての詳細は、NANDドライバによって内部的に管理される。NANDフラッシュデバイスは、0ベースの論理セクタインデックスによって識別される論理セクタのアレイとして上位ファイルシステム層に提示されます。
の2つのドライバ
emFileには、NANDフラッシュデバイス用の2つのドライバが付属しています。
〈SLCドライバ〉
1ビットのエラー訂正が必要なSLC(シングルレベルセル)NANDフラッシュデバイスで動作します。また、Adesto(Atmel)DataFlashデバイスをサポートしています。
〈ユニバーサルドライバ〉
ユニバーサルドライバ - すべての最新のSLCおよびMLC(マルチレベルセル)NANDフラッシュデバイスで動作します。ハードウェアECCをNANDフラッシュに組み込むか、またはソフトウェアECCルーチンを使用して、単一または複数ビットのエラーを訂正できます。 emLib ECC ライブラリ。
動作
〈ウェアレベリング〉
どちらのNANDドライバも、アクティブおよびパッシブウェアレベリングをサポートしています。ウェアレベリングの目的は、NANDブロックが均等に消去されることを保証することによって、NANDフラッシュデバイスの寿命を延ばすことである。これは、最も低い消去カウントと、最後に消去されたNANDブロックのインデックスのトラックを維持することによって実現される。消去されたブロックが必要とされるとき、NANDドライバは、その行の次に利用可能なNANDブロックを検索し、発見されたNANDブロックの消去カウントと最小の消去カウントとの間の差をチェックする。その差が指定された最大値よりも大きい場合、消去回数が最も少ないNANDブロックがデータを格納するために使用されます。この手順は、一定のデータを記憶するNANDブロックも消去されることを保証する。
〈不良ブロック管理〉
ブロックは、NANDフラッシュの寿命の間に欠陥を起こす可能性があり、そのように識別する必要がある。不良ブロック管理は、NANDドライバがブロックを識別し、欠陥としてマークするのを助ける。製造時に不良とマークされたブロックまたはNANDドライバによってブロックされたブロックは、データ記憶には使用されない。そのブロックの第1ページまたは第2ページのスペア領域内の第1バイトが0xFFと異なる場合、ブロックは欠陥として認識される。ドライバーはブロックを次のような場合に不良としてマークします。
・ 書き込み動作後にNANDフラッシュデバイスがエラーを報告する場合
・ NANDフラッシュデバイスが消去操作の後にエラーを報告する場合
・ NANDフラッシュデバイスから読み取られたデータに対してECCを介して訂正不能なビットエラーが検出された場合
〈ガベージコレクション〉
NANDドライバは、書き込み動作中に自動的にガベージコレクションを実行する。空のブロックがデータを格納するために利用可能でない場合、無効なデータを含むブロックを消去することによって新しい空のブロックが作成される。ガベージコレクション動作は、ブロック消去動作が完了するまで比較的長い時間を要するので、アプリケーションの書き込みスループットを潜在的に低下させる可能性がある。最大書き込みスループットを必要とするアプリケーションの場合、NANDドライバは、ファイルシステムがアイドル状態のときなど、アプリケーションでガベージコレクションを実行する可能性を提供します。
〈ブロックのグループ化〉
ブロックグループは、ブロック管理のRAMメモリ使用量を削減するために使用できる機能であり、したがって、より小さいマイクロコントローラで大容量NANDフラッシュデバイスを使用することができます。この機能により、NANDドライバは、複数の連続するブロックを単一のブロックとして扱い、NANDフラッシュメモリを管理するために使用されるメモリを大幅に削減する。ブロックグループのサイズは、アプリケーションの要件に応じてスケーラブルです。
デバイスの動作方法
〈NANDフラッシュ〉
NANDフラッシュは、アドレス入力とデータ入出力の両方にI / Oピンを使用し、コマンド入力を使用する直列型メモリデバイスです。NANDフラッシュデバイスは、複数のブロックで構成されています。すべてのブロックには、いくつかのページ、通常は64ページが含まれます。ページは、一度に1つずつ個別に書き込むことができます。ページに書き込むとき、ビットは1から0にしか変更できません。ブロック全体(ブロック内のすべてのページ)を一度に消去することができます。消去とは、ブロックの全ページのすべてのメモリビットを論理1にすることを意味します。
小型NANDフラッシュデバイス(最大256Mバイト)のページサイズは528バイトで、ユーザーデータの512バイト、ページ内のユーザーデータに関連する管理情報(ECC、ブロックインデックスなど)の保存用の16バイトです。大型NANDデバイス(256Mバイト以上)のページサイズは2112バイト(ユーザーデータは2048バイト、管理情報は64バイト)です。
NANDドライバは、ページサイズよりも小さい論理セクタサイズだけでなく、任意の共通ページおよびブロックサイズを処理することができる。これにより、2KバイトページのNANDフラッシュでセクタあたり512,1024、または2048バイトの論理セクタサイズを持つファイルシステムを使用できます。
例えば、256MByteの典型的なNANDフラッシュは、2112バイト(データの場合は2048バイト+スペア領域の場合64バイト)の64ページの2048ブロックを有する。
〈DataFlash〉
DataFlashデバイスはNANDフラッシュデバイスと同様に動作しますが、容量はわずか数メガバイトです。