(57)【要約】【課題】空きブロックの検索を特定の物理ブロックに集中させないメモリコントローラおよびフラッシュメモリシステムを提供する。【解決手段】アドレス変換テーブル１００は、ワークエリアに保存され、対応する論理ゾーンと物理ゾーンの組毎に形成され、該論理ゾーン内論理ブロック番号ＬＺＩＢＮと物理ゾーン内物理ブロック番号ＰＺＩＢＮとの対応関係を記憶する。ある論理ブロックに対してアクセスがあったとき、当該論理ブロックのＬＺＩＢＮを調べ、アドレス変換テーブル１００を用いて当該論理ブロックに対応する物理ブロックのＰＺＩＢＮを取得する。取得した物理ブロックのＰＺＩＢＮに１を加えたＰＺＩＢＮを有する物理ブロックから、ＰＺＩＢＮ順に、空きブロックの検索を行う。【選択図】図３
2007206835.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムからの命令に応答してフラッシュメモリへのアクセスを制御するメモリコントローラであって、
前記フラッシュメモリにおける消去単位である物理ブロックを複数個集めた物理ゾーンと前記ホストシステムにおけるアクセス単位であるセクタを複数集めた論理ゾーンとの対応関係を管理するゾーン管理手段と、
対応関係にある前記論理ゾーンと前記物理ゾーンとの間で、該論理ゾーン内の論理アドレスと該物理ゾーン内の物理アドレスとの対応関係を管理するアドレス管理手段と、
前記物理ゾーン内の物理ブロックの使用状況を順次走査していくことにより空きブロックを検出する空きブロック検索手段と、
を備え、
前記空きブロック検索手段は、前回の走査で検出された空きブロックに関する情報が保持されている場合は、前回の走査で検出された空きブロックの次の物理ブロックから使用状況の走査を開始し、前回の走査で検出された空きブロックに関する情報が保持されていない場合は、検出した空きブロックに書き込む新データと対応関係にある旧データが記憶されている物理ブロックの次の物理ブロックから使用状況の走査を開始するように構成されている、
ことを特徴とするメモリコントローラ。
【請求項２】
ホストシステムからの命令に応答してフラッシュメモリへのアクセスを制御するメモリコントローラであって、
前記フラッシュメモリにおける消去単位である物理ブロックを複数個集めた物理ゾーンと前記ホストシステムにおけるアクセス単位であるセクタを複数集めた論理ゾーンとの対応関係を管理するゾーン管理手段と、
対応関係にある前記論理ゾーンと前記物理ゾーンとの間で、該論理ゾーン内の論理アドレスと該物理ゾーン内の物理アドレスとの対応関係を管理するアドレス管理手段と、
前記物理ゾーン内の物理ブロックの使用状況を順次走査していくことにより空きブロックを検出する空きブロック検索手段と、
を備え、
前記空きブロック検索手段は、検出した空きブロックに書き込む新データと対応関係にある旧データが記憶されている物理ブロックの次の物理ブロックから使用状況の走査を開始するように構成されている、
ことを特徴とするメモリコントローラ。
【請求項３】
前記空きブロック検索手段は、起動後に各ビットの論理値が対応関係にある前記物理ブロックの使用状況を示している複数ビットの記憶領域で構成された空きブロック検索テーブルを作成し、該空きブロック検索テーブルを用いて前記物理ブロックの使用状況の走査を行う、
ことを特徴とする請求項１または２に記載のメモリコントローラ。
【請求項４】
請求項１から３のいずれか１項に記載のメモリコントローラと、
フラッシュメモリと、
から構成されることを特徴とするフラッシュメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラおよび当該メモリコントローラを備えるフラッシュメモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性の記憶媒体であるフラッシュメモリの開発が行われ、デジタルカメラ等の情報機器（ホストシステム）の記憶媒体として普及している。
このような機器が扱うデータが大容量化したことに伴い、フラッシュメモリの記憶容量も大容量化が進んでいる。このように大容量化したフラッシュメモリを円滑に管理するため、近年は、この記憶領域を複数のゾーンに分割して管理する手法が用いられている（たとえば、特許文献１を参照）。
【０００３】
従来の複数のゾーンを有するフラッシュメモリの記憶領域を、より具体的に示せば、例えば図１１に示す形に区画され、管理されていた。
【０００４】
すなわち、データの物理的な読み書きの単位であるページを所定数含んだ、データ消去の単位である物理ブロックには、それぞれに固有の物理ブロックアドレス（ＰＢＡ）が割り当てられている。各物理ブロックは、複数の物理ゾーンのいずれかに分類され、各物理ゾーンには、それぞれに固有の物理ゾーン番号（ＰＺＮ）が割り当てられる。図１１の例では、計２０４８個の物理ブロックに＃０〜＃２０４７の連続するＰＢＡが割り当てられており、ＰＢＡ＃０〜＃５１１の計５１２個の物理ブロックがＰＺＮ＃０の物理ゾーンに属し、ＰＢＡ＃５１２〜＃１０２３の計５１２個の物理ブロックがＰＺＮ＃１の物理ゾーンに属し、ＰＢＡ＃１０２４〜＃１５３５の計５１２個の物理ブロックがＰＺＮ＃２の物理ゾーンに属し、ＰＢＡ＃１５３６〜＃２０４７の計５１２個の物理ブロックがＰＺＮ＃３の物理ゾーンに属する。
【０００５】
また、各ページには物理ページアドレス（ＰＰＡ）が割り当てられている。ＰＰＡは、ページが属する物理ブロックのＰＢＡの下位に、当該物理ブロック内での当該ページの通番であるページ番号（ＰＮ）を付加した形をとっている。
【０００６】
一方、ホストシステム側のアドレス空間は、セクタ（５１２バイト）単位で分割した領域に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。更に、複数個のセクタをまとめたものを論理ブロックと呼び、複数個の論理ブロックをまとめたものを論理ゾーンと呼んでいる。又、論理ブロックに付けられた通番を論理ブロック番号（ＬＢＮ）と呼び、論理ゾーンに付けられた通番を論理ゾーン番号（ＬＺＮ）と呼んでいる。又、各論理ゾーンに含まれる論理ブロックの、各論理ゾーン内での通番を論理ゾーン内ブロック番号（ＬＺＩＢＮ）と呼んでいる。
【０００７】
従って、各論理ゾーンに含まれる論理ブロック数をｎとした場合、ＬＢＮをｎで割ったときの商がＬＺＮに対応し、余りがＬＺＩＢＮに対応する。
【０００８】
又、各論理ゾーンにはそれぞれ１個の物理ゾーンが割り当てられ、論理ゾーンに含まれる各論理ブロックに対応するデータは、その論理ゾーンに割り当てられた物理ゾーンに含まれる物理ブロックに書き込まれる。更に、データが書き込まれた物理ブロックの冗長領域には、そのデータに対応する論理ブロックのＬＺＩＢＮ（又は、ＬＢＮ）が書き込まれる。
【０００９】
なお、物理ブロックと論理ブロックとの対応関係は、データの書き込みや消去が行われる毎に変化する。このため、個々の時点における両者の対応関係を管理するためアドレス変換テーブルが作成され、対応関係が変化する毎にアドレス変換テーブルが更新される。このアドレス変換テーブルは論理ゾーン毎に作成することができる。つまり、論理ゾーンと物理ゾーンとの対応関係は予め設定されているので、アクセス対象の物理ゾーンに含まれる物理ブロックの冗長領域に書き込まれているＬＺＩＢＮを参照することによりアドレス変換テーブルを作成することができる。
【００１０】
ここで、冗長領域に書き込まれる論理ブロックを特定する情報（以下、論理アドレス情報という。）は、ＬＢＮであってもアドレス変換テーブルを作成することができるが、一般的にはデータ量の少ないＬＺＩＢＮが論理アドレス情報として冗長領域に書き込まれる。
【００１１】
一般的に、各論理ゾーンには、ＬＢＡが連続する複数のセクタが割り当てられている。図１１の例では、ＬＺＮ＃０の論理ゾーンにＬＢＡ＃０〜＃１５９９９のセクタが、ＬＺＮ＃１の論理ゾーンにＬＢＡ＃１６０００〜＃３１９９９のセクタが、ＬＺＮ＃２の論理ゾーンにＬＢＡ＃３２０００〜＃４７９９９のセクタが、ＬＺＮ＃３の論理ゾーンにＬＢＡ＃４８０００〜＃６３９９９のセクタが、それぞれ割り当てられている。なお、この例では、フラッシュメモリの１個のページが１個のセクタに対応し、各物理ブロックは、３２個のページで構成されている。
【００１２】
各論理ゾーンに割り当てられた１６０００個のセクタは、論理ゾーン内でＬＢＡが連続する３２個のセクタ単位で論理ブロックとして管理されている。従って、言い換えれば、ＬＢＡが連続する３２個のセクタを論理ブロックとして、ＬＢＮが連続する論理ブロックを各論理ゾーンに５００個（ＬＺＩＢＮ＃０〜＃４９９）ずつ割り当てている。ここで、論理ブロックに含まれるセクタ数については、１個の論理ブロックと１個又は複数個の物理ブロックの容量が一致するよう適宜設定される。又、物理ブロックの各ページにはＬＢＡの順番でデータが格納されるので、各論理ゾーンに含まれる論理ブロックと、その論理ゾーンに対応する物理ゾーンに含まれる物理ブロックとの対応関係に基づいて、フラッシュメモリ内のアクセス先を特定することができる。
【特許文献１】特開２００５−１８４９０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
データを新たにフラッシュメモリに書き込む際には、書き込む論理ゾーンに対応する物理ゾーンを検索し、その物理ゾーン内の使用されていない物理ブロック（空きブロック）を検索し、その空きブロックに対してデータを書き込む必要がある。この空きブロック検索では、通常、各物理ゾーンに含まれる物理ブロックの使用状況を物理ブロックアドレスの順番で走査していくことにより空きブロックを検出する。又、この使用状況の走査は、前回の検索で検出された空きブロックの次の物理ブロックアドレスから開始される。つまり、この使用状況の走査は、空きブロックを検出すると終了し、次回の走査は、この空きブロックの次の物理ブロックアドレスから開始される。しかし、電源をオンした後（起動後）の最初の検索で、前回の検索で検出された空きブロックの次の物理ブロックアドレスから走査を開始するためには、前回の検索で検出された空きブロックの物理ブロックアドレスを特定する情報を不揮発性メモリに記憶させておかなければならない。又、電源をオンした後（起動後）の最初の検索については、所定の物理ブロックアドレスから検索を開始するようにしてもよいが、その場合、空きブロックの検索が特定の物理ブロックに偏ってしまう。
【００１４】
本発明は、上記問題点に鑑みてなされたものであり、空きブロックの検索を特定の物理ブロックに偏らせないメモリコントローラおよびフラッシュメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するため、本発明の第１の観点に係るメモリコントローラは、
ホストシステムからの命令に応答してフラッシュメモリへのアクセスを制御するメモリコントローラであって、
前記フラッシュメモリにおける消去単位である物理ブロックを複数個集めた物理ゾーンと前記ホストシステムにおけるアクセス単位であるセクタを複数集めた論理ゾーンとの対応関係を管理するゾーン管理手段と、
対応関係にある前記論理ゾーンと前記物理ゾーンとの間で、該論理ゾーン内の論理アドレスと該物理ゾーン内の物理アドレスとの対応関係を管理するアドレス管理手段と、
前記物理ゾーン内の物理ブロックの使用状況を順次走査していくことにより空きブロックを検出する空きブロック検索手段と、
を備え、
前記空きブロック検索手段は、前回の走査で検出された空きブロックに関する情報が保持されている場合は、前回の走査で検出された空きブロックの次の物理ブロックから使用状況の走査を開始し、前回の走査で検出された空きブロックに関する情報が保持されていない場合は、検出した空きブロックに書き込む新データと対応関係にある旧データが記憶されている物理ブロックの次の物理ブロックから使用状況の走査を開始するように構成されている、
ことを特徴とする。
【００１６】
上記課題を解決するため、本発明の第２の観点に係るメモリコントローラは、
ホストシステムからの命令に応答してフラッシュメモリへのアクセスを制御するメモリコントローラであって、
前記フラッシュメモリにおける消去単位である物理ブロックを複数個集めた物理ゾーンと前記ホストシステムにおけるアクセス単位であるセクタを複数集めた論理ゾーンとの対応関係を管理するゾーン管理手段と、
対応関係にある前記論理ゾーンと前記物理ゾーンとの間で、該論理ゾーン内の論理アドレスと該物理ゾーン内の物理アドレスとの対応関係を管理するアドレス管理手段と、
前記物理ゾーン内の物理ブロックの使用状況を順次走査していくことにより空きブロックを検出する空きブロック検索手段と、
を備え、
前記空きブロック検索手段は、検出した空きブロックに書き込む新データと対応関係にある旧データが記憶されている物理ブロックの次の物理ブロックから使用状況の走査を開始するように構成されている、
ことを特徴とする。
【００１７】
前記空きブロック検索手段は、起動後に各ビットの論理値が対応関係にある前記物理ブロックの使用状況を示している複数ビットの記憶領域で構成された空きブロック検索テーブルを作成し、該空きブロック検索テーブルを用いて前記物理ブロックの使用状況の走査を行う、
ようにしてもよい。
【００１８】
上記課題を解決するため、本発明の第３の観点に係るフラッシュメモリシステムは、
上記のメモリコントローラと、
フラッシュメモリと、
から構成されることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、物理ゾーン内の物理ブロックの使用状況を順次走査していくことにより空きブロックを検出するように構成されているメモリコントローラで、前回の検索で検出された空きブロックに関する情報が保持されていない場合に、空きブロックに書き込む書き換えデータに対応する旧データが記憶されている物理ブロックの次の物理ブロックから空きブロックの検索を開始するので、空きブロック検索を特定の物理ブロックに偏らせないメモリコントローラおよびフラッシュメモリシステムを提供できる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施形態について、図面を参照して説明する。
【００２１】
図１は、本発明に係るフラッシュメモリシステム１を概略的に示すブロック図である。図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するコントローラ３で構成されている。
【００２２】
なお、フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続される。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成される。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２３】
フラッシュメモリ２は、不揮発性メモリであり、レジスタと、メモリセルアレイとから構成される。フラッシュメモリ２は、レジスタとメモリセルとの間でデータの複写を行って、データの書き込み又は読み出しを行う。
【００２４】
メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、即ち、レジスタから選択されたメモリセルへの複写又は選択されたメモリセルからレジスタへのデータの複写が行われる。
【００２５】
メモリセルアレイを構成するメモリセルは、２つのゲートを備えたＭＯＳトランジスタによって構成される。ここで、上側のゲート、下側のゲートは、それぞれ、コントロールゲート、フローティングゲートと呼ばれており、フローティングゲートに電荷（電子）を注入若しくはフローティングゲートから電荷（電子）を排出することによって、データの書き込み若しくはデータの消去が行われる。
【００２６】
このフローティングゲートは、周囲を絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧をコントロールゲートとフローティングゲート間に印加する。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧をコントロールゲートとフローティングゲート間に印加する。
【００２７】
ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「０」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「１」に対応する。
【００２８】
このようなフラッシュメモリ２のアドレス空間を図２に示す。フラッシュメモリ２のアドレス空間は、“ページ”及び“ブロック（物理ブロック）”で構成されている。
【００２９】
ページは、フラッシュメモリ２にて行われるデータ読み出し動作及びデータ書き込み動作における処理単位である。物理ブロックは、フラッシュメモリ２にて行われるデータ消去動作における処理単位であり、複数個のページで構成されている。
【００３０】
図２に示したフラッシュメモリ２では、１つのページは、１セクタ（５１２バイト）のユーザ領域２５と、１６バイトの冗長領域２６で構成され、１つの物理ブロックは３２個のページで構成されている。なお、１つのページが４セクタのユーザ領域と６４バイトの冗長領域で構成され、１つの物理ブロックが６４個のページで構成されているフラッシュメモリもある。ユーザ領域２５は、ホストシステム４から供給されるユーザデータを記憶するための領域である。
【００３１】
冗長領域２６は、ＥＣＣ（Error Correcting Code）、論理アドレス情報、ブロックステータス（フラグ）等の付加データを記憶するための領域である。
【００３２】
ＥＣＣは、ユーザ領域２５に記憶されているデータに含まれる誤りを検出し、訂正するためのデータである。
【００３３】
論理アドレス情報は、フラッシュメモリ２の各物理ブロックに含まれている少なくとも１個のページのユーザ領域２５に有効なデータが格納されているとき、そのデータに対応する論理ブロックを特定するための情報である。
【００３４】
なお、ユーザ領域２５に有効なデータが格納されていない物理ブロックについては、そのブロックの冗長領域２６に、論理アドレス情報は格納されていない。
【００３５】
したがって、冗長領域２６に論理アドレス情報が格納されているか否かを判定することにより、その冗長領域２６が含まれている物理ブロックに有効なデータが格納されているか否かを判定することができる。つまり、冗長領域２６に論理アドレス情報が格納されていないとき、その物理ブロックには、有効なデータが格納されていないと判定される。
【００３６】
上述のように、１つの物理ブロックは、複数のページを含んでいる。これらのページには、データの上書きができない。このため、１つのページに格納されたデータのみを書き換えるときであっても、そのページが含まれた物理ブロック内の全ページに格納されたデータを、再度書き込まなければならない。
【００３７】
つまり、通常のデータ書き換えでは、書き換えるページが含まれる物理ブロックの全ページに格納されたデータが、別の消去されている物理ブロックに書き込まれる。この際、データが変更されないページに格納されているデータは、以前に格納されていたデータがそのまま再度書き込まれる。
【００３８】
上記のようにデータを書き換えるにあたっては、通常、書き換えられたデータは、以前に格納されていた物理ブロックとは異なる物理ブロックに書き込まれる。このため、論理ブロックアドレスと物理ブロックアドレスの間の対応関係は、フラッシュメモリ２にてデータが書き換えられる毎に、動的に変化する。
【００３９】
したがって、論理ブロックと物理ブロックとの対応関係を管理する必要があり、通常、この対応関係は、アドレス変換テーブルによって管理される。このアドレス変換テーブルは、相互対応する論理ゾーンと物理ゾーンとの組毎に構成され、論理ゾーンに含まれる論理ブロックと物理ゾーンに含まれる物理ブロックとの対応関係を示している。又、このアドレス変換テーブルは、各物理ブロックの冗長領域２６に記憶されている論理アドレス情報（ＬＺＩＢＮ又はＬＢＮ）に基づいて作成される。
【００４０】
ブロックステータス（フラグ）は、ブロックの良否を示すフラグである。正常にデータの書き込み等を行うことができないブロックは、不良ブロックと判別され、冗長領域２６には、不良ブロックであることを示すブロックステータス（フラグ）が書き込まれる。
【００４１】
このようなフラッシュメモリ２は、コントローラ３から、データ、アドレス情報、内部コマンド等を受信して、データの読み出し処理、書き込み処理、ブロック消去処理、転送処理等の各処理を行う。
【００４２】
ここで、内部コマンドとは、コントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、コントローラ３から与えられる内部コマンドに従って動作する。これに対して、外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。
【００４３】
コントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣブロック１１と、ＲＯＭ（Read Only Memory）１２と、から構成される。これら機能ブロックによって構成されるコントローラ３は、一つの半導体チップ上に集積される。以下に各機能ブロックについて説明する。
【００４４】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、コントローラ３の全体の動作を制御する。例えば、マイクロプロセッサ６は、各種処理等を定義したコマンドセットをＲＯＭ１２から読み出してフラッシュメモリインターフェースブロック１０に供給し、フラッシュメモリインターフェースブロック１０に処理を実行させる。
マイクロプロセッサ６は、たとえば、シフトレジスタとフラグレジスタとを備え、フラグレジスタはシフトレジスタの演算によりキャリーが発生した場合、キャリーフラグを立てる。
【００４５】
ホストインターフェースブロック７は、ホストシステム４との間の、データ、アドレス情報、ステータス情報、外部コマンド等の授受を行なう。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（例えば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００４６】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。
【００４７】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態となるまでバッファ９に保持され、フラッシュメモリ２に書き込むべきデータは、フラッシュメモリ２が書き込み可能な状態となるまでバッファ９に保持される。
【００４８】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。より詳細には、フラッシュメモリインターフェースブロック１０は、アドレス処理部、コマンドレジスタ、命令処理ブロック等から構成される。
【００４９】
フラッシュメモリインターフェースブロック１０は、命令処理ブロックによって出力される内部コマンド、アドレス情報等をフラッシュメモリ２に供給することにより、フラッシュメモリ２に読み出し、書き込み等を実行させる。
【００５０】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加されるＥＣＣを生成するとともに、読み出しデータに付加されたＥＣＣに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００５１】
ＲＯＭ１２は、マイクロプロセッサ６による処理の手順を定義するプログラムを格納する不揮発性の記憶素子である。具体的には、ＲＯＭ１２は、例えば、アドレス変換テーブルの作成等の処理手順を定義するプログラムを格納する。
【００５２】
上述のアドレス変換テーブルの一例を図３に示す。このアドレス変換テーブル１００は、論理ゾーンに含まれる論理ブロックと物理ゾーンに含まれる物理ブロックとの対応関係を、
論理ゾーン内ブロック番号ＬＺＩＢＮと物理ゾーン内ブロック番号ＰＺＩＢＮとを用いて示している。ここで、物理ゾーン内ブロック番号ＰＺＩＢＮは、各物理ゾーンに含まれる物理ブロックにつけられた、各物理ゾーン内での通番である。
【００５３】
アドレス変換テーブル１００は、起動時に作成する場合や、アドレス変換テーブル１００が未作成の論理ゾーンに対してアクセスがあったときに、その論理ゾーンについて作成する場合がある。なお、このアドレス変換テーブル１００は、ワークエリア８に作成される。
【００５４】
又、本実施の形態のフラッシュメモリシステム１では、論理ゾーンを１０００個の論理ブロックで構成し、物理ゾーンを１０２４個の物理ブロックで構成するようにしたので、図３に示したアドレス変換テーブル１００では、ＬＺＩＢＮ＃０〜＃９９９の論理ブロックとＰＺＩＢＮ＃０〜＃１０２３の物理ブロックの対応関係が示されている。例えば、ＬＺＩＢＮ＃０の論理ブロックに対応するデータはＰＺＩＢＮ＃３５の物理ブロックに、ＬＺＩＢＮ＃１の論理ブロックに対応するデータはＰＺＩＢＮ＃１０の物理ブロックに、ＬＺＩＢＮ＃２の論理ブロックに対応するデータはＰＺＩＢＮ＃１５の物理ブロックに記憶されている。又、ＬＺＩＢＮ＃１３の論理ブロックに対応するデータは記憶されていない。
【００５５】
又、本実施の形態のフラッシュメモリシステム１では、上記アドレス変換テーブル１００と共に、図４に示したような空きブロック検索テーブル２００が作成される。この空きブロック検索テーブル２００は、データの書き込み先となる空きブロックを検索するときに使用される。つまり、データの書き換え等で新規なデータを書き込むときには、この空きブロック検索テーブル２００を用いて検出された空きブロックにデータが書き込まれる。
【００５６】
この空きブロック検索テーブル２００は、物理ゾーンに含まれる物理ブロックの使用状況を示すテーブルであり、ワークエリア８上に物理ゾーン毎に作成される。物理ゾーンに含まれる１０２４個の物理ブロックは、それぞれ空きブロック検索テーブル２００上の１個のビットに割り当てられ、各ビットの論理値（“０”又は“１”）によって、そのビットに対応する物理ブロックが空きブロックであるか否かを示している。 図４に示した空きブロック検索テーブル２００では、物理ブロックが使用されている場合又は不良ブロックである場合を論理値の“０”で示し、物理ブロックが空きブロックである（書き込み可能である）場合を論理値の“１”で示している。又、空きブロック検索テーブル２００では、上のビット列（行）から下のビット列（行）へ、各ビット列（各行）の８ビットについては下位側（右側）から上位側（左側）へＰＺＩＢＮの順番で各物理ブロックが割り当てられている。
【００５７】
次に、アドレス変換テーブル１００と空きブロック検索テーブル２００との作成処理について説明する。
【００５８】
この作成処理では、マイクロプロセッサ６は、ワークエリア８にアドレス変換テーブル１００を作成するための領域と空きブロック検索テーブル２００を作成するための領域を確保する。アドレス変換テーブル１００を作成するための領域については、ＬＺＩＢＮ＃０〜＃９９９のそれぞれに対応するＰＺＩＢＮを書き込むための領域を確保する。空きブロック検索テーブル２００を作成するための領域については、ＰＺＩＢＮ＃０〜＃１０２３の物理ブロックに対応する１２８バイト（１０２４ビット）の領域を確保する。更に、この空きブロック検索テーブル２００を作成するための領域の全てのビットを論理値“０”に初期設定する。又、空きブロック検索テーブル２００を作成するときは、空きブロック検索テーブル２００を用いて空きブロックを検索するときに、走査を開始するビットを示す情報を設定しておくポインタ領域も確保し、このポインタ領域をクリア状態（走査を開始するビットを示す情報が設定されていない状態）に初期設定する。
【００５９】
続いて、マイクロプロセッサ６は、ＰＺＩＢＮ＃０〜＃１０２３の物理ブロックの冗長領域２６に書き込まれている論理アドレス情報（ＬＺＩＢＮ）とブロックステータスとを順次読み出し、論理アドレス情報（ＬＺＩＢＮ）が書き込まれている場合には、アドレス変換テーブル１００を作成するための領域の、そのＬＺＩＢＮに対応する箇所に、そのＬＺＩＢＮが書き込まれていた物理ブロックのＰＺＩＢＮを書き込む。一方、論理アドレス情報（ＬＺＩＢＮ）が書き込まれていない場合は、ブロックステータスに基づいてその物理ブロックが不良ブロックであるか否かを判別する。その結果、不良ブロックでないと判別した場合は、空きブロック検索テーブル２００を作成するための領域の、その物理ブロックのＰＺＩＢＮに対応するビットの論理値を“１”に変更する。
【００６０】
ここで、空きブロック検索テーブル２００の作成処理について、図５に示したフローチャートを参照して、詳細に説明する。このフローチャートでは、他のテーブル（アドレス変換テーブル１００等）の作成処理を省略している。
【００６１】
最初に、マイクロプロセッサ６は、この空きブロック検索テーブル２００の作成処理で、参照中の物理ブロックのＰＺＩＢＮ＃ｎ（＃ｎは＃０〜＃１０２３）を設定する領域（以下、この領域を参照物理ブロック設定領域という。）をワークエリア８に確保し、この参照物理ブロック設定領域に“０”を設定（ｎ＝０）する（ステップＳ１）。
【００６２】
続いて、マイクロプロセッサ６は、参照物理ブロック設定領域に設定されているＰＺＩＢＮの物理ブロック（ＰＺＩＢＮ＃ｎの物理ブロック）の冗長領域２６の論理アドレス情報が書き込まれる領域を参照し、その領域に論理アドレス情報が記憶されているか否かを判別する（ステップＳ２）。論理アドレス情報が記憶されている場合は、その物理ブロックが使用されていると判別し、ステップＳ４に進む（ステップＳ２；Ｙｅｓ）。論理アドレス情報が記憶されていない場合は、その物理ブロックが使用されていないと判別し、ステップＳ３に進む（ステップＳ２；Ｎｏ）。
【００６３】
物理ブロックの冗長領域２６に論理アドレス情報が記憶されていない場合（ステップＳ２；Ｎｏ）、続いて、マイクロプロセッサ６は、その物理ブロックの冗長領域２６に記憶されているブロックステータスを参照し、その物理ブロックが不良ブロックであるか否かを判別する（ステップＳ３）。その物理ブロックが不良ブロックであると判別した場合は、ステップＳ４に進み（ステップＳ３；Ｙｅｓ）、その物理ブロックが不良ブロックでないと判別した場合は、ステップＳ５に進む（ステップＳ３；Ｎｏ）。
【００６４】
物理ブロックの冗長領域２６に論理アドレス情報が記憶されている場合（ステップＳ２；Ｙｅｓ）又はブロックステータスが不良ブロックであることを示している場合（ステップＳ３；Ｙｅｓ）、マイクロプロセッサ６は、空きブロック検索テーブル２００の、その物理ブロック（参照中の物理ブロック）に対応するビットに“０”を設定する（ステップＳ４）。ここで、対応するビットは、参照物理ブロック設定領域に設定されているｎ（１０ビットの値）を、ビット列に含まれるビットの数である８で割ったときの商（ｎの上位７ビットの値に対応する）と余り（ｎの下位３ビットの値に対応する）に基づいて特定することができる。例えば、商がｌで、余りがｍの場合は、空きブロック検索テーブル２００の上からｌ＋１番目のビット列の下位からｍ＋１ビット目のビットが、参照中の物理ブロックに対応するビットになる。
【００６５】
物理ブロックの冗長領域２６に論理アドレス情報が記憶されておらず（ステップＳ２；Ｎｏ）、ブロックステータスが不良ブロックであることを示していない場合（ステップＳ３；Ｎｏ）、つまり、その物理ブロック（参照中の物理ブロック）が空きブロックであると判別された場合、マイクロプロセッサ６は、空きブロック検索テーブル２００の、その物理ブロック（参照中の物理ブロック）に対応するビットに“１”を設定する（ステップＳ５）。
【００６６】
尚、ステップＳ４又はステップＳ５の処理の後にステップＳ６に進むが、空きブロック検索テーブル２００を作成するための領域を最初に論理値“０”に初期設定しておけば、ステップＳ４の処理を行わずにステップＳ６に進むことができる。
【００６７】
ステップＳ４又はステップＳ５の処理が終了することにより、参照中の物理ブロックに対応するビットの設定が終了するので、マイクロプロセッサ６は、参照物理ブロック設定領域に設定されているｎの値を１増加させ（ステップＳ６）、ステップＳ７に進む。
【００６８】
マイクロプロセッサ６は、参照物理ブロック設定領域に設定されているｎの値、つまり、ステップＳ６で１増加させたｎの値が、物理ゾーンに含まれる物理ブロックの数を超えているか否かを判別する。つまり、ｎの値が１０２３を越えているか否かを判別する（ステップＳ７）。ｎの値が１０２３以下の場合は、ステップＳ２に進み（ステップＳ７；Ｙｅｓ）、ｎの値が１０２３を越えている場合は空きブロック検索テーブル２００の作成処理は終了する（ステップＳ７；Ｎｏ）。
【００６９】
次に、空きブロック検索テーブル２００を用いた空きブロック検索の処理について、図６〜図８のフローチャートを参照して説明する。
【００７０】
空きブロック検索を開始するときは、ワークエリア８に設けられたポインタ領域が参照され、マイクロプロセッサ６は、ポインタ領域に設定されている値に対応する空きブロック検索テーブル２００上のビットの次のビットから使用状況（論理値の“０”又な“１”で示された情報）の走査を開始する。ここで、空きブロック検索が２回目以降であれば、ポインタ領域には、前回の空きブロック検索で検出された空きブロックのＰＺＩＢＮの値が設定されているが、最初の空きブロック検索の場合には、ポインタ領域に値が設定されていない。従って、本発明に係るフラッシュメモリシステムでは、このような場合に、検出した空きブロックに書き込む新データと対応関係にある旧データが記憶されている物理ブロックの次の物理ブロックに対応するビットからの走査を開始するように構成されている。つまり、新データに書き換えられる旧データが格納されている物理ブロックの次の物理ブロックに対応するビットから走査が開始され、検出された空きブロックには書き換え後のデータである新データが書き込まれる。
【００７１】
例えば、ＬＺＮ＃３に含まれるＬＺＩＢＮ＃５の論理ブロックに対する書き込み処理が、ホストシステム４から与えられ、このアクセス要求を契機にＰＺＮ＃３の空きブロック検索テーブル２００作成された場合について具体的に説明する。この場合には、ＬＺＩＢＮ＃５の論理ブロックに対応する物理ブロックのＰＺＩＢＮを、アドレス変換テーブル１００を参照して求める。ＬＺＩＢＮ＃５の論理ブロックがＰＺＩＢＮ＃１１の物理ブロックに対応する場合には、ＰＺＩＢＮ＃１２の物理ブロックに対応するビットから走査を開始する。
【００７２】
空きブロック検索テーブル２００上の空きブロックに対応するビットを検出する走査は、例えば、８ビットのシフトレジスタ（図示せず）を用いることにより行うことができる。このシフトレジスタを用いた走査では、ポインタ領域に設定されている値に対応するビットの次のビットが含まれるビット列から順番に、ビット列が参照され、その値が０（二進数表記；０００  ００００）でない場合に、そのビット列の値がシフトレジスタに書き込まれる。尚、走査を開始するビットがビット列の最下位ビットでない場合には、走査を開始するビットより下位側のビットが全て“０”になるようなマスク処理が施される。例えば、走査を開始するビットがビット列の下位から５ビット目のときは、そのビット列の下位から数えて４ビット目から１ビット目までのビットが“０”になるようなマスク処理が施される。つまり、このマスク処理では、走査を開始するビットより下位側のビットが“０”で、それ以外のビットが“１”のマスクデータでＡＮＤ演算を実行する。
【００７３】
続いて、シフトレジスタに設定されたビット列を下位方向にシフトさせ、何回のシフトでキャリーが立ったかで、下位から何ビット目のビットが空きブロックに対応するビットであるかを判別する。つまり、以上の処理により、空きブロックに対応するビットが、何番目のビット列であるかと、そのビット列の下位から何ビット目のビットであるかが判別される。このようにして空きブロックに対応するビットを判別した後に、このビットに割り当てられている物理ブロックのＰＺＩＢＮが求められる。ここで、ビット列に含まれるビットの数がｋで、ａ番目のビット列の下位からｂビット目のビットが空きブロックに対応するビットである場合、そのビットに対応する物理ブロックのＰＺＩＢＮはｋ×（ａ−１）＋（ｂ−１）で求められる。又、このようにして求めたＰＺＩＢＮの値がポインタ領域に設定される。
【００７４】
まず、マイクロプロセッサ６は、ポインタ領域を参照し（ステップＳ１０２）、前回の空きブロック検索で検出された空きブロックのＰＺＩＢＮの値（以下、ポインタ領域に設定されているＰＺＩＢＮの値をｐｂという。）が設定されている場合は、ステップＳ１０３に進み（ステップＳ１０２；Ｙｅｓ）、ＰＺＩＢＮの値が設定されていない場合は、ステップＳ１０８に進む（ステップＳ１０２；Ｎｏ）。ここで、ポインタ領域には、ｐｂが設定されているか否かを示すためのビット（フラグビット）が設けられており、このフラグビットの情報に基づいてｐｂが設定されているか否かが判断される。従って、ポインタ領域に最初にＰＺＩＢＮの値を書き込むときに、このフラグビットが示す情報が、ｐｂが設定されていることを示す情報に変更される。
【００７５】
ポインタ領域にｐｂが設定されている場合は（ステップＳ１０２；Ｙｅｓ）、マイクロプロセッサ６は、走査を開始する物理ブロックのＰＺＩＢＮを設定するスタートポインタ領域（以下、スタートポインタ領域に設定されている値をｊという。）に、ｐｂ＋１の値を書き込む（ステップＳ１０３）。尚、スタートポインタ領域には、ｐｂ＋１の下位１０ビットだけを設定する。従って、ｐｂが１０２３（二進数表記；１１  １１１１  １１１１）の場合、ｊは０（二進数表記；００  ００００  ００００）になる。
【００７６】
ポインタ領域にｐｂが設定されていない場合は（ステップＳ１０２；Ｎｏ）、アクセス対象指示領域に設定されているＬＺＩＢＮの値が参照され（ステップＳ１０８）、このＬＺＩＢＮの値に対応するＰＺＩＢＮが存在する場合は、ステップＳ１１２に進み（ステップＳ１０８；Ｙｅｓ）、このＬＺＩＢＮに対応するＰＺＩＢＮが存在しない場合は、ステップＳ１０９に進む（ステップＳ１０８；Ｎｏ）。
【００７７】
アクセス対象指示領域に設定されているＬＺＩＢＮに対応するＰＺＩＢＮが存在する場合は（ステップＳ１０８；Ｙｅｓ）、スタートポインタ領域にそのＰＺＩＢＮに１を加算した値を書き込む（ステップＳ１１２）。つまり、ｊの値としてアクセス対象指示領域に設定されているＬＺＩＢＮに対応するＰＺＩＢＮに１を加算した値が設定される。尚、上記と同様にアクセス対象指示領域に設定されているＬＺＩＢＮに対応するＰＺＩＢＮの値が１０２３（二進数表記；１１  １１１１  １１１１）の場合、ｊは０（二進数表記；００  ００００  ００００）になる。
【００７８】
アクセス対象指示領域に設定されているＬＺＩＢＮに対応するＰＺＩＢＮが存在しない場合は（ステップＳ１０８；Ｎｏ）、スタートポインタ領域に０を書き込む（ステップＳ１０９）。つまり、ｊの値として０が設定される。
【００７９】
尚、説明を簡略化するため、アクセス対象指示領域に設定されているＬＺＩＢＮに対応するＰＺＩＢＮが存在しない場合は、スタートポインタ領域に０を設定するようにしたが、アクセス対象指示領域に設定されているＬＺＩＢＮを１ずつ減算していき、減算されたＬＺＩＢＮに対応するＰＺＩＢＮがあったときに、そのＰＺＩＢＮをアクセス対象指示領域に設定するようにしてもよい。例えば、１回減算したＬＺＩＢＮに対応するＰＺＩＢＮがなく、２回減算したＬＺＩＢＮに対応するＰＺＩＢＮがなく、３回減算したＬＺＩＢＮに対応するＰＺＩＢＮがあった場合は、３回減算したＬＺＩＢＮに対応するＰＺＩＢＮに１を加算した値をスタートポインタ領域に設定する。又、このように順次ＬＺＩＢＮを１ずつ減算していき、ＬＺＩＢＮが０になっても対応するＰＺＩＢＮが見つからなかった場合は、スタートポインタ領域に０を設定する。
【００８０】
ステップＳ１０３、ステップＳ１０９又はステップＳ１１２でスタートポインタ領域に空きブロック検索を開始する物理ブロックのＰＺＩＢＮの値を設定した後にステップＳ１１５に進み、検索対象のビット列とそのビット列でマスクされるビット数を指定する情報を設定する。
【００８１】
図４に示した空きブロック検索テーブル２００で、各ビット列は８ビットなので、ｊ（１０ビットの値）の上位７ビットの値を、ビット列を指定するビット列指定領域に書き込み、ｊ（１０ビットの値）の下位３ビットの値を、マスクされるビット数を指定するマスク情報領域に書き込む（ステップＳ１１５）。以下の説明では、ビット列指定領域に設定されている値をｐ、マスク情報領域に書き込まれる値をｑとする。ここで、スタートポインタ領域に設定されている値ｊを各ビット列に含まれるビットの数で割ったときの商がｊ（１０ビットの値）の上位７ビットの値に対応し、余りがｊ（１０ビットの値）の下位３ビットの値に対応する。又、（ｐ＋１）番目のビット列の下位から（ｑ＋１）ビット目のビットが走査を開始するビットに対応する。
【００８２】
続いて、（ｐ＋１）番目のビット列の下位ｑビットにマスク処理を施し、マスク処理が施されたビット列のデータが０（二進数表記；００００  ００００）の場合はステップＳ１２１に進み（ステップＳ１２０；Ｙｅｓ）、マスク処理が施されたビット列のデータが０（二進数表記；００００  ００００）でない場合はステップＳ１２４に進む（ステップＳ１２０；Ｎｏ）。尚、ｑ＝０の場合はマスク処理が施されないため、そのままのビット列のデータが０であるか否かが判別される。
【００８３】
マスク処理が施されたビット列のデータ又はそのままのビット列のデータが０である場合は（ステップＳ１２０；Ｙｅｓ）、ビット列指定領域に設定されている値に１を加算し、マスク情報領域に設定されている値を０に変更し、ステップＳ１２０に進む（ステップＳ１２１）。ここで、ビット列指定領域に設定されている値ｐは７ビットの値なので、ビット列指定領域に設定されている値が１２７（二進数表記；１１１  １１１１）の場合、加算した値の下位７ビットに対応する０（二進数表記；０００  ００００）をビット列指定領域に書き込む。尚、ステップＳ１２１の後にステップＳ１２０に進んだ場合は、ｑ＝０なのでマスク処理を行わずに、（ｐ＋１）番目（ｐは新たにビット列指定領域に設定された値）のビット列のデータが０であるか否かを判別する。
【００８４】
マスク処理が施されたビット列のデータ又はそのままのビット列のデータが０でない場合は（ステップＳ１２０；Ｎｏ）、そのビット列のデータをシフトレジスタに書き込み、ステップＳ１２５に進む（ステップＳ１２４）。
【００８５】
シフトレジスタに書き込まれているビット列のデータを、キャリーフラグが立つまで下位（右）方向にシフトさせ、キャリーフラグが立つまでのシフト回数をカウントする（ステップＳ１２５）。
【００８６】
続いて、ビット列指定領域に設定されている値ｐ（７ビット）の下位側に、キャリーフラグが立つまでのシフト回数から１を減算した値ｋ（３ビット）を付加した１０ビットの値をポインタ領域に書き込む（ステップＳ１２８）。ポインタ領域に書き込まれた１０ビットの値が検出された空きブロックのＰＺＩＢＮに対応する。
【００８７】
次に、図９のフローチャートにしたがって、フラッシュメモリ２にデータを書き込む際に行われる処理について説明する。なお、フラッシュメモリ２にデータを書き込む処理自体は、従来と同様なので、特に、空きブロック検索テーブル２００の内容を変更する処理について説明する。
【００８８】
マイクロプロセッサ６は、空きブロックを検索し、空きブロックのＰＺＩＢＮを取得し（ステップＳ２０１）、取得したＰＺＩＢＮに基づいて、この空きブロックのＰＢＡを求める。
【００８９】
続いて、マイクロプロセッサ６は、ステップＳ２０１で検出された空きブロックのＰＢＡを含むアドレス情報と、ＲＯＭ１２から読み出したコマンドセット等をフラッシュメモリインターフェースブロック１０に供給する。フラッシュメモリインターフェースブロック１０は、与えられたアドレス情報とコマンドセット等に従ってステップＳ２０１で検出された空きブロックにデータを書き込む処理を実行する（ステップＳ２０２）。
【００９０】
空きブロックにデータが書き込まれると、マイクロプロセッサ６は、この空きブロックのＰＺＩＢＮに対応する空きブロック検索テーブル２００のビットを“０”に書き換えて（ステップＳ２０３）、処理を終了する。
【００９１】
次に、図１０のフローチャートにしたがって、フラッシュメモリ２からデータを消去する際に行われる処理について説明する。なお、フラッシュメモリ２からデータを消去する処理自体は、従来と同様なので、特に、空きブロック検索テーブル２００の内容を変更する処理について説明する。
【００９２】
消去処理は、例えば、書き換えデータが空きブロックに書き込まれ、旧データが不要になったときに行われる。このような場合、書き換えデータが空きブロックに書き込まれた後に、旧データが記憶されていた物理ブロックの消去処理が行われ、続いてアドレス変換テーブルのこの書き換え係る箇所のＰＺＩＢＮが、旧データが記憶されていた物理ブロックのＰＺＩＢＮから書き換え後の新データが記憶されている物理ブロックのＰＺＩＢＮに変更される。
【００９３】
旧データが記憶されている物理ブロックのデータを消去する場合は、まず、アドレス変換テーブルに用いて旧データが記憶されている物理ブロックのＰＢＩＺＮを取得し、更に、取得したＰＢＩＺＮに基づいて、旧データが記憶されている物理ブロックのＰＢＡを求める（ステップＳ３０１）。
【００９４】
続いて、マイクロプロセッサ６は、旧データが記憶されている物理ブロックのＰＢＡと、ＲＯＭ１２から読み出したコマンドセット等をフラッシュメモリインターフェースブロック１０に供給する。フラッシュメモリインターフェースブロック１０は、与えられたＰＢＡとコマンドセット等に従って旧データが記憶されている物理ブロックの記憶データを消去する（ステップＳ３０２）。
【００９５】
ステップＳ３０２の消去処理が終了した後に、フラッシュメモリ２から処理ステータスを読み出し、処理ステータス（処理が正常に終了したか否かの情報を含むステータス）に基づいて旧データが記憶されていた物理ブロックが不良ブロックか否かを判断する（ステップＳ３０３）。
【００９６】
旧データが記憶されていた物理ブロックが不良ブロックでないと判断した場合は（ステップＳ３０３；Ｎｏ）、この物理ブロックに対応する空きブロック検索テーブル２００上のビットを“１”に書き換える（ステップＳ３０４）。
【００９７】
旧データが記憶されていた物理ブロックが不良ブロックであると判断した場合は（ステップＳ３０３；Ｙｅｓ）、空きブロック検索テーブル２００の更新は行わず処理を終了する。尚、旧データが記憶されていた物理ブロックの冗長領域２６には、不良ブロックであることを示すブロックステータスを書き込む。
【００９８】
以上説明したように、本発明に係るコントローラ３は、前回の検索で検出された空きブロックに関する情報が保持されていない場合に、空きブロックに書き込む新データと対応関係にある旧データ（新データで書き換えられるデータ）が記憶されている物理ブロックの次の物理ブロックから空きブロックの検索を開始する。従って、前回の検索で検出された空きブロックに関する情報が保持されていない場合に、空きブロック検索を開始する物理ブロックが特定の物理ブロックに偏ることを回避することができる。
【００９９】
尚、上記の実施の形態では、前回の検索で検出された空きブロックに関する情報が保持されていない場合にだけ、つまり、起動した後の最初の空きブロック検索の場合だけ、空きブロックに書き込む新データと対応関係にある旧データ（新データで書き換えられるデータ）が記憶されている物理ブロックの次の物理ブロックから空きブロックの検索を開始するようにしたが、毎回、旧データが記憶されている物理ブロックの次の物理ブロックから空きブロックの検索を開始するようにしてもよい。
【０１００】
この発明は、上述の実施形態に限定されず、種々の変形及び応用が可能である。
【０１０１】
各物理ゾーンの物理ブロック数は１０２４個に限られず、自由に設定できる。同様に各論理ゾーンの論理ブロック数は１０００個に限られず、自由に設定できる。
【０１０２】
本実施形態では、空きブロック検索テーブル２００の各ビット列は８ビットであったが、８ビットに限られず、自由に設定してもよい。尚、シフトレジスタのビット長は、ビット列のビット数に合わせて適宜設定しなければならない。
【０１０３】
空きブロック検索テーブル２００を作成せずに、冗長領域２６に記憶されている論理アドレス情報とブロックステータスを直接参照して空きブロック検索を行ってもよい。
【図面の簡単な説明】
【０１０４】
【図１】フラッシュメモリシステムの一例を示すブロック図である。
【図２】フラッシュメモリのアドレス空間の構造の一例を示す図である。
【図３】アドレス変換テーブルの構造を示す図である。
【図４】空きブロック検索テーブルの構造を示す図である。
【図５】空きブロック検索テーブルを作成する処理のフローチャートである。
【図６】空きブロックを検索する処理のフローチャートである。
【図７】空きブロックを検索する処理のフローチャートである。
【図８】空きブロックを検索する処理のフローチャートである。
【図９】フラッシュメモリにデータを書き込む処理のフローチャートである。
【図１０】フラッシュメモリからデータを消去する処理のフローチャートである。
【図１１】従来のフラッシュメモリのアドレス空間の構造を概略的に示す図である。
【符号の説明】
【０１０５】
１    フラッシュメモリシステム
２    フラッシュメモリ
３    コントローラ
４    ホストシステム
６    マイクロプロセッサ
７    ホストインターフェースブロック
８    ワークエリア
９    バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１２  ＲＯＭ
２５  ユーザ領域
２６  冗長領域
【図１】
2007206835.tif 000003
【図２】
2007206835.tif 000004
【図３】
2007206835.tif 000005
【図４】
2007206835.tif 000006
【図５】
2007206835.tif 000007
【図６】
2007206835.tif 000008
【図７】
2007206835.tif 000009
【図８】
2007206835.tif 000010
【図９】
2007206835.tif 000011
【図１０】
2007206835.tif 000012
【図１１】
2007206835.tif 000013