(57)【特許請求の範囲】
【請求項１】
ホストシステムから与えられるセクタ単位のホストアドレスに基づいて、複数のページを含む物理ブロック単位で消去が行われるフラッシュメモリにアクセスするメモリコントローラであって、
前記ホストアドレスが割り当てられている複数セクタの領域で構成された論理ブロックに該論理ブロックを特定するための論理アドレス情報を付与する論理アドレス情報付与手段と、
前記物理ブロックの冗長領域に該物理ブロックに対応する前記論理ブロックに付与された論理アドレス情報を書き込み、該論理アドレス情報に基づいて、前記論理ブロックと前記物理ブロックの対応関係を管理するブロック管理手段と、
対応する前記論理ブロックが無く、かつ消去済みでない前記物理ブロックを不正マッピングブロックと判断し、該不正マッピングブロックに記憶されているデータを消去する消去手段と、を備え、
前記ブロック管理手段は、前記物理ブロックの冗長領域に書き込まれている前記論理アドレス情報と、該論理アドレス情報が冗長領域に書き込まれている前記物理ブロックとの対応関係を示すアドレス変換テーブルを作成し、
前記消去手段は、前記アドレス変換テーブルにおいて、対応する前記論理ブロックが存在しない前記論理アドレス情報に対応付けられた前記物理ブロックを不正マッピングブロックと判断する、ことを特徴とするメモリコントローラ。
【請求項２】
前記論理ブロックが複数個含まれる論理ゾーンと、前記物理ブロックが複数個含まれる物理ゾーンとの対応関係を管理するゾーン管理手段を備え、
前記論理アドレス情報が、前記論理ゾーン内の前記論理ブロックに付けられた通し番号であることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記消去手段は、前記物理ブロックの冗長領域内の前記論理アドレス情報を書き込む領域に対応するビットが全て消去状態のときに、該物理ブロックは消去済みであると判断することを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項４】
複数のページを含む物理ブロック単位で消去が行われるフラッシュメモリと、請求項１乃至３のいずれか１項に記載のメモリコントローラとを備えることを特徴とするフラッシュメモリシステム。
【請求項５】
ホストシステムから与えられるセクタ単位のホストアドレスに基づいて、複数のページを含む物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
データを書き込んだ前記物理ブロックの冗長領域に、該物理ブロックに対応する論理ブロックを特定するための論理アドレス情報を書き込む論理アドレス情報を書き込みステップと、
前記論理アドレス情報を書き込みステップで書き込まれた前記論理アドレス情報を読み出し、該読み出した前記論理アドレス情報と前記物理ブロックの対応関係を記述したアドレス変換テーブルを作成するアドレス変換テーブル作成ステップと、
前記アドレス変換テーブル作成ステップで作成されたアドレス変換テーブルを参照して、対応する前記論理ブロックが存在しない前記論理アドレス情報に対応付けられている前記物理ブロックを判別し、該判別した前記物理ブロックに記憶されているデータを消去するステップとを含む、
ことを特徴とするフラッシュメモリの制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、メモリコントローラ及びこれを備えるフラッシュメモリシステムに関し、特に、フラッシュメモリの信頼性を高めることが可能なメモリコントローラ及びこのようなメモリコントローラを備えるフラッシュメモリシステムに関する。また、本発明は、フラッシュメモリの制御方法に関し、特に、フラッシュメモリの信頼性を高めることが可能な制御方法に関する。
【０００２】
【従来の技術】
近年、メモリカードやシリコンディスクなどに用いられる半導体メモリとして、フラッシュメモリ、特にＮＡＮＤ型フラッシュメモリが用いられることが多い。ＮＡＮＤ型フラッシュメモリは、メモリセルを消去状態（論理値＝１）から書込状態（論理値＝０）に変化させる場合は、これをメモリセル単位で行うことが可能である一方、メモリセルを書込状態（０）から消去状態（１）に変化させる場合は、これをメモリセル単位で行うことができず、複数のメモリセルからなるブロック単位でしかこれを行うことができない。かかる一括消去動作は、一般的に「ブロック消去」と呼ばれる。
【０００３】
このように、フラッシュメモリでは、ブロック単位でしかメモリセルを書込状態（０）から消去状態（１）に変化させることができないことから、既にデータが割り当てられている論理アドレスに対して新しいデータを上書きする場合であっても、旧データが格納されているブロックに対して新しいデータを直接上書きすることはできない。このため、既にデータが割り当てられている論理アドレスに対して新しいデータを上書きするようホストコンピュータから指示されると、旧データが格納されているブロック内における上書き対象外のデータを消去済みブロックに転送するとともに、新しいデータを当該消去済みブロックに書き込むという処理が必要となる。かかる処理は「ブロック間転送」と呼ばれ、ホストコンピュータからデータの上書きが指示される度に実行される。ブロック間転送が行われた後、転送元のブロックはブロック消去され、これにより転送元のブロックは新たな消去済みブロックとなる。
【０００４】
したがって、論理アドレスと各ブロックに一義的に割り当てられた物理アドレスとの関係は固定されず、これらの関係はデータの上書きが指示される度に動的に変化することになる。以下、論理アドレスと物理アドレスとの関係について、図面を用いてより詳細に説明する。
【０００５】
図１９は、論理アドレスと物理アドレスとの関係を模式的に示す図である。図１９に示すように、全てのブロックにより構成可能な物理アドレス空間（最大物理アドレス空間）４１の大きさ（０〜ｎ−１）は、論理アドレス空間４２の大きさ（０〜ｍ−１）よりも大きく（ｎ＞ｍ）、したがって全ての論理アドレスにデータが割り当てられた場合であっても、ｎ−ｍ個のブロックは常に未使用となる。
【０００６】
図２０は、最大物理アドレス空間４１を構成するｎ個のブロック（＃０〜＃ｎ−１）の構造を模式的に示す図である。図２０に示すように、各ブロック＃０〜＃ｎ−１には実際にユーザデータが格納される領域５１の他に、自らに割り当てられた論理アドレスを記録する領域５２が設けられており、論理アドレスと物理アドレスとの関係は、かかる領域５２に格納された値によって特定される。領域５２には対応する論理アドレスの値が格納され、データの読み出し及び／又は書き込みを行う際には、領域５２に格納された論理アドレスに基づいて、実際にアクセスすべきブロック＃０〜＃ｎ−１が特定される。
【０００７】
また、消去済みブロックについては、これに含まれる全てのメモリセルが消去状態（１）となっていることから、領域５２を構成するメモリセルも全て消去状態（１）となっているはずである。一般に、領域５２を構成する全てのメモリセルが消去状態（１）である場合、その値はｎ−１（物理アドレスの最大値）に一致しており、したがって、領域５２に格納された値がｎ−１である場合には、当該ブロックが消去済みブロックであると判断することができる。
【０００８】
そして、データの上書きが指示された場合には、旧データが格納されているブロック（例えばブロック＃ｉ）内における上書き対象外のデータが消去済みのブロック（例えばブロック＃ｊ）に転送されるとともに、新しいデータがこの消去済みブロック（ブロック＃ｊ）に書き込まれ（ブロック間転送）、さらに、転送元のブロック（ブロック＃ｉ）の領域５２に格納されていた論理アドレスの値（０〜ｍ−１）が転送先のブロック（ブロック＃ｊ）の領域５２に書き込まれる。その後、転送元のブロック（ブロック＃ｉ）はブロック消去され、これにより転送元のブロック（ブロック＃ｉ）は新たな消去済みブロックとなる。上述の通り、消去済みブロックにおいては、領域５２に格納された値はｎ−１となる。
【０００９】
以上より、各ブロックの領域５２に格納される値は、０〜ｍ−１及びｎ−１のいずれかとなり、これが０〜ｍ−１であるブロックは有効なデータが格納されているブロックであり、これがｎ−１であるブロックは消去済みのブロックである。
【００１０】
【発明が解決しようとする課題】
しかしながら、各ブロックの領域５２に格納される値が何らかの原因で０〜ｍ−１及びｎ−１以外の値、すなわちｍ〜ｎ−２となった場合、このブロックは有効な論理アドレスに対応せず、しかも消去済みブロックとしても取り扱われない。このようなブロックは「不正マッピングブロック」と呼ばれ、事実上、永久に使用できないブロックとなってしまう。上述の通り、全てのブロック＃０〜＃ｎ−１により構成可能な最大物理アドレス空間４１の大きさ（０〜ｎ−１）は、論理アドレス空間４２の大きさ（０〜ｍ−１）よりも大きいことから、不正マッピングブロックの発生が直ちに致命的な不具合となるものではないが、不正マッピングブロックのように使用できないブロックの数がｎ−ｍ個を超えると、当該フラッシュメモリ全体が使用不可能となってしまうことから、このような不正マッピングブロックの発生はフラッシュメモリの信頼性を低下させる原因となってしまう。
【００１１】
不正マッピングブロックが発生する原因としては種々の原因が考えられ、その主なものとしては、ブロック消去中に電源が遮断される等、ブロック消去が正常に完了しなかった場合や、領域５２を構成するメモリセルに不良が発生した場合、領域５２に対する論理アドレスの書き込み中にエラーが発生した場合等が挙げられる。その他、フラッシュメモリを制御するプログラム（ファームウェア）にバグが含まれていた場合や、フラッシュメモリの物理的な落下等によってビット化けが生じた場合においても、不正マッピングブロックが発生することがある。
【００１２】
したがって、本発明の目的は、このような不正マッピングブロックの蓄積によるフラッシュメモリの信頼性低下を効果的に防止することが可能なメモリコントローラ及びこのようなメモリコントローラを備えるフラッシュメモリシステムを提供することである。
【００１３】
また、本発明の他の目的は、不正マッピングブロックの蓄積によるフラッシュメモリの信頼性低下を効果的に防止することが可能なフラッシュメモリの制御方法を提供することである。
【００１４】
【課題を解決するための手段】
本発明によるメモリコントローラは、
ホストシステムから与えられるセクタ単位のホストアドレスに基づいて、複数のページを含む物理ブロック単位で消去が行われるフラッシュメモリにアクセスするメモリコントローラであって、
前記ホストアドレスが割り当てられている複数セクタの領域で構成された論理ブロックに該論理ブロックを特定するための論理アドレス情報を付与する論理アドレス情報付与手段と、
前記物理ブロックの冗長領域に該物理ブロックに対応する前記論理ブロックに付与された論理アドレス情報を書き込み、該論理アドレス情報に基づいて、前記論理ブロックと前記物理ブロックの対応関係を管理するブロック管理手段と、
対応する前記論理ブロックが無く、かつ消去済みでない前記物理ブロックを不正マッピングブロックと判断し、該不正マッピングブロックに記憶されているデータを消去する消去手段と、を備え、
前記ブロック管理手段は、前記物理ブロックの冗長領域に書き込まれている前記論理アドレス情報と、該論理アドレス情報が冗長領域に書き込まれている前記物理ブロックとの対応関係を示すアドレス変換テーブルを作成し、
前記消去手段は、前記アドレス変換テーブルにおいて、対応する前記論理ブロックが存在しない前記論理アドレス情報に対応付けられた前記物理ブロックを不正マッピングブロックと判断する、ことを特徴とする。
【００１５】
前記論理ブロックが複数個含まれる論理ゾーンと、前記物理ブロックが複数個含まれる物理ゾーンとの対応関係を管理するゾーン管理手段を配置してもよい。また、前記論理アドレス情報は、例えば、前記論理ゾーン内の前記論理ブロックに付けられた通し番号である。
【００１６】
前記消去手段は、例えば、前記物理ブロックの冗長領域内の前記論理アドレス情報を書き込む領域に対応するビットが全て消去状態のときに、該物理ブロックは消去済みであると判断する。
【００１７】
また、この発明によるフラッシュメモリシステムは、複数のページを含む物理ブロック単位で消去が行われるフラッシュメモリと、上述のメモリコントローラとを備えることを特徴とする。
【００１８】
この発明によるフラッシュメモリの制御方法は、
ホストシステムから与えられるセクタ単位のホストアドレスに基づいて、複数のページを含む物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
データを書き込んだ前記物理ブロックの冗長領域に、該物理ブロックに対応する論理ブロックを特定するための論理アドレス情報を書き込む論理アドレス情報を書き込みステップと、
前記論理アドレス情報を書き込みステップで書き込まれた前記論理アドレス情報を読み出し、該読み出した前記論理アドレス情報と前記物理ブロックの対応関係を記述したアドレス変換テーブルを作成するアドレス変換テーブル作成ステップと、
前記アドレス変換テーブル作成ステップで作成されたアドレス変換テーブルを参照して、対応する前記論理ブロックが存在しない前記論理アドレス情報に対応付けられている前記物理ブロックを判別し、該判別した前記物理ブロックに記憶されているデータを消去するステップとを含む、
ことを特徴とする。
【００３０】
【発明の実施の形態】
以下、添付図面を参照しながら、本発明の好ましい実施態様について詳細に説明する。
【００３１】
図１は、本発明の好ましい実施態様にかかるフラッシュメモリシステム１を概略的に示すブロック図である。
【００３２】
図１に示すように、本実施態様にかかるフラッシュメモリシステム１は、フラッシュメモリ２及びコントローラ３からなる。特に限定されるものではないが、フラッシュメモリシステム１はフラッシュメモリ２及びコントローラ３が一つのカード内に集積されて構成され、ホストコンピュータに対して着脱可能な一種の外部記憶装置として用いることができる。ホストコンピュータとしては、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置が挙げられる。
【００３３】
フラッシュメモリ２は、多数のメモリセルを含む１又は２以上の半導体チップからなり、ｎ個（例えば１０２４個）のブロックによって構成される。これらｎ個のブロックはいずれもｋ個（例えば３２個）のページ（セクタ）からなり、各ページは例えば５１２バイトの記録容量を有する最小アクセス単位として用いられる。したがって、上記の例のように、
ｎ＝１０２４（１Ｋ）
ｋ＝３２
である場合、フラッシュメモリ２は３２Ｋページのアドレス空間を含み、このためホストコンピュータ側から特定のページにアクセスするためには、少なくとも１５ビットのアドレス情報が必要となる。本明細書においては、ホストコンピュータよりフラッシュメモリシステム１に供給されるアドレス情報を「ホストアドレス」と呼ぶ。
【００３４】
コントローラ３は、少なくともＣＰＵ４、ＲＡＭ５及びＲＯＭ６を含む種々の機能ブロックによって構成される。特に限定されるものではないが、コントローラ３は一つの半導体チップ上に集積されていることが好ましい。ＣＰＵ４は、コントローラ３を構成する各機能ブロック全体の動作を制御するための機能ブロックである。また、ＲＡＭ５は、ＣＰＵ４によるフラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、特に限定されるものではないが、複数のＳＲＡＭセルによって構成することが好ましい。ＲＯＭ６は、ＣＰＵ４が実行すべき制御プログラム（ファームウェア）を格納するための機能ブロックである。
【００３５】
次に、フラッシュメモリ２に含まれるメモリセルの具体的な構造について説明する。
【００３６】
図２は、フラッシュメモリ２に含まれる各メモリセル１０の構造を概略的に示す断面図である。
【００３７】
図２に示すように、メモリセル１０は、Ｐ型半導体基板１１に形成されたＮ型のソース拡散領域１２及びドレイン拡散領域１３と、ソース拡散領域１２とドレイン拡散領域１３との間のＰ型半導体基板１１を覆って形成されたトンネル酸化膜１４と、トンネル酸化膜１４上に形成されたフローティングゲート電極１５と、フローティングゲート電極１５上に形成された絶縁膜１６と、絶縁膜１６上に形成されたコントロールゲート電極１７とから構成される。このような構成を有するメモリセル１０は、フラッシュメモリ２内において、複数個直列に接続されて、ＮＡＮＤ型フラッシュメモリを構成する。
【００３８】
メモリセル１０は、フローティングゲート電極１５に電子が注入されているか否かによって、「消去状態」と「書込状態」のいずれかの状態となる。メモリセル１０が消去状態であることは、当該メモリセル１０にデータ「１」が保持されていることを意味し、メモリセル１０が書込状態であることは、当該メモリセル１０にデータ「０」が保持されていることを意味する。すなわち、メモリセル１０は、１ビットのデータを保持することが可能である。
【００３９】
図２に示すように、消去状態とは、フローティングゲート電極１５に電子が注入されていない状態を指す。消去状態におけるメモリセル１０は、デプレッション型のトランジスタとなり、コントロールゲート電極１７に読み出し電圧が印加されているか否かに関わらず、ソース拡散領域１２とドレイン拡散領域１３との間のＰ型半導体基板１１の表面にはチャネル１８が形成される。したがって、ソース拡散領域１２とドレイン拡散領域１３とは、コントロールゲート電極１７に読み出し電圧が印加されているか否かに関わらず、チャネル１８によって常に電気的に接続状態となる。
【００４０】
図３は、書込状態であるメモリセル１０を概略的に示す断面図である。
【００４１】
図３に示すように、書込状態とは、フローティングゲート電極１５に電子が蓄積されている状態を指す。フローティングゲート電極１５はトンネル酸化膜１４及び絶縁膜１６に挟まれているため、一旦、フローティングゲート電極１５に注入された電子は、きわめて長時間フローティングゲート電極１５内にとどまる。書込状態におけるメモリセル１０は、エンハンスメント型のトランジスタとなり、コントロールゲート電極１７に読み出し電圧が印加されていないときには、ソース拡散領域１２とドレイン拡散領域１３との間のＰ型半導体基板１１の表面にはチャネルが形成されず、コントロールゲート電極１７に読み出し電圧が印加されているときには、ソース拡散領域１２とドレイン拡散領域１３との間のＰ型半導体基板１１の表面にチャネル（図示せず）が形成される。したがって、コントロールゲート電極１７に読み出し電圧が印加されていない状態では、ソース拡散領域１２とドレイン拡散領域１３とは電気的に絶縁され、コントロールゲート電極１７に読み出し電圧が印加された状態では、ソース拡散領域１２とドレイン拡散領域１３とが電気的に接続される。
【００４２】
ここで、選択されたメモリセル１０が消去状態であるか書込状態であるかは、次のようにして読み出すことができる。すなわち、複数個直列に接続されたメモリセル１０のうち、選択されたメモリセル１０以外の全てのメモリセル１０のコントロールゲート電極１７に読み出し電圧を印加し、この状態において、これらメモリセル１０の直列体に電流が流れるか否かを検出する。その結果、かかる直列体に電流が流れれば、選択されたメモリセル１０が消去状態であると判断することができ、かかる直列体に電流が流れなければ、選択されたメモリセル１０が書込状態であると判断することができる。このようにして、直列体に含まれる任意のメモリセル１０に保持されたデータが「０」であるのか「１」であるのかを読み出すことができる。但し、ＮＡＮＤ型フラッシュメモリにおいては、ひとつの直列体に含まれる２以上のメモリセル１０に保持されたデータを同時に読み出すことはできない。
【００４３】
また、消去状態であるメモリセル１０を書込状態に変化させる場合、コントロールゲート電極１７に正の高電圧が印加され、これによって、トンネル酸化膜１４を介してフローティングゲート電極１５へ電子が注入される。フローティングゲート電極１５への電子の注入は、ＦＮトンネル電流による注入が可能である。一方、書込状態であるメモリセル１０を消去状態に変化させる場合、コントロールゲート電極１７に負の高電圧が印加され、これによって、トンネル酸化膜１４を介してフローティングゲート電極１５に蓄積された電子が排出される。
【００４４】
次に、フラッシュメモリ２の持つアドレス空間の具体的な構成について説明する。
【００４５】
図４は、フラッシュメモリ２のアドレス空間の構造を概略的に示す図である。
【００４６】
図４に示すように、フラッシュメモリ２のアドレス空間は、ブロック＃０〜＃ｎ−１からなるｎ個のブロックによって構成される。ここで、各ブロックは、データの消去単位である。すなわち、フラッシュメモリ２では、各メモリセル１０ごとに、その状態を書込状態から消去状態に変化させることはできず、メモリセル１０を書込状態から消去状態に変化させる場合は、当該メモリセル１０が属するブロックに含まれる全てのメモリセル１０を一括して消去状態とする必要がある。逆に、各メモリセル１０ごとにその状態を消去状態から書込状態に変化させることは可能である。
【００４７】
さらに、図４に示すように、フラッシュメモリ２を構成する各ブロック＃０〜＃ｎ−１は、それぞれページ＃０〜＃ｋ−１からなるｋ個のページによって構成されている。これら各ページはデータの読み出し及び書き込みにおけるアクセス単位であり、図４に示すように、ビットｂ０〜ｂ７からなる８ビットを１バイトとして、例えばそれぞれ５１２バイトのユーザ領域２１と１６バイトの冗長領域２２によって構成される。ユーザ領域２１は、ホストコンピュータより供給されるユーザデータが格納される領域である。
【００４８】
図５は、冗長領域２２のデータ構造を概略的に示す図である。
【００４９】
図５に示すように、冗長領域２２は、論理ブロックアドレス格納領域２３及びその他の付加情報を格納するための領域２４によって構成される。
【００５０】
論理ブロックアドレス格納領域２３は、当該ブロックに対応する論理ブロックアドレスを格納するための領域であり、少なくともｘ個（ｘ＝ｌｏｇ２ｎ）のメモリセル１０が割り当てられる。ここで、論理ブロックアドレスとは、ホストアドレスの一部若しくはホストアドレスの一部に基づいて生成されたアドレスであり、ホストコンピュータ側から見たブロック番号を示している。したがって、論理ブロックアドレスは少なくともｘビットで構成される。論理ブロックアドレス格納領域２３は、各ページに含まれる冗長領域２２が共通に備える要素であるが、一つのブロックはｋ個のページからなるため、一つのブロックを構成する全てのページの論理ブロックアドレス格納領域２３に論理ブロックアドレスを格納しておく必要はなく、少なくとも各ブロックの先頭ページ（ページ＃０）の論理ブロックアドレス格納領域２３に論理ブロックアドレスを格納すれば足りる。また、消去済みのブロックについては全てのメモリセル１０が消去状態（１）となっていることから、論理ブロックアドレス格納領域２３がｘ個のメモリセル１０からなる場合、論理ブロックアドレス格納領域２３に格納される値はｎ−１（２ｘ−１）となる。一方、何らのユーザデータが格納されているブロックについては、対応する論理ブロックアドレスの値が論理ブロックアドレス格納領域２３に格納されている。
【００５１】
尚、領域２４には、対応するユーザ領域２１に格納されたユーザデータの誤りを訂正するための付加情報（エラーコレクションコード）や、当該ブロックについての異常を表示するブロックステータス等が格納されているが、これらについては、本発明の要旨と直接関係がないため、説明は省略する。
【００５２】
以上のように、フラッシュメモリ２はｎ個のブロックによって構成されるが、このうち、ｍ（＜ｎ）個のブロックは実際にデータを格納することができる実使用ブロックとして取り扱われ、残りのｎ−ｍ個の物理ブロックは冗長ブロックとして取り扱われる。フラッシュメモリ２のアドレス空間は、実使用ブロックのみによって構成され、あるブロックに不良が発生し使用不能となった場合には、不良が発生したブロックの数だけ冗長ブロックとして用いられるブロックの数が減らされる。
【００５３】
次に、ＲＡＭ５内に作成される各種テーブルについて説明する。
【００５４】
ＲＡＭ５内に作成される各種テーブルには、少なくとも、アドレス変換テーブル、冗長ブロック登録テーブル及び書き込みキューが含まれ、これらはコントローラ３に対して電源投入またはリセット動作がなされた場合に、ＲＯＭ６に格納されているファームウェアに基づきＣＰＵ４によって作成される。
【００５５】
アドレス変換テーブルは、ホストアドレスに基づき生成される論理ブロックアドレスと各ブロックに対して一義的に割り当てられた物理ブロックアドレスとの対応関係を保持するためのテーブルであり、以下の構造を有している。
【００５６】
図６は、ＲＡＭ５内に作成されるアドレス変換テーブル３１のデータ構造を示す図である。
【００５７】
図６に示すように、アドレス変換テーブル３１は、物理ブロックアドレス格納領域＃０〜物理ブロックアドレス格納領域＃ｎ−１からなるｎ個の物理ブロックアドレス格納領域と、これら物理ブロックアドレス格納領域にそれぞれ対応して設けられたｎ個のフラグからなる。ここで、各物理ブロックアドレス格納領域に対して一義的に割り当てられた領域番号（＃０〜＃ｎ−１）は、論理ブロックアドレスを示し、各物理ブロックアドレス格納領域に格納された内容は、対応する物理ブロックアドレスを示している。したがって、例えば物理ブロックアドレス格納領域＃ｐに格納されている物理ブロックアドレスが＃ｑであれば、論理ブロックアドレス＝＃ｐが物理ブロックアドレス＝＃ｑに対応することになる。
【００５８】
また、フラグ＃０〜フラグ＃ｎ−１は、それぞれ対応する物理ブロックアドレス格納領域の内容（物理ブロックアドレス）が有効であるか否かを示している。具体的には、フラグが「０」であれば、対応する物理ブロックアドレス格納領域の内容が有効であることを意味し、フラグが「１」であれば、対応する物理ブロックアドレス格納領域の内容が無効であることを意味する。もちろん、逆に、物理ブロックアドレス格納領域の内容が有効である場合に、対応するフラグを「１」としても構わない。
【００５９】
冗長ブロック登録テーブル３２は、各ブロックがそれぞれ使用中であるか否かを示すテーブルであり、以下の構造を有している。
【００６０】
図７は、ＲＡＭ５内に作成される冗長ブロック登録テーブル３２のデータ構造を示す図である。
【００６１】
図７に示すように、冗長ブロック登録テーブル３２は、バイト＃０〜バイト＃（ｎ／８）−１からなるｎ／８バイト（ｎビット）のビットマップによって構成され、
バイト番号×８＋ビット番号
により特定されるブロックが使用中のブロック（ユーザデータが格納されているブロック）であるか、消去済みの空きブロックであるかを示している。具体的には、ビットが「０」であれば対応するブロックが使用中であることを意味し、ビットが「１」であれば、対応するブロックが消去済みブロックであることを意味する。もちろん、その逆であっても構わない。したがって、図７に示す例のように、バイト＃０のビット＃０が「０」であれば、ブロック＃０が使用中であることが示され、また、バイト＃１のビット＃６が「１」であれば、ブロック＃１４が消去済みブロックであることが示される。
【００６２】
図８は、ＲＡＭ５内に作成される書き込みキュー３３のデータ構造を示す図である。
【００６３】
図８に示すように、書き込みキュー３３は、キュー＃０〜キュー＃ｈ−１からなるｈ個のキューによって構成され、各キューには、消去済みブロックの物理ブロックアドレスが格納されている。書き込みキュー３３に登録されるブロックは、上述した冗長ブロック登録テーブル３２においてビットが「１（消去済み）」となっているブロックから選ばれる。
【００６４】
次に、本実施態様にかかるフラッシュメモリシステム１の動作について説明する。
【００６５】
図９は、アドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成方法を示すフローチャートである。アドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成は、コントローラ３に対して電源投入またはリセット動作がなされたことに応答して、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することにより行われる。
【００６６】
まず、コントローラ３に対して電源投入またはリセット動作がなされると、ＣＰＵ４は、ＲＡＭ５のうちアドレス変換テーブル３１及び冗長ブロック登録テーブル３２を構成するビットを全て「１」にリセットする（ステップＳ１）。次いで、ＣＰＵ４は、内部変数ａの値を０にリセットし（ステップＳ２）、ブロック番号が内部変数ａに一致するブロックの先頭ページ（ページ＃０）に格納されている論理ブロックアドレスを読み出す（ステップＳ３）。この場合、内部変数ａ＝０であるから、ブロック＃０のページ＃０に格納されている論理ブロックアドレスが読み出されることになる。
【００６７】
次に、ＣＰＵ４は、読み出された論理ブロックアドレスが「オール１」であるか否か、すなわちｎ−１であるかを判断し（ステップＳ４）、その結果、読み出された論理ブロックアドレスが「オール１（＝ｎ−１）」以外であれば、冗長ブロック登録テーブル３２の対応するビット（この場合は、バイト＃０のビット＃０）を「０」に書き替える（ステップＳ５）。さらに、アドレス変換テーブル３１のうち、フラグ番号が論理ブロックアドレスに一致するフラグを「０」に書き替える（ステップＳ６）とともに、領域番号が論理ブロックアドレスに一致する物理ブロックアドレス格納領域に内部変数ａを格納する（ステップＳ７）。一方、ステップＳ４において、読み出された論理ブロックアドレスが「オール１（＝ｎ−１）」であれば、上記ステップＳ５〜ステップＳ７は実行されない。
【００６８】
そして、ＣＰＵ４は、内部変数ａをインクリメントした後（ステップＳ８）、内部変数ａがｎに一致しているか否かを判断し（ステップＳ９）、その結果、内部変数ａがｎではない場合にはステップＳ３に戻って、内部変数ａを用いた論理ブロックアドレスの読み出しを行い、内部変数ａがｎに一致している場合には、一連の処理を完了する。
【００６９】
以上のようにして、内部変数ａがｎに一致するまでステップＳ３〜ステップＳ９が繰り返し実行され、これによってアドレス変換テーブル３１及び冗長ブロック登録テーブル３２が完成する。尚、書き込みキュー３３は、ＣＰＵ４による制御のもと、冗長ブロック登録テーブル３２においてビットが「１」となっているブロックがｈ個選ばれ、その物理ブロックアドレスがキュー＃０〜＃ｈ−１に登録される。
【００７０】
本実施態様においては、図９に示すアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成動作、並びに、書き込みキューの作成動作（図示せず）が完了した後、引き続いて不正マッピングブロックの消去動作が行われる。ここで、不正マッピングブロックとは、アドレス変換テーブル３１の物理ブロックアドレス格納領域＃ｍ〜＃ｎ−２に格納された物理ブロックアドレスにより特定されるブロックを指す。
【００７１】
つまり、ｎ個のブロックのうち実使用ブロックはｍ個のみであり、フラッシュメモリ２のアドレス空間は実使用ブロックのみによって構成されることから、論理ブロックアドレスとしては＃０〜＃ｍ−１までしか存在せず、それ以上の値（＃ｍ〜＃ｎ−１）は取り得ない。さらに、消去済みのブロックにおいては、論理ブロックアドレス格納領域２３の値は「オール１」であり、論理ブロックアドレス格納領域２３がｘ個のメモリセル１０によって構成される場合、消去済みブロックの論理ブロックアドレス格納領域２３に格納される値はｎ−１（２ｘ−１）となることから、物理ブロックアドレス格納領域＃ｎ−１に格納された物理ブロックアドレスにより特定されるブロックは必ず消去済みブロックとなる。
【００７２】
以上より、物理ブロックアドレス格納領域＃ｍ〜＃ｎ−２に格納された物理ブロックアドレスにより特定されるブロックは、アクセスが不可能であるとともに消去済みブロックとしても取り扱われない、不正マッピングブロックであることが分かる。
【００７３】
図１０は、不正マッピングブロックの消去方法を示すフローチャートである。不正マッピングブロックの消去も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【００７４】
不正マッピングブロックの消去においては、ＣＰＵ４はまず内部変数ｂの値をｍにセットし（ステップＳ１１）、フラグ番号が内部変数ｂに一致するフラグの内容を読み出す（ステップＳ１２）。この場合、内部変数ｂ＝ｍであるから、フラグ＃ｍの内容が読み出されることになる。
【００７５】
次に、ＣＰＵ４は、読み出されたフラグの内容が「０（有効）」であるか「１（無効）」であるかを判断し（ステップＳ１３）、その結果、読み出されたフラグの内容が「０（有効）」であれば、対応する物理ブロックアドレス格納領域（この場合は、物理ブロックアドレス格納領域＃ｍ）の内容を読み出し（ステップＳ１４）、その内容により特定されるブロックをブロック消去する（ステップＳ１５）。そして、冗長ブロック登録テーブル３２を構成するビットのうち、内部変数ｂに対応するビットを「１（消去済み）」に書き替えた後（ステップＳ１６）、内部変数ｂをインクリメントする（ステップＳ１７）。一方、ステップＳ１３において、読み出されたフラグの内容が「１（無効）」であれば、上記ステップＳ１４〜Ｓ１６を実行することなく、内部変数ｂをインクリメントする（ステップＳ１７）。ここで、読み出されたフラグの内容が「０（有効）」である場合、当該ブロックは不正マッピングブロックである。
【００７６】
そして、ＣＰＵ４は、内部変数ｂがｎ−１に一致しているか否かを判断し（ステップＳ１８）、その結果、内部変数ｂがｎ−１ではない場合にはステップＳ１２に戻って、内部変数ｂを用いたフラグの読み出しを行い、内部変数ｂがｎ−１に一致している場合には、一連の処理を完了する。
【００７７】
以上のようにして、内部変数ｂがｎ−１に一致するまでステップＳ１２〜ステップＳ１８を繰り返して実行し、これによって不正マッピングブロックの消去が完了する。
【００７８】
このように、本実施態様においては、アドレス変換テーブル３１等の作成動作が完了した後、引き続いて不正マッピングブロックの消去動作（図１０）を実行していることから、アドレス変換テーブル３１の物理ブロックアドレス格納領域＃ｍ〜＃ｎ−２に格納された物理ブロックアドレスにより特定されるブロック、すなわち不正マッピングブロックがブロック消去され、消去済みブロックとして解放されることになる。したがって、不正マッピングブロックの蓄積によってフラッシュメモリ２の全体が使用不能となることがなくなるので、フラッシュメモリ２の信頼性を高めることが可能となる。
【００７９】
尚、上記実施態様においては、アドレス変換テーブル３１等の作成動作が完了した後、引き続いて不正マッピングブロックの消去動作（図１０）を実行しているが、かかる不正マッピングブロックの消去動作（図１０）をアドレス変換テーブル３１等の作成動作が完了するたびに毎回実行する必要はない。したがって、アドレス変換テーブル３１等の作成動作が複数回実行されたことに応答して不正マッピングブロックの消去動作（図１０）を実行しても良いし、また、前回不正マッピングブロックの消去動作（図１０）が実行されてから一定期間が経過したことに応答して不正マッピングブロックの消去動作（図１０）を実行しても良い。さらに、消去済みブロックの数が一定数以下となったことに応答して不正マッピングブロックの消去動作（図１０）を実行しても良い。尚、消去済みブロックの数は、上述した冗長ブロック登録テーブル３２を参照することによって、容易にカウントすることが可能である。
【００８０】
次に、アドレス変換テーブル３１等が作成された後、すなわち初期設定が完了した後におけるフラッシュメモリ２へのアクセス方法について、データの読み出し動作及びデータの書き込み動作の順に説明する。また、データの書き込み動作については、データが全く割り当てられていない論理ブロックアドレスに対して新規にデータを割り当てる場合（データの新規書込動作）と、既にデータが割り当てられている論理ブロックアドレスに対して追加して或いは重ねてデータを割り当てる場合（データの上書き動作）に分けて説明する。
【００８１】
まず、データの読み出し動作について説明する。
【００８２】
図１１は、データの読み出し動作を示すフローチャートである。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【００８３】
データの読み出し動作において、ホストコンピュータよりホストアドレスが供給されると、ＣＰＵ４はまず、ホストアドレスに基づいて論理ブロックアドレスとページアドレス（ＰＡ）を作成する（ステップＳ２１）。生成方法としては、ホストアドレスの上位ビットを論理ブロックアドレスとし、ホストアドレスの下位ビットをページアドレス（ＰＡ）とするのが基本であるが、フラッシュメモリ２が複数の単位領域（ゾーン）に分割されている場合には、ホストアドレスの上位ビットを１ゾーンに含まれる実使用ブロック数で除算し、その商に基づいてゾーンを特定するとともに、剰余に基づいて論理ブロックアドレスを特定すればよい。単純な一例として、フラッシュメモリ２が１０２４（ｎ＝２１０）個のブロックからなる単一ゾーン構成であり、一つのブロックに３２（ｋ＝２５）個のページからなる場合、少なくとも１５ビットのホストアドレスが用いられ、その上位１０ビットが論理ブロックアドレスとなり、下位５ビットがページアドレス（ＰＡ）となる。
【００８４】
次に、ＣＰＵ４は、ＲＡＭ５内に作成されたアドレス変換テーブル３１を参照することにより、論理ブロックアドレスを物理ブロックアドレスに変換する（ステップＳ２２）。具体的には、領域番号が論理ブロックアドレスに一致する物理ブロックアドレス格納領域にアクセスし、ここに格納されている物理ブロックアドレスを読み出すことにより変換を行う。尚、本例はデータの読み出し動作であり、当該ホストアドレスに対応するブロックには原則としてユーザデータが割り当てられているはずであるから、対応するフラグは「０（有効）」となっているはずである。但し、ホストコンピュータによっては、ユーザデータの割り当てられていないホストアドレスに対して読み出し要求を行う場合もある。
【００８５】
そして、ＣＰＵ４は、アドレス変換テーブル３１から読み出された物理ブロックアドレス及び上記ページアドレス（ＰＡ）に基づいてフラッシュメモリ２にアクセスし、対応するページに格納されているデータを読み出す（ステップＳ２３）。この場合、アクセスされるブロックは物理ブロックアドレスによって特定され、アクセスされるページはページアドレス（ＰＡ）によって特定される。
【００８６】
以上により、データの読み出し動作が完了する。
【００８７】
次に、データの書き込み動作について説明する。データの書き込み動作は、上述の通り、データの新規書込動作とデータの上書き動作に分けられることから、ホストコンピュータからデータの書き込み要求がなされた場合、まず、これがデータの新規書込であるのかデータの上書きであるのかの判断が行われる。
【００８８】
図１２は、かかる判断動作を示すフローチャートである。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【００８９】
データの書き込み動作において、ホストコンピュータよりホストアドレスが供給されると、ＣＰＵ４はまず、ホストアドレスに基づいて論理ブロックアドレスとページアドレス（ＰＡ）を作成する（ステップＳ３１）。その生成方法は上述の通りである。
【００９０】
次に、ＣＰＵ４は、フラグ番号が論理ブロックアドレスに一致するフラグを読み出し（ステップＳ３２）、その内容を参照することによって、当該論理ブロックアドレスに対応するブロックが既に割り当てられているか否かを判断する（ステップＳ３３）。これは、本データの書き込み動作がデータの新規書込動作であるのか、或いはデータの上書き動作であるのかを判断することに等しい。
【００９１】
その結果、読み出されたフラグが「１（無効）」であれば、当該論理ブロックアドレスに対応するブロックがまだ割り当てられていない、すなわち、本データの書き込み動作がデータの新規書込動作であると判断することができるので、図１３に示すデータの新規書込動作が実行され、逆に、読み出されたフラグが「０（有効）」であれば、当該論理ブロックアドレスに対応するブロックが既に割り当てられている、すなわち、本データの書き込み動作がデータの上書き動作であると判断することができるので、図１４に示すデータの上書き動作が実行される。
【００９２】
まず、図１３を用いてデータの新規書込動作について説明する。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【００９３】
データの新規書込動作においては、ＣＰＵ４はまず、書き込みキュー３３にアクセスし、キュー＃０〜＃ｈ−１に格納されているいずれかの物理ブロックアドレスを読み出す（ステップＳ４１）。
【００９４】
次に、ＣＰＵ４は、書き込みキュー３３から読み出された物理ブロックアドレス及び上記ページアドレス（ＰＡ）に基づいてフラッシュメモリ２にアクセスし、対応するページ及び当該ブロックの先頭ページ（ページ＃０）に必要なデータを格納する（ステップＳ４２）。ここで、対応するページに格納すべきデータには少なくともユーザデータが含まれ、先頭ページ（ページ＃０）に格納すべきデータには少なくとも論理ブロックアドレスが含まれる。このうちユーザデータは、対応するページのユーザ領域２１に格納され、論理ブロックアドレスは、当該ブロックの先頭ページ（ページ＃０）の論理ブロックアドレス格納領域２３に格納される。
【００９５】
そして、ＣＰＵ４は、アドレス変換テーブル３１、冗長ブロック登録テーブル３２及び書き込みキュー３３の内容を更新する（ステップＳ４３、Ｓ４４、Ｓ４５）。具体的には、アドレス変換テーブル３１の更新については、フラグ番号が論理ブロックアドレスに一致するフラグの値を「０（有効）」に書き替えるとともに、対応する物理ブロックアドレス格納領域に書き込みキュー３３から読み出された物理ブロックアドレスを格納する。また、冗長ブロック登録テーブル３２の更新については、書き込みキュー３３から読み出された物理ブロックアドレスに対応するビットを「０（使用中）」に書き替える。さらに、書き込みキュー３３の更新については、冗長ブロック登録テーブル３２を参照することにより、物理ブロックアドレスの読み出しが行われたキューに新たな消去済みブロックの物理ブロックアドレスを上書きする。
【００９６】
以上によりデータの新規書込動作が完了する。
【００９７】
尚、アドレス変換テーブル３１、冗長ブロック登録テーブル３２及び書き込みキュー３３の更新は、図１３に示す順に行う必要はなく、これとは異なる順で行っても構わない。また、書き込みキュー３３に登録された時点で、対応する冗長ブロック登録テーブル３２のビットを「０（使用中）」に書き替えるよう構成した場合には、図１３に示すステップＳ４４は省略される。
【００９８】
次に、図１４を用いてデータの上書き動作について説明する。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【００９９】
データの上書き動作においては、ＣＰＵ４はまず、領域番号が論理ブロックアドレスに一致する物理ブロックアドレス格納領域にアクセスし、ここに格納されている物理ブロックアドレスを読み出す（ステップＳ５１）。以下、ステップＳ５１において得られた物理ブロックアドレスを「転送元ブロックアドレス」と呼ぶ。
【０１００】
次に、ＣＰＵ４は、書き込みキュー３３にアクセスし、キュー＃０〜＃ｈ−１に格納されているいずれかの物理ブロックアドレスを読み出す（ステップＳ５２）。以下、ステップＳ５２において得られた物理ブロックアドレスを「転送先ブロックアドレス」と呼ぶ。
【０１０１】
次に、ＣＰＵ４は、内部変数ｃの値を０にリセットし（ステップＳ５３）、内部変数ｃの値がページアドレス（ＰＡ）と一致しているか否かを判断する（ステップＳ５４）。その結果、内部変数ｃの値がページアドレス（ＰＡ）と一致していれば、転送先ブロックアドレス及びページアドレス（ＰＡ）に基づいてフラッシュメモリ２にアクセスし、対応するページに必要なデータを格納する（ステップＳ５５）。ここで、対応するページに格納されるデータには少なくともユーザデータが含まれ、かかるユーザデータは、対応するページのユーザ領域２１に格納される。一方、内部変数ｃの値がページアドレス（ＰＡ）と一致していなければ、「ブロック間転送」が行われる（ステップＳ５６）。ブロック間転送においては、転送元ブロックアドレスにより特定されるブロック内の内部変数ｃにより特定されるページの内容が、転送先ブロックアドレスにより特定されるブロック内の内部変数ｃにより特定されるページに転送される。尚、内部変数ｃが「０」である場合には、ステップＳ５５が実行されるかステップＳ５６が実行されるかに関わらず、転送先ブロックアドレスにより特定されるブロックの先頭ページ（ページ＃０）の論理ブロックアドレス格納領域２３に論理ブロックアドレスが格納される。
【０１０２】
次に、ＣＰＵ４は、内部変数ｃをインクリメントした後（ステップＳ５７）、内部変数ｃがｋに一致しているか否かを判断し（ステップＳ５８）、その結果、内部変数ｃがｋではない場合にはステップＳ５４に戻って内部変数ｃとページアドレス（ＰＡ）との比較を行い、内部変数ｃがｋに一致している場合には、後述するステップが実行される。以上のようにして、内部変数ｃがｋに一致するまでステップＳ５４〜ステップＳ５８が繰り返し実行され、これによって、ホストコンピュータより与えられたユーザデータが転送先のブロックの所定のページに書き込まれるとともに、転送元のブロック内に格納されていた上書き対象外のデータが転送先のブロックの同じページに書き込まれることになる。
【０１０３】
ステップＳ５８において内部変数ｃがｋに一致した場合、ＣＰＵ４は、アドレス変換テーブル３１及び書き込みキュー３３の内容を更新する（ステップＳ５９、Ｓ６０）。かかる動作は上述したステップＳ４３、Ｓ４５と同様である。したがって、アドレス変換テーブル３１及び書き込みキュー３３の更新は、図１４に示す順に行う必要はなく、逆の順序で行っても構わない。
【０１０４】
そして、ＣＰＵ４は、転送元ブロックアドレスにより特定されるブロックをブロック消去し（ステップＳ６１）、冗長ブロック登録テーブル３２の内容を更新する（ステップＳ６２）。具体的には、書き込みキュー３３から読み出された物理ブロックアドレスに対応するビットを「０（使用中）」に書き替えるとともに、ステップＳ６１においてブロック消去されたブロックに対応するビットを「１（消去済み）」に書き替える。
【０１０５】
以上によりデータの上書き動作が完了する。
【０１０６】
以上説明したように、本実施態様においては、不正マッピングブロックの消去動作（図１０）によって、アドレス変換テーブル３１の物理ブロックアドレス格納領域＃ｍ〜＃ｎ−２に格納された物理ブロックアドレスにより特定される不正マッピングブロックをブロック消去していることから、不正マッピングブロックの蓄積が効果的に防止され、これにより、フラッシュメモリ２の信頼性を高めることが可能となる。また、本実施態様においては、不正マッピングブロックの消去動作がアドレス変換テーブル３１等の作成動作と独立していることから、既存のファームウェアの多くの部分をそのまま流用することができるという優位性も有している。
【０１０７】
次に、本発明の好ましい他の実施態様について説明する。
【０１０８】
本実施態様は、上記実施態様と異なり、アドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成中に不正マッピングブロックを発見次第、これをブロック消去するものである。以下、具体的に説明する。
【０１０９】
図１５は、本実施態様におけるアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成方法を示すフローチャートである。アドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成は、上述の通り、コントローラ３に対して電源投入またはリセット動作がなされたことに応答して、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することにより行われる。尚、図１５に示すアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成動作は、図９に示したアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成動作と多くの部分において重複するため、図９に示した動作と同じ動作については、同じステップ番号を付し、重複する説明は省略する。
【０１１０】
図１５に示すように、本実施態様ではステップＳ４において論理ブロックアドレスが「オール１（＝ｎ−１）」以外であると判断された場合、ＣＰＵ４は、論理ブロックアドレスがｍ〜ｎ−２であるか否かを判断する（ステップＳ７１）。すなわち、当該ブロックが不正マッピングブロックであるか否かを判断する。その結果、論理ブロックアドレスがｍ〜ｎ−２以外であれば（不正マッピングブロックでなければ）、ＣＰＵ４は、上述したステップＳ５以降の動作を実行するが、論理ブロックアドレスがｍ〜ｎ−２のいずれかであれば（不正マッピングブロックであれば）、当該ブロックをブロック消去する（ステップＳ７２）。この場合、ステップＳ５〜Ｓ７は実行されず、ＣＰＵ４は直ちに内部変数ａのインクリメントを行う（ステップＳ８）。以上のようにして、内部変数ａがｎに一致するまでステップＳ３〜ステップＳ９及びステップＳ７１、Ｓ７２が繰り返し実行され、これによってアドレス変換テーブル３１及び冗長ブロック登録テーブル３２が完成する。
【０１１１】
尚、アドレス変換テーブル３１等が作成された後、すなわち初期設定が完了した後におけるフラッシュメモリ２へのアクセス方法については、上記実施態様と同様である。
【０１１２】
このように、本実施態様においては、アドレス変換テーブル３１等の作成動作中に不正マッピングブロックが発見された場合、その都度これをブロック消去し、通常の消去済みブロックに変換していることから、上記実施態様と同様、不正マッピングブロックの蓄積によってフラッシュメモリ２の全体が使用不能となることがなくなる。これにより、フラッシュメモリ２の信頼性を高めることが可能となる。また、本実施態様によれば、不正マッピングブロックの消去動作をアドレス変換テーブル３１等の作成動作中に組み込んでいることから、これをＣＰＵ４に実行させるためのファームウェアを小型化することが可能となる。
【０１１３】
次に、本発明の好ましいさらに他の実施態様について説明する。
【０１１４】
本実施態様は、上記２つの実施態様とは異なり、アドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成中に不正マッピングブロックを発見した場合であっても、これを消去済みブロックとみなしてこれらと同様に取り扱う一方で、ホストコンピュータよりデータの書き込みが指示された場合、所定のブロックに実際にデータを書き込む前に、当該ブロックが消去済みブロックであるか否かをチェックするというものである。以下、具体的に説明する。
【０１１５】
図１６は、本実施態様におけるアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成方法を示すフローチャートである。アドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成は、上述の通り、コントローラ３に対して電源投入またはリセット動作がなされたことに応答して、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することにより行われる。尚、図１６に示すアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成動作は、図９に示したアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成動作と多くの部分において重複するため、図９に示した動作と同じ動作については、同じステップ番号を付し、重複する説明は省略する。
【０１１６】
図１６に示すように、本実施態様では、ステップＳ４における判断の代わりに、論理ブロックアドレスがｍ以上であるか否かの判断を行っている（ステップＳ７３）。そして、論理ブロックアドレスがｍ未満（０〜ｍ−１）であると判断された場合、すなわち、有効な論理ブロックアドレスであると判断された場合には、ＣＰＵ４は、上述したステップＳ５以降の動作を実行する。一方、ステップＳ７３において、論理ブロックアドレスがｍ以上（ｍ〜ｎ−１）であると判断された場合、すなわち、当該ブロックが消去済みブロックまたは不正マッピングブロックであると判断された場合には、ステップＳ５〜Ｓ７は実行されず、ＣＰＵ４は直ちに内部変数ａのインクリメントを行う（ステップＳ８）。以上のようにして、内部変数ａがｎに一致するまでステップＳ３、ステップＳ７３、ステップＳ５〜Ｓ９が繰り返し実行され、これによってアドレス変換テーブル３１及び冗長ブロック登録テーブル３２が完成する。
【０１１７】
これにより、不正マッピングブロックは消去済みブロックと同様、冗長ブロック登録テーブル３２における対応するビットが「１（消去済み）」とされるので、引き続き行われる書き込みキュー３３の作成動作（図示せず）において、不正マッピングブロックの物理ブロックアドレスがキューに登録される可能性がある。
【０１１８】
このようにして、アドレス変換テーブル３１等が作成された後、すなわち初期設定が完了した後、ホストコンピュータよりデータの書き込みが指示された場合、キューの読み出し直後に以下に詳述するベリファイ動作が挿入される。つまり、データの新規書込動作においては、ステップＳ４１とステップＳ４２との間にベリファイ動作が挿入され、データの上書き動作においては、ステップＳ５２とステップＳ５３との間にベリファイ動作が挿入される。
【０１１９】
図１７は、ベリファイ動作を示すフローチャートである。ベリファイ動作は、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【０１２０】
ベリファイ動作では、まずＣＰＵ４は、内部変数ｄの値を０にリセットし（ステップＳ８１）、ステップＳ４１又はステップＳ５２においてキューから読み出された物理ブロックアドレスにより特定されるブロックのうち、ページ番号が内部変数ｄに一致するページにアクセスし、その内容を読み出す（ステップＳ８２）。
【０１２１】
次に、ＣＰＵ４は、読み出された内容が「オール１」であるか否かを判断し（ステップＳ８３）、その結果、読み出された内容が「オール１」であれば内部変数ｄをインクリメントし（ステップＳ８４）、さらに内部変数ｄがｋに一致しているか否かを判断する（ステップＳ８５）。その結果、内部変数ｄがｋに一致していなければステップＳ８２に戻って内部変数ｄを用いたページの読み出しを行い、内部変数ｄがｋに一致していれば、当該ブロックが消去済みブロックであることが確認されたことから、一連のベリファイ動作を終了し、ステップＳ４２又はステップＳ５３に復帰する。
【０１２２】
一方、ステップＳ８３において、読み出された内容が「オール１」以外であれば、当該ブロックは消去済みブロックではないと判断できることから、ＣＰＵ４は、当該ブロックに対してブロック判定処理（ステップＳ８６）を実行する。ブロック判定処理とは、不良ブロックであるか否かを判定するための処理であり、その詳細については後述する。
【０１２３】
そして、当該ブロックが正常なブロックであるか否かを判断し（ステップＳ８７）、その結果、当該ブロックが正常なブロックであると判断された場合には、ステップＳ４１又はステップＳ５２に戻って再びキューの読み出しを行い、当該ブロックが不良ブロックであると判断された場合には、不良ブロック化処理（ステップＳ８８）を行った後、ステップＳ４１又はステップＳ５２に戻って再びキューの読み出しを行う。不良ブロック化処理とは、冗長領域２２の領域２４に格納されるブロックステータスを「不良ブロック」である旨の内容に書き替える等により、今後このブロックが使用されることがないよう処置することをいう。
【０１２４】
図１８は、ブロック判定処理（ステップＳ８６）を示すフローチャートである。ブロック判定処理も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【０１２５】
ブロック判定処理では、まずＣＰＵ４は、内部変数ｅの値を０にリセットし（ステップＳ９１）、判定対象のブロックのうち、ページ番号が内部変数ｅに一致するページにアクセスし、このページに「オール０」からなるデータを書き込む（ステップＳ９２）。次に、ＣＰＵ４は、内部変数ｅをインクリメントした後（ステップＳ９３）、内部変数ｅがｋに一致しているか否かを判断し（ステップＳ９４）、その結果、内部変数ｅがｋに一致していなければステップＳ９２に戻って内部変数ｅを用いた「オール０」からなるデータの書き込みを行う。
【０１２６】
このような動作を内部変数ｅがｋに一致するまで行い、内部変数ｅがｋに一致すると、ＣＰＵ４は内部変数ｆの値を０にリセットし（ステップＳ９５）、判定対象のブロックのうち、ページ番号が内部変数ｆに一致するページにアクセスし、その内容を読み出す（ステップＳ９６）。
【０１２７】
次に、ＣＰＵ４は、読み出された内容が「オール０」であるか否かを判断し（ステップＳ９７）、その結果、読み出された内容が「オール０」であれば内部変数ｆをインクリメントし（ステップＳ９８）、さらに内部変数ｆがｋに一致しているか否かを判断する（ステップＳ９９）。その結果、内部変数ｆがｋに一致していなければステップＳ９６に戻って内部変数ｆを用いたページの読み出しを行い、内部変数ｆがｋに一致していれば、当該ブロックをブロック消去する（ステップＳ１００）。
【０１２８】
次に、ＣＰＵ４は、内部変数ｇの値を０にリセットし（ステップＳ１０１）、判定対象のブロックのうち、ページ番号が内部変数ｇに一致するページにアクセスし、その内容を読み出す（ステップＳ１０２）。そして、ＣＰＵ４は、読み出された内容が「オール１」であるか否かを判断し（ステップＳ１０３）、その結果、読み出された内容が「オール１」であれば内部変数ｇをインクリメントし（ステップＳ１０４）、さらに内部変数ｇがｋに一致しているか否かを判断する（ステップＳ１０５）。その結果、内部変数ｇがｋに一致していなければステップＳ１０２に戻って内部変数ｇを用いたページの読み出しを行い、内部変数ｇがｋに一致していれば、当該ブロックに含まれる全てのメモリセル１０について、消去状態（１）から書込状態（０）への遷移及び書込状態（０）から消去状態（１）への遷移が正常に行われるとともに、当該ブロックが消去済みブロックとなったことが確認されたことから、一連のブロック判定処理を終了する。これは、図１７に示すステップＳ８７において正常なブロックであると判断された場合に相当する。
【０１２９】
一方、ステップＳ９７において消去状態（０）であるメモリセルが発見された場合や、ステップＳ１０３において書込状態（１）であるメモリセルが発見された場合には、当該ブロックが不良ブロックであると判断して一連のブロック判定処理を終了する。これは、図１７に示すステップＳ８７において不良ブロックであると判断された場合に相当する。
【０１３０】
このように、本実施態様においては、ホストコンピュータよりデータの書き込みが指示された場合、所定のブロックに実際にデータを書き込む前に、図１７に示すベリファイ動作によって当該ブロックが消去済みブロックであるか否かをチェックし、さらに、このブロックが消去済みブロックではないと判断された場合には、ステップＳ４１又はステップＳ５２に戻って新たにキューの読み出しを行っていることから、書き込みキュー３３に不正マッピングブロックの物理ブロックアドレスが登録されていた場合であっても、このようなブロックに直接データが書き込まれることなく、データの書き込みを正しく実行することが可能となる。
【０１３１】
また、ベリファイ動作において消去済みブロックではないと判断された場合、図１８に示すブロック判定処理が行われることから、かかる処理によって不正マッピングブロックが通常の消去済みブロックに変換される。このため、上記実施態様と同様、不正マッピングブロックの蓄積によってフラッシュメモリ２の全体が使用不能となることがなく、フラッシュメモリ２の信頼性を高めることが可能となる。
【０１３２】
さらに、本実施態様によれば、アドレス変換テーブル３１等の作成動作中においては、不正マッピングブロックを消去済みブロックと同等に取り扱い、この時点では不正マッピングブロックの消去を行わないことから、アドレス変換テーブル３１等の作成動作（初期設定動作）を高速に完了することが可能となる。
【０１３３】
尚、図１７から明らかなように、ステップＳ８３において書込状態（０）のセルが検出された場合、その後行われるブロックの判定処理（図１８）の結果いかんに関わらず、ステップＳ４１又はステップＳ５２に戻って新たなキューの読み出しが行われることから、データの書き込みのパフォーマンスを向上させるためには、ブロック判定処理（図１８）をペンディングして先にステップＳ４１又はステップＳ５２による新たなキューの読み出しが行い、その後、一連のデータ書き込み処理が完了してからブロック判定処理（図１８）を実行することが望ましい。
【０１３４】
また、上記実施態様においては、ステップＳ８３において書込状態（０）のセルが検出された場合、その後行われるブロックの判定処理（図１８）において正常なブロックであると判定されるか不良ブロックであると判定されるかに関わらず、ステップＳ４１又はステップＳ５２に戻って新たにキューの読み出しを行っているが、ブロックの判定処理（図１８）の結果、正常なブロックであると判定された場合は、新たなキューを読み出すことなく、当該ブロックに対してデータの書き込みを行うよう構成しても構わない。ただしこの場合、ブロックの判定処理（図１８）の結果が判明するまで次の処理を実行できないので、パフォーマンスを極端に低下させないためには、同じブロックに対する連続したベリファイ動作（図１７）の回数に制限を持たせることが好ましい。
【０１３５】
本発明は、以上の実施態様に限定されることなく、特許請求の範囲に記載された発明の範囲内で種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることはいうまでもない。
【０１３６】
また、本発明において、手段とは、必ずしも物理的手段を意味するものではなく、各手段の機能がソフトウエアによって実現される場合も包含する。さらに、一つの手段の機能が二以上の物理的手段により実現されても、二以上の手段の機能が一つの物理的手段により実現されてもよい。
【０１３７】
尚、本発明は、ＰＣＭＣＩＡ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ  Ｍｅｍｏｒｙ  Ｃａｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ａｓｓｏｃｉａｔｉｏｎ）が発表した統一規格に基づくＰＣカードとして実現することが可能である。さらに、近年、半導体素子の高集積化技術の発展に伴い、より小型化された小型メモリカード、例えば、ＣＦＡ（ＣｏｍｐａｃｔＦｌａｓｈ  Ａｓｓｏｃｉａｔｉｏｎ）が提唱する「ＣｏｍｐａｃｔＦｌａｓｈ」や、ＭｕｌｔｉＭｅｄｉａＣａｒｄＡｓｓｏｃｉａｔｉｏｎの提唱する「ＭＭＣ（ＭｕｌｔｉＭｅｄｉａＣａｒｄ）」、ソニー株式会社が提唱する「メモリースティック」、松下電器産業株式会社等が提唱する「ＳＤメモリーカード」などに本発明を適用することが可能である。
【０１３８】
【発明の効果】
以上説明したように、本発明においては、有効な論理アドレスに対応せずしかも消去済みブロックとしても取り扱われない不正マッピングブロックが存在するか否かが判断され、その結果不正マッピングブロックの存在が明らかとなった場合にはこれをブロック消去していることから、不正マッピングブロックの蓄積によってフラッシュメモリ全体が使用不能となることがない。このため、本発明によれば、フラッシュメモリの信頼性を高めることが可能となる。
【図面の簡単な説明】
【図１】本発明の好ましい実施態様にかかるフラッシュメモリシステム１を概略的に示すブロック図である。
【図２】消去状態であるメモリセル１０を概略的に示す断面図である。
【図３】書込状態であるメモリセル１０を概略的に示す断面図である。
【図４】フラッシュメモリ２のアドレス空間の構造を概略的に示す図である。
【図５】冗長領域２２のデータ構造を概略的に示す図である。
【図６】アドレス変換テーブル３１のデータ構造を示す図である。
【図７】冗長ブロック登録テーブル３２のデータ構造を示す図である。
【図８】書き込みキュー３３のデータ構造を示す図である。
【図９】アドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成方法を示すフローチャートである。
【図１０】不正マッピングブロックの消去方法を示すフローチャートである。
【図１１】データの読み出し動作を示すフローチャートである。
【図１２】ホストコンピュータからデータの書き込み要求がデータの新規書込であるのかデータの上書きであるのかを判断するためのフローチャートである。
【図１３】データの新規書込動作を示すフローチャートである。
【図１４】データの上書き動作を示すフローチャートである。
【図１５】本発明の好ましい他の実施態様におけるアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成方法を示すフローチャートである。
【図１６】本発明の好ましいさらに他の実施態様におけるアドレス変換テーブル３１及び冗長ブロック登録テーブル３２の作成方法を示すフローチャートである。
【図１７】ベリファイ動作を示すフローチャートである。
【図１８】ブロック判定処理を示すフローチャートである。
【図１９】論理アドレスと物理アドレスとの関係を模式的に示す図である。
【図２０】最大物理アドレス空間１１を構成するｎ個のブロックの構造を模式的に示す図である。
【符号の説明】
１  フラッシュメモリシステム
２  フラッシュメモリ
３  コントローラ
４  ＣＰＵ
５  ＲＡＭ
６  ＲＯＭ
１０  メモリセル
１１  Ｐ型半導体基板
１２  ソース拡散領域
１３  ドレイン拡散領域
１４  トンネル酸化膜
１５  フローティングゲート電極
１６  絶縁膜
１７  コントロールゲート電極
１８  チャネル
２１  ユーザ領域
２２  冗長領域
２３  論理ブロックアドレス格納領域
２４  その他の付加情報を格納するための領域
３１  アドレス変換テーブル
３２  冗長ブロック登録テーブル
３３  書き込みキュー
【図１】
0003999564.tif 000002
【図２】
0003999564.tif 000003
【図３】
0003999564.tif 000004
【図４】
0003999564.tif 000005
【図５】
0003999564.tif 000006
【図６】
0003999564.tif 000007
【図７】
0003999564.tif 000008
【図８】
0003999564.tif 000009
【図９】
0003999564.tif 000010
【図１０】
0003999564.tif 000011
【図１１】
0003999564.tif 000012
【図１２】
0003999564.tif 000013
【図１３】
0003999564.tif 000014
【図１４】
0003999564.tif 000015
【図１５】
0003999564.tif 000016
【図１６】
0003999564.tif 000017
【図１７】
0003999564.tif 000018
【図１８】
0003999564.tif 000019
【図１９】
0003999564.tif 000020
【図２０】
0003999564.tif 000021