(57)【要約】【課題】  同一の論理アドレスに対応するデータが記憶されている２個の物理ブロック（ペアブロック）間の無駄な記憶データの転送（複写）を減少させるという効果を維持しつつ、ペアブロックの増加に伴う空きブロック数の減少を所定の範囲内に抑えることを目的とする。【解決手段】ホストシステム４から与えられる指示情報に基づく論理アドレスと、この論理アドレスと対応するデータが記憶されているフラッシュメモリ２内の物理ブロックの対応関係を判別し、その論理アドレスに対応するデータが記憶されている前記物理ブロックが既に存在するときは、その物理ブロックと異なる物理ブロックにデータを書き込む。このような同一の論理アドレスに対応するデータが記憶されているペアブロックの対応関係、及びペアブロックの組数を管理する情報を保持し、ペアブロックの組数が所定数に達したときに、ペアブロック状態になった順番が最先のペアブロックのペアブロック状態を解消する。【選択図】図７
2008097339.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムから与えられる指示情報に応じて、物理ブロック単位で記憶データの消去を実行するフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
前記指示情報に基づく論理アドレスと、該論理アドレスと対応するデータが記憶されている前記物理ブロックの対応関係を管理するアドレス管理手段と、
前記指示情報に基づく論理アドレスに対応するデータが記憶されている前記物理ブロックが存在するとき、該物理ブロックと異なる物理ブロックに前記指示情報に基づく論理アドレスに対応するデータを書き込む書込み手段と、
前記論理アドレスが同一のデータが記憶されている２個の前記物理ブロックからなるペアブロックの対応関係、及び該ペアブロックの組数を管理するペアブロック管理手段と、
前記ペアブロックの組数が所定数に達したときに、ペアブロック状態になった順番が最先の前記ペアブロックのペアブロック状態を解消するペアブロック解消手段と、
を備えることを特徴とするメモリコントローラ。
【請求項２】
前記書込み手段が、前記異なる物理ブロックの冗長領域にペアブロック状態になった順番の先後関係を判断するためのペアブロックシリアル番号を書き込むことを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記ペアブロック管理手段は、前記論理アドレスが同一のデータが記憶されている２個の前記物理ブロックの新旧関係が新しいデータが記憶されている方の前記物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号に基づいて、ペアブロック状態になった順番の先後を判別することを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項４】
請求項１乃至３のいずれか１項に記載のメモリコントローラと前記フラッシュメモリを備えることを特徴とするフラッシュメモリシステム。
【請求項５】
ホストシステムから与えられる指示情報に応じて、物理ブロック単位で記憶データの消去を実行するフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
前記指示情報に基づく論理アドレスと、該論理アドレスと対応するデータが記憶されている前記物理ブロックの対応関係を判別するアドレス判別ステップと、
前記指示情報に基づく論理アドレスに対応するデータが記憶されている前記物理ブロックが存在するとき、該物理ブロックと異なる物理ブロックに前記指示情報に基づく論理アドレスに対応するデータを書き込む書込みステップと、
前記論理アドレスが同一のデータが記憶されている２個の前記物理ブロックからなるペアブロックの対応関係、及び該ペアブロックの組数を管理する情報を保持するペアブロック管理ステップと、
前記ペアブロックの組数が所定数に達したときに、ペアブロック状態になった順番が最先の前記ペアブロックのペアブロック状態を解消するペアブロック解消ステップと、
を有することを特徴とするフラッシュメモリの制御方法。
【請求項６】
前記書込みステップにおいて、前記異なる物理ブロックの冗長領域にペアブロック状態になった順番の先後関係を判断するためのペアブロックシリアル番号を書き込むことを特徴とする請求項５に記載のフラッシュメモリの制御方法。
【請求項７】
前記ペアブロック管理ステップにおいて、前記論理アドレスが同一のデータが記憶されている２個の前記物理ブロックの新旧関係が新しいデータが記憶されている方の前記物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号に基づいて、ペアブロック状態になった順番の先後を判別するための情報を保持することを特徴とする請求項５又は６に記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、及びフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
近年、メモリカードやシリコンディスクなどに、ＮＡＮＤ型フラッシュメモリが用いられることが多い。このＮＡＮＤ型フラッシュメモリは不揮発性のメモリであり、記憶データを消去するとき、つまり、メモリセルを書込状態（論理値＝０）から消去状態（論理値＝１）に変化させる場合は、ブロック単位でしか記憶データを消去することができない。従って、記憶データを書き替える場合には、書換えデータを元のデータが記憶されていた物理ブロック（第１の物理ブロック）とは別の物理ブロック（第２の物理ブロック）に書き込んだ後、第１の物理ブロックの記憶データを消去していた。
【０００３】
このような書換え処理では、第１の物理ブロックに記憶されている書換え対象でない記憶データを、第１の物理ブロックから第２の物理ブロックに転送（複写）しなければならない。しかし、この書換え対象でない記憶データを転送（複写）した後に、ホストシステムから転送（複写）した記憶データの書換え指示が与えられた場合、その指示前に実行した記憶データの転送（複写）が無駄になってしまう。
【０００４】
このような問題を回避するため、書換えデータを第２の物理ブロックに書き込んだ後、書換え対象でない記憶データの転送（複写）を行わず、第１の物理ブロックと第２の物理ブロックを並存させる技術が特許文献１に開示されている。
【特許文献１】特開２００２−３２４００８
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示されているように、第１の物理ブロックと第２の物理ブロックを並存させれば、無駄な記憶データの転送（複写）を減少させることができる。しかし、上記第１の物理ブロックと第２の物理ブロックのようなペアブロックが多くなり過ぎると、空きブロックを確保することができなくなってしまう。又、空きブロックを確保することができなくなることを回避するために、一定の論理アドレスの領域に割り当てる物理ブロックの数を増加させた場合には、同一の記憶容量のフラッシュメモリに記憶できるデータの実質的な容量が小さくなってしまう。
【０００６】
尚、ペアブロックが多くなり過ぎて、空きブロックを確保することができなくなった場合、いずれかのペアブロックについて、第１の物理ブロックから第２の物理ブロックに記憶データの転送（複写）を行い、第１の物理ブロックの記憶データを消去すれば、空きブロックを確保することができる。しかし、このようなペアブロックの解消を行うときの優先順位の管理については、特許文献１に開示されていない。
【０００７】
そこで、本発明は、上記のような問題を回避しつつペアブロックを有効に活用するため、ペアブロックの組数（ペア数）が所定の範囲を超えないように管理するメモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、及びフラッシュメモリの制御方法を提供しようとするものである。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明によるメモリコントローラは、ホストシステムから与えられる指示情報に応じて、物理ブロック単位で記憶データの消去を実行するフラッシュメモリに対するアクセスを制御するメモリコントローラであって、前記指示情報に基づく論理アドレスと、該論理アドレスと対応するデータが記憶されている前記物理ブロックの対応関係を管理するアドレス管理手段と、前記指示情報に基づく論理アドレスに対応するデータが記憶されている前記物理ブロックが存在するとき、該物理ブロックと異なる物理ブロックに前記指示情報に基づく論理アドレスに対応するデータを書き込む書込み手段と、前記論理アドレスが同一のデータが記憶されている２個の前記物理ブロックからなるペアブロックの対応関係、及び該ペアブロックの組数を管理するペアブロック管理手段と、前記ペアブロックの組数が所定数に達したときに、ペアブロック状態になった順番が最先の前記ペアブロックのペアブロック状態を解消するペアブロック解消手段と、を備えることを特徴とする。
【０００９】
このような構成によると、ペアブロック間の無駄な記憶データの転送（複写）を減少させるという効果を維持しつつ、ペアブロックの増加に伴う空きブロック数の減少を所定の範囲内に抑えることができる。更に、ペアブロック状態になった順番が先のペアブロックから順番にペアブロック状態が解消されるので、ペアブロックの組数を制限してもペアブロック間の無駄な記憶データの転送（複写）を減少させるという効果の低下を最小限に抑えることができる。
【００１０】
又、前記書込み手段は、前記異なる物理ブロックの冗長領域にペアブロック状態になった順番の先後関係を判断するためのペアブロックシリアル番号を書き込むことが好ましい。
【００１１】
このようにすれば、複数組のペアブロックが存在するときに、ペアブロックシリアル番号を読み出せば、ペアブロック状態になった順番の先後関係を判別することができる。
【００１２】
又、前記ペアブロック管理手段は、前記論理アドレスが同一のデータが記憶されている２個の前記物理ブロックの新旧関係が新しいデータが記憶されている方の前記物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号に基づいて、ペアブロック状態になった順番の先後を判別することが好ましい。
【００１３】
尚、前記論理アドレスが同一のデータが記憶される前記物理ブロックの冗長領域に、記憶データの新旧関係を判断するためのシリアル番号を書き込んでもよい。
【００１４】
本発明によるフラッシュメモリシステムは、前記メモリコントローラと前記フラッシュメモリを備えることを特徴とする。
【００１５】
本発明によるフラッシュメモリの制御方法は、ホストシステムから与えられる指示情報に応じて、物理ブロック単位で記憶データの消去を実行するフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、前記指示情報に基づく論理アドレスと、該論理アドレスと対応するデータが記憶されている前記物理ブロックの対応関係を判別するアドレス判別ステップと、前記指示情報に基づく論理アドレスに対応するデータが記憶されている前記物理ブロックが存在するとき、該物理ブロックと異なる物理ブロックに前記指示情報に基づく論理アドレスに対応するデータを書き込む書込みステップと、前記論理アドレスが同一のデータが記憶されている２個の前記物理ブロックからなるペアブロックの対応関係、及び該ペアブロックの組数を管理する情報を保持するペアブロック管理ステップと、前記ペアブロックの組数が所定数に達したときに、ペアブロック状態になった順番が最先の前記ペアブロックのペアブロック状態を解消するペアブロック解消ステップと、を有することを特徴とする。
【００１６】
このような方法によると、ペアブロック間の無駄な記憶データの転送（複写）を減少させるという効果を維持しつつ、ペアブロックの増加に伴う空きブロック数の減少を所定の範囲内に抑えることができる。更に、ペアブロック状態になった順番が先のペアブロックから順番にペアブロック状態が解消されるので、ペアブロックの組数を制限してもペアブロック間の無駄な記憶データの転送（複写）を減少させるという効果の低下を最小限に抑えることができる。
【００１７】
又、前記書込みステップにおいて、前記異なる物理ブロックの冗長領域にペアブロック状態になった順番の先後関係を判断するためのペアブロックシリアル番号を書き込むことが好ましい。
【００１８】
このようにすれば、複数組のペアブロックが存在するときに、ペアブロックシリアル番号を読み出せば、ペアブロック状態になった順番の先後関係を判別することができる。
【００１９】
又、前記ペアブロック管理ステップにおいて、前記論理アドレスが同一のデータが記憶されている２個の前記物理ブロックの新旧関係が新しいデータが記憶されている方の前記物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号に基づいて、ペアブロック状態になった順番の先後を判別するための情報を保持することが好ましい。
【００２０】
尚、前記論理アドレスが同一のデータが記憶される前記物理ブロックの冗長領域に、記憶データの新旧関係を判断するためのシリアル番号を書き込んでもよい。
【発明の効果】
【００２１】
本発明のメモリコントローラ、フラッシュメモリシステム、並びにフラッシュメモリの制御方法によれば、ペアブロックの組数（ペア数）が所定の範囲を超えないように管理することにより、ペアブロック間（同一の論理アドレスに対応するデータが記憶された２個の物理ブロック間）の無駄な記憶データの転送（複写）を減少させるという効果を維持しつつ、ペアブロックの増加に伴う空きブロック数の減少を所定の範囲内に抑えることができる。
【００２２】
更に、ペアブロックを解消するときの優先順位を管理することにより、ペアブロックの組数（ペア数）が所定の範囲を超えないように管理することによる効果（ペアブロック間の無駄な記憶データの転送（複写）を減少させるという効果）の低下を最小限に抑えることができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施の形態について図面を参照して説明する。図１は、本発明に係るフラッシュメモリシステムの、一実施の形態の概略構成を示すブロック図である。図１に示したように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するメモリコントローラ３で構成されている。また、フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続される。
【００２４】
ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等とから構成される。ホストシステム４は、たとえば文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２５】
フラッシュメモリ２は、不揮発性メモリであり、フラッシュメモリ２内のレジスタとメモリセルアレイとの間でデータの複写を行って、データの書き込み又は読み出しを行う。メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、すなわち、レジスタから選択されたメモリセルへのデータの書き込み（複写）、又は選択されたメモリセルからレジスタへのデータの読み出し（複写）が行われる。つまり、メモリコントローラ３から与えられたデータは、レジスタを介してメモリセルアレイに書き込まれ、メモリセルアレイに記憶されているデータはレジスタを介してメモリコントローラ３に供給される。
【００２６】
メモリセルアレイを構成するメモリセルは、２つゲートを備えたＭＯＳトランジスタによって構成される。ここで、一方のゲートはコントロールゲート、他方のゲートはフローティングゲートとそれぞれ呼ばれている。フローティングゲートに電荷（電子）を注入若しくはフローティングゲートから電荷（電子）を排出することによって、データの書き込み若しくはデータの消去が行われる。
【００２７】
このフローティングゲートは、周囲が絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧がコントロールゲートとフローティングゲートとの間に印加される。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧がコントロールゲートとフローティングゲートとの間に印加される。ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「０」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「１」に対応する。
【００２８】
このようなフラッシュメモリ２のアドレス空間は、図２に示したように“ページ”及び“ブロック（物理ブロック）”で構成されている。ページは、フラッシュメモリ２で行われるデータ読み出し動作及びデータ書き込み動作における処理単位である。物理ブロックは、フラッシュメモリ２で行われるデータ消去動作における処理単位であり、複数個のページで構成されている。図２は、大ブロックの場合の構造を示しており、１個のページは、４セクタ（２０４８バイト）のユーザ領域２５と６４バイトの冗長領域２６とで構成され、１個の物理ブロックは６４個のページで構成されている。
【００２９】
尚、小ブロックの場合は、１個のページは、１セクタ（５１２バイト）のユーザ領域と１６バイトの冗長領域とで構成され、１個の物理ブロックは３２個のページで構成されている。又、大ブロックの場合は、ユーザ領域２５を４分割した５１２バイトの領域をサブページといい、各サブページに冗長領域２６内の一部の領域が割り当てられている。従って、大ブロックの場合、１個の物理ブロックには、２５６個のサブページが含まれている。
【００３０】
次に、ホストシステム４側のアドレス空間とフラッシュメモリ２側のアドレス空間について図３を参照して説明する。ホストシステム４側のアドレス空間は、図３（ａ）に示したように、セクタ（５１２バイト）単位で分割した領域に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。メモリコントローラ３内では、複数個のセクタをまとめたものを論理ブロックとして、複数個の論理ブロックをまとめたものを論理ゾーンとしている。ここで、図３（ｂ）に示したように、論理ブロックに付けられた通番を論理ブロック番号（ＬＢＮ）と言い、論理ゾーンに付けられた通番を論理ゾーン番号（ＬＺＮ）と言う。また、各論理ゾーンに含まれる論理ブロックの、各論理ゾーン内での通番を論理ゾーン内ブロック番号（ＬＺＩＢＮ）と言う。
【００３１】
フラッシュメモリ２側のアドレス空間は、図３（ｃ）に示したように、各物理ブロックに固有の物理ブロックアドレス（ＰＢＡ）が割り当てられている。さらに、記憶領域を複数のゾーンに分割して管理する場合には、複数個の物理ブロックで物理ゾーンを構成し、各物理ゾーンに固有の物理ゾーン番号（ＰＺＮ）を割り当てている。各物理ゾーンに含まれる物理ブロックの、各物理ゾーン内での通番を物理ゾーン内ブロック番号（ＰＺＩＢＮ）と言う。
【００３２】
また、各論理ゾーンにはそれぞれ１個の物理ゾーンが割り当てられ、論理ゾーンに含まれる各論理ブロックに対応するデータは、その論理ゾーンに割り当てられた物理ゾーンに含まれる物理ブロックに書き込まれる。したがって、１個の論理ブロックに含まれるセクタ数は、１個の物理ブロックに含まれるセクタ領域の個数に応じて設定される。但し、１個の論理ブロックを複数個の物理ブロックに割り当てる場合には、その複数個の物理ブロックを１個の物理ブロックとみなして１個の論理ブロックに含まれるセクタ数を設定する。
【００３３】
図３は、１個の論理ブロックを、２５６個のサブページで構成さている１個の物理ブロックに割り当てた場合を示している。従って、２５６セクタが１個の論理ブロックに対応し、ＬＢＮ＃０〜＃４９９の５００個の論理ブロックで構成されたＬＺＮ＃０の論理ゾーンは、ＬＢＡ＃０〜＃１２７９９９の１２８０００セクタの領域に対応している。ＬＺＮ＃１以降の論理ゾーンについても同様に、ＬＺＮ＃１の論理ゾーンは、ＬＢＡ＃１２８０００〜＃２５５９９９の１２８０００セクタの領域に対応し、ＬＺＮ＃２の論理ゾーンは、ＬＢＡ＃２５６０００〜＃３８３９９９の１２８０００セクタの領域に対応し、ＬＺＮ＃３の論理ゾーンは、ＬＢＡ＃３８４０００〜＃５１１９９９の１２８０００セクタの領域に対応している。
【００３４】
ＬＢＮ＃０〜＃４９９の５００個の論理ブロックで構成されたＬＺＮ＃０の論理ゾーンは、ＰＢＡ＃０〜＃５１１の５１２個の物理ブロックで構成されたＰＺＮ＃０の物理ゾーンに割り当てられている。ＬＺＮ＃１以降の論理ゾーンについても同様に、ＬＺＮ＃１の論理ゾーンは、ＰＺＮ＃１の物理ゾーンに割り当てられ、ＬＺＮ＃２の論理ゾーンは、ＰＺＮ＃２の物理ゾーンに割り当てられ、ＬＺＮ＃３の論理ゾーンは、ＰＺＮ＃３の物理ゾーンに割り当てられている。
【００３５】
ここで、物理ゾーンに含まれる物理ブロックの個数を、論理ゾーンに含まれる論理ブロックの個数より多くしているのは、ペアブロック（同一の論理ブロックに対応する新データと旧データが記憶された１対の物理ブロック）を許容するためである。従って、ペアブロックの許容数を多くしたい場合には、物理ゾーンに含まれる物理ブロックの個数を多くすればよい。又、物理ゾーンに含まれる物理ブロックの個数は、データを正常に書き込むことができない不良ブロックが発生した場合等も考慮して設定しなければならない。
【００３６】
尚、本実施の形態では、各物理ブロックには、その物理ブロックに割り当てられた論理ブロックに含まれるセクタに対応するデータをＬＢＡの順番で書き込んでいる。従って、物理ブロックと論理ブロックとの対応関係を管理することにより、ホストシステム４側でＬＢＡで管理されている領域とフラッシュメモリ２内の記憶領域の対応関係を管理することができる。
【００３７】
この物理ブロックと論理ブロックの対応関係は、データの書き込みや消去が行われる毎に変化する。従って、物理ブロックと論理ブロックの対応関係を示すアドレス変換テーブルを作成し、対応関係が変化する毎にアドレス変換テーブルを更新している。このアドレス変換テーブルは、論理ゾーン（論理ゾーンと対応する物理ゾーン）毎に作成される。このアドレス変換テーブルは起動時に作成してもよいが、アクセスの対象になった論理ゾーンについて、その都度作成するようにしてもよい。
【００３８】
アドレス変換テーブルを作成するときは、物理ブロックの先頭ページの冗長領域２６に書き込まれる論理ブロックを示す情報（以下、論理アドレス情報という）が読み出される。冗長領域２６に書き込まれる論理アドレス情報としては、ＬＢＮ等の論理ブロックを特定する情報が用いられる。なお、本実施の形態のように論理ゾーンと物理ゾーンとの対応関係が予め設定されている場合は、ＬＺＩＢＮに基づいてアドレス変換テーブルを作成することができるので、ＬＢＮよりデータ量の少ないＬＺＩＢＮを論理アドレス情報として用いることが好ましい。
【００３９】
図６はアドレス変換テーブル３１の一例であり、論理ブロックと物理ブロックの対応関係を、ＬＺＩＢＮとＰＺＩＢＮの対応関係で示している。このアドレス変換テーブル３１では、論理ゾーンに含まれるＬＺＩＢＮ＃０〜＃４９９の５００個の論理ブロックに対応する物理ブロックを、この論理ゾーンに割り当てられている物理ゾーン内の物理ブロックに付けられたＰＺＩＢＮで示している。
【００４０】
また、物理ブロックの先頭ページの冗長領域２６には、その物理ブロックが不良ブロックであるか否かを示すブロックステータス（フラグ）が書き込まれる。更に、冗長領域２６の各サブページに割り当てられた領域には、各サブページに書き込まれたユーザデータに対応するエラーコレクションコード（ＥＣＣ）等の付加情報が書き込まれる。
【００４１】
次に、フラッシュメモリ２に対してアクセス処理を行うメモリコントローラ３について説明する。メモリコントローラ３は、フラッシュメモリ２にデータ、アドレス情報、内部コマンド等を供給することにより読み出し処理、書き込み処理、ブロック消去処理等の各処理を行う。
【００４２】
ここで、内部コマンドとは、メモリコントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２はメモリコントローラ３から与えられる内部コマンドに従って動作する。一方、ホストシステム４からメモリコントローラ３に与えられるコマンドを外部コマンドと言う。
【００４３】
メモリコントローラ３は、図１に示したように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（エラー・コレクション・コード）ブロック１１と、ＲＯＭ（Read Only Memory）１２とを備えている。これら機能ブロックによって構成されるメモリコントローラ３は、１つの半導体チップ上に集積される。
【００４４】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、メモリコントローラ３の全体の動作を制御する。
【００４５】
また、マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに基づいてフラッシュメモリインターフェースブロック１０等の動作を制御することにより、アドレス管理手段、書込み手段、ペアブロック管理手段、ペアブロック解消手段等の各手段を実現している。
【００４６】
ＲＯＭ１２は、不揮発性の記憶素子であり、マイクロプロセッサ６の動作プログラムの他に、フラッシュメモリインターフェースブロック１０の動作プログラムであるシーケンスコマンド等を記憶している。
【００４７】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。上述のアドレス変換テーブルは、このワークエリア８上に作成される。
【００４８】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態となるまでバッファ９に保持され、フラッシュメモリ２に書き込むべきデータは、フラッシュメモリ２が書き込み可能な状態となるまでバッファ９に保持される。
【００４９】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加されるエラーコレクションコードを生成するとともに、読み出しデータに付加されたエラーコレクションコードに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００５０】
ホストインターフェースブロック７は、ホストシステム４との間で、外部バス１３を介し、データ、アドレス情報、外部コマンド等の授受を行う。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（たとえば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００５１】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。フラッシュメモリインターフェースブロック１０は、書き込み処理、読み出し処理等の処理毎に設定されているシーケンスコマンドに従って、各種の処理を実行する。
【００５２】
ホストインターフェースブロック７及びフラッシュメモリインターフェースブロック１０は、図４に示したような各種レジスタを備えている。ホストインターフェースブロック７は、コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３等を備えている。フラッシュメモリインターフェースブロック１０は、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３等を備えている。
【００５３】
コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３には、ホストシステム４から与えられる情報が書き込まれる。コマンドレジスタＲ１には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。セクタ数レジスタＲ２にはアクセス対象領域のセクタ数が書き込まれる。ＬＢＡレジスタＲ３には、アクセス対象領域の先頭のＬＢＡが書き込まれる。
【００５４】
物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２及びカウンタＲ１３には、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づいて、アクセスする物理ブロックの物理ブロックアドレス（ＰＢＡ）、アクセスを開始するサブページの番号（０〜２５５）、アクセスするセクタ数（サブページの数）が設定される。
【００５５】
ここで、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２及びカウンタＲ１３に設定される物理ブロックアドレス（ＰＢＡ）、サブページの番号及びセクタ数（サブページの数）について説明する。図３に示したように、１個の論理ブロックに、ＬＢＡが連続する２５６セクタの領域を含んでいる場合、ＬＢＡの下位８ビットは論理ブロックに含まれるセクタに付けられた通番（以下、セクタ番号（ＳＮ）と言う）に対応する。一方、この下位８ビットを除いた上位側のビットは、論理ブロックに付けられた通番である論理ブロック番号（ＬＢＮ）に対応する。
【００５６】
物理ブロックアドレスレジスタＲ１１には、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に書き込まれた情報に基づいて求めた論理ブロック番号（ＬＢＮ）で特定される論理ブロックと対応する物理ブロックの物理ブロックアドレス（ＰＢＡ）又は空きブロックの物理ブロックアドレス（ＰＢＡ）が設定される。ここで、空きブロックの物理ブロックアドレス（ＰＢＡ）が設定されるのは、データの書換え等を行う場合、つまり、空きブロックに書替えデータを書き込む場合である。
【００５７】
次に、セクタ番号（ＳＮ）とサブページ番号の対応関係について説明する。本実施の形態では、論理ブロックに含まれる各セクタに対応するデータをＬＢＡの順番で物理ブロック内のサブページに書き込んでいる。従って、物理ブロック内の２５６個のサブページに付けられた通番であるサブページ番号（０〜２５５）とセクタ番号（ＳＮ）は、同じ番号同士が対応する。つまり、セクタ番号＃０に対応するデータは、サブページ番号＃０のサブページに書き込まれ、セクタ番号＃１に対応するデータは、サブページ番号＃１のサブページに書き込まれ、セクタ番号＃２に対応するデータは、サブページ番号＃２のサブページに書き込まれる。
【００５８】
セクタ番号（ＳＮ）とサブページ番号がこのような対応関係になっているため、セクタ番号レジスタＲ１２には、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に書き込まれた情報に基づいて求めたアクセス対象領域の先頭セクタのセクタ番号（ＳＮ）が設定される。つまり、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に書き込まれた情報に基づいて求めたアクセス対象領域の先頭セクタのセクタ番号（ＳＮ）は、アクセスを開始するサブページのサブページ番号に一致する。
【００５９】
カウンタＲ１３には、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に書き込まれた情報に基づいて求めたアクセス対象領域に含まれるセクタ数が設定される。つまり、アクセス対象領域に含まれるセクタ数は、アクセスされるサブページの個数に一致する。
【００６０】
尚、ＬＢＡレジスタＲ３及びセクタ数レジスタＲ２に設定された情報に基づいて特定されるアクセス対象領域が複数の論理ブロックに跨っている場合には、そのアクセス対象領域と対応する物理ブロックも複数の物理ブロックに跨っているので、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３に対する情報の設定は論理ブロック毎に行われる。
【００６１】
フラッシュメモリインターフェースブロック１０は、このようにして物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２及びカウンタＲ１３に設定された値に基づいて書き込み処理や読み出し処理を実行する。
【００６２】
書き込み処理では、１セクタのデータがバッファ９からフラッシュメモリ２に供給される毎にセクタ番号レジスタＲ１２に設定されている値がインクリメント（１ずつ増加）され、カウンタＲ１３に設定されている値がデクリメント（１ずつ減少）される。カウンタＲ１３に設定されている値が０になったときに書き込み処理が終了する。従って、セクタ番号レジスタＲ１２に最初に設定された値に対応するサブページからカウンタＲ１３に最初に設定された値に対応するサブページ分のデータが書き込まれる。
【００６３】
同様に、読み出し処理では、１セクタのデータがフラッシュメモリ２からバッファ９に読み出される毎にセクタ番号レジスタＲ１２に設定されている値がインクリメント（１ずつ増加）され、カウンタＲ１３に設定されている値がデクリメント（１ずつ減少）される。カウンタＲ１３に設定されている値が０になったときに読み出し処理が終了する。従って、セクタ番号レジスタＲ１２に最初に設定された値に対応するサブページからカウンタＲ１３に最初に設定された値に対応するサブページ分のデータが読み出される。
【００６４】
例えば、セクタ番号レジスタＲ１２に「１０」を設定し、カウンタＲ１３に「８」を設定して書き込み処理を開始した場合、サブページ番号＃１０〜＃１７のサブページにユーザデータが書き込まれる。
【００６５】
次に空きブロック検索について説明する。フラッシュメモリに記憶されているデータを書き替えるときには、書換えデータを元のデータが記憶されていた物理ブロックとは別の物理ブロックに書き込んでいる。従って、フラッシュメモリに記憶されているデータを書き替えるときには、書換えデータの書き込み先になる空きブロックの検索が行われる。図５は、空きブロックを検索するときに用いられる空きブロック検索テーブル３３の一例を示している。
【００６６】
この空きブロック検索テーブル３３は、６４バイト（５１２ビット）のデータから構成され、物理ゾーンに含まれる物理ブロックの使用状況を各ビットの論理値で示している。つまり、各ビットが物理ゾーンに含まれる１個の物理ブロックに対応しており、空きブロックに対応するビットには論理値「１」が設定されている。データが書き込まれている物理ブロックに対応するビットと、不良ブロックに対応するビットには論理値「０」が設定されている。
【００６７】
図５では、一番上の行の８ビット（１バイト）は、下位側から順番にＰＺＩＢＮ＃０〜＃７の物理ブロックの使用状況を示している。以下同様に、二番目の行は、ＰＺＩＢＮ＃８〜＃１５の物理ブロックの使用状況を示し、三番目の行は、ＰＺＩＢＮ＃１６〜＃２３の物理ブロックの使用状況を示している。そして、一番下の行は、ＰＺＩＢＮ＃５０４〜＃５１１の物理ブロックの使用状況を示している。従って、一番上の行の最下位ビットはＰＺＩＢＮ＃０の物理ブロックの使用状況を示し、一番下の行の最上位ビットはＰＺＩＢＮ＃５１１の物理ブロックの使用状況を示している。
【００６８】
この空きブロック検索テーブル３３を用いて空きブロックを検索する場合は、各行の１バイトのデータを上の行から順番に読み出していき、読み出したデータが０（２進数表示：００００ ００００）でないときは、そのデータをシフトレジスタに書き込み、シフトレジスタを下位方向にシフトさせる。何回のシフトでキャリーが発生したかにより、下位から何ビット目が「１」であるかを判別する。例えば、４番目の行（ＰＺＩＢＮ＃２４〜＃３１）の０００１ １０００（２進数表示）をシフトレジスタに書き込み、シフトレジスタを下位方向にシフトさせた場合は、４回のシフトでキャリーが発生するので、下位側から４ビット目に対応するＰＺＩＢＮ＃２７の物理ブロックが空きブロックとして検出される。
【００６９】
また、次回の空きブロック検索では、４番目の行の下位側から５ビット目のビットから検索が開始される。このように下位側から５ビット目のビットから検索が開始する場合は、シフトレジスタにデータを設定する前に、設定するデータの下位４ビットが「０」になるようなマスク処理が施される。
【００７０】
尚、検出した空きブロックにデータを書き込んだときには、その物理ブロックに対応する空きブロック検索テーブル３３上のビットが「１」から「０」に書き換えられる。又、データの書替えで、元のデータが記憶されていた物理ブロックの記憶データを消去したときには、その物理ブロックに対応する空きブロック検索テーブル３３上のビットが「０」から「１」に書き換えられる。一方、アドレス変換テーブル（論理ブロックと物理ブロックの対応関係をＬＺＩＢＮとＰＺＩＢＮの対応関係で示したアドレス変換テーブル）については、書き込んだデータに対応する論理ブロックのＬＺＩＢＮと対応関係にあるＰＺＩＢＮが、元のデータが記憶されていた物理ブロックのＰＺＩＢＮから書換えデータを書き込んだ物理ブロックのＰＺＩＢＮに変更する。
【００７１】
次に、本発明に係るペアブロックの管理について説明する。このペアブロックは、同一の論理ブロックに対応する２個の物理ブロックである。上述のように、フラッシュメモリ２に記憶されているデータを書き換える場合には、元のデータが記憶されている物理ブロック（第１の物理ブロック）とは別の物理ブロック（第２の物理ブロック）に書換えデータが書き込まれる。ここで、書換え範囲に含まれるサブページの後に、書換え範囲に含まれないサブページがあった場合、この書換え範囲に含まれないサブページについては、第１の物理ブロックから第２の物理ブロックへのデータの転送（複写）を行わずに、同一の論理ブロックに対応する２個の物理ブロック（第１の物理ブロックと第２の物理ブロック）を並存させている。ここで、ペアブロックに記憶されているＬＢＡが同一のデータ（サブページ番号が同一のサブページに記憶されているデータ）については、第２の物理ブロックに記憶されているデータが優先され、第１の物理ブロックにだけ記憶されているデータについては、第１の物理ブロックに記憶されているデータが有効になる。
【００７２】
このようにすることにより、アクセス対象領域が連続する書き込み指示がホストシステム側から与えられた場合、つまり、ホストシステム側から与えられた書き込み指示に基づいた書換え範囲が連続している場合に、第１の物理ブロックから第２の物理ブロックへの無駄なデータの転送（複写）を行わずに、第２の物理ブロックに対して書換えデータを継続して書き込むことができる。しかし、ペアブロックの数が多くなりすぎると、空きブロックを確保することができなくなる。
【００７３】
そこで、本発明に係るペアブロックの管理では、このペアブロックの最大数を設定し、ペアブロックの組数（ペア数）が最大数に達したときに、最も古いペアブロック（ペアブロック状態になった順番が最先のペアブロック）の第１の物理ブロックにだけ記憶されているデータについて、第１の物理ブロックから第２の物理ブロックへのデータの転送（複写）を行い、このデータの転送（複写）が終了した後に、第１の物理ブロックの記憶データを消去して、ペアブロックの組数（ペア数）が所定の最大数を超えないように管理している。
【００７４】
このペアブロックを管理する方法について図７〜図１０を参照しながら説明する。尚、本実施の形態では、ペアブロックの最大数を２としている。又、ペアブロックの新旧関係（ペアブロック状態になった順番の先後関係）を判断するために、物理ブロックの先頭ページの冗長領域に２ビットのペアブロックシリアル番号（＃０〜＃３）を書き込んでいる。このペアブロックシリアル番号のビット数については、ペアブロックの最大数に応じて適宜設定する。例えば、ペアブロックの最大数が３以下であれば、２ビットのペアブロックシリアル番号でペアブロックの新旧関係を判断することができるが、ペアブロックの最大数が４の場合は、ペアブロックシリアル番号を３ビット（＃０〜＃７）にしなければ、ペアブロックの新旧関係を判断することができなくなる。
【００７５】
又、以下の説明では、ホストシステム４から与えられる書込み（書換え）の指示に基づいたアクセス対象領域は、ＬＺＮ＃０の論理ゾーンに含まれるものとして説明する。このＬＺＮ＃０の論理ゾーンについては、図６に示したようなアドレス変換テーブル３１及び図５に示したような空きブロック検索テーブル３３が作成されているものとする。又、以下の処理を開始する時点では、ペアブロックは存在せず、後述するペアブロックテーブルには、何の情報も設定されていないものとする。
【００７６】
まず、ホストシステムから与えられた書込み（書換え）の指示に基づいたアクセス対象領域が、ＬＢＮ＃０（＝ＬＺＩＢＮ＃０）の論理ブロックのＳＮ＃６４〜＃１５９の９６セクタの領域であった場合の書込み（書換え）処理について説明する（図７（ａ）に示した＊１）。
【００７７】
まず、アドレス変換テーブル３１を参照することにより、ＬＺＩＢＮ＃０（＝ＬＢＮ＃０）の論理ブロックに対応するデータがＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックに記憶されていることが分かる。更に、後述するペアブロックテーブルを参照することにより、ペアブロックは存在しないことが分かる。
【００７８】
続いて、ＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックの書込み状態を調べ、全てのサブページにデータが書き込まれているため、空きブロック検索テーブル３３を用いた空きブロック検索が行われる。この空きブロック検索で、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）が検出され、このＰＢＡ＃２７（ＰＺＩＢＮ＃２７）の物理ブロックに対する書込み（書換え）処理が開始される。
【００７９】
この書込み（書換え）処理では、まず、ＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックのサブページ番号＃０〜＃６３のサブページに記憶されているデータが、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックのサブページ番号＃０〜＃６３のサブページに転送（複写）される。続いて、ホストシステム４から与えられるＬＢＮ＃０（＝ＬＺＩＢＮ＃０）の論理ブロックのＳＮ＃６４〜＃１５９のセクタに対応する書換えデータ（書換えデータＡ）が、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックのサブページ番号＃６４〜＃１５９のサブページに書き込まれる。
【００８０】
尚、この書込み（書換え）処理を開始する時点でペアブロックは存在しないので、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックの冗長領域には、ペアブロックシリアル番号として＃０が書き込まれる。又、同一の論理ブロックに対応するＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックとＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックの新旧関係を判断するため、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックの冗長領域にシリアル番号が書き込まれる。ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックに書き込まれるシリアル番号は、ＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックに書き込まれているシリアル番号をインクリメント（１を加算）した＃１になる。又、空きブロック検索テーブル３３のＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックに対応するビットの論理値が「１」から「０」に書き換えられる。
【００８１】
この後、アクセス対象領域にＬＢＮ＃０（＝ＬＺＩＢＮ＃０）の論理ブロックのＳＮ＃１６０以降のセクタが含まれる書込み（書換え）の指示が与えられた場合は、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックのサブページ番号＃１６０以降のサブページに対してその書込み（書換え）処理が続行される。従って、ＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックのサブページ番号＃１６０〜＃２５５のサブページに記憶されているデータを、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックのサブページ番号＃１６０〜＃２５５のサブページに転送（複写）する、データの転送（複写）を行わない。つまり、書換え範囲に含まれるサブページの後に、書換え範囲に含まれないサブページがあった場合、この書換え範囲に含まれないサブページについては、書換え対象でない記憶データの転送（複写）を行わない。
【００８２】
ここで、ＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックとＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックがペアブロックになるため、ペアブロックテーブルにペアブロックを管理するための情報が設定される。
【００８３】
図８はペアブロックテーブル３２の一例であり、このペアブロックテーブル３２には、ペアブロックと対応関係にある論理ブロックのＬＺＩＢＮ、ペアブロックの新旧関係が新しい方の物理ブロックのＰＺＩＢＮ、及び新旧関係が新しい方の物理ブロックに書き込まれたペアブロックシリアル番号が設定される。ここでは、図８（ａ）に示したように、ＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロック及びＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックと対応関係にある論理ブロックのＬＺＩＢＮである＃０、新旧関係が新しい方の物理ブロックのＰＺＩＢＮである＃２７、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックの冗長領域に書き込んだペアブロックシリアル番号である＃０をそれぞれ設定する。
【００８４】
次に、ホストシステムから与えられた書込み（書換え）の指示に基づいたアクセス対象領域が、ＬＢＮ＃２（＝ＬＺＩＢＮ＃２）の論理ブロックのＳＮ＃３２〜＃１２７の９６セクタの領域であった場合の書込み（書換え）処理について説明する（図７（ｂ）に示した＊２）。
【００８５】
この書込み（書換え）処理の場合も、まず、アドレス変換テーブル３１とペアブロックテーブルが参照される。アドレス変換テーブル３１を参照することにより、ＬＺＩＢＮ＃２（＝ＬＢＮ＃２）の論理ブロックに対応するデータがＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロックに記憶されていることが分かる。更に、ペアブロックテーブル３２を参照することにより、ペアブロックが存在し、そのペアブロックに対応するペアブロックシリアル番号が＃０であることが分かる。
【００８６】
続いて、ＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロックの書込み状態を調べ、全てのサブページにデータが書き込まれいるため、空きブロック検索テーブル３３を用いた空きブロック検索が行われる。この空きブロック検索で、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）が検出され、このＰＢＡ＃２８（ＰＺＩＢＮ＃２８）の物理ブロックに対する書込み（書換え）処理が開始される。
【００８７】
この書込み（書換え）処理では、まず、ＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロックのサブページ番号＃０〜＃３１のサブページに記憶されているデータが、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックのサブページ番号＃０〜＃３１のサブページに転送（複写）される。続いて、ホストシステム４から与えられるＬＢＮ＃２（＝ＬＺＩＢＮ＃２）の論理ブロックのＳＮ＃３２〜＃１２７のセクタに対応する書換えデータ（書換えデータＢ）が、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックのサブページ番号＃３２〜＃１２７のサブページに書き込まれる。
【００８８】
尚、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックの冗長領域には、シリアル番号として＃０が書き込まれ、ペアブロックシリアル番号として＃１が書き込まれる。ここで、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックの冗長領域に書き込まれるシリアル番号は、ＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロックの冗長領域に書き込まれているシリアル番号をインクリメント（１を加算）した番号になる。又、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックの冗長領域に書き込まれるペアブロックシリアル番号は、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号をインクリメント（１を加算）した番号になる。又、空きブロック検索テーブル３３のＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックに対応するビットの論理値は、「１」から「０」に書き換えられる。
【００８９】
ここで、ＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロックとＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックがペアブロックになるため、ペアブロックが２つになる。従って、ＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロックとＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックからなるペアブロックの情報をペアブロックテーブル３２に設定するためには、ペアブロックテーブルに設定されているＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックとＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックのペアブロック状態を解消しなければならない。このペアブロック状態を解消するため、図７（ａ）の＊３に示したデータの転送（複写）を行わなければならない。
【００９０】
このデータの転送（複写）では、ＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックのサブページ番号＃１６０〜＃２５５のサブページに記憶されているデータが、ＰＺＩＢＮ＃２７（＝ＰＢＡ＃２７）の物理ブロックのサブページ番号＃１６０〜＃２５５のサブページに転送（複写）される。このデータの転送（複写）が終了した後、ＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックの記憶データが消去される。又、アドレス変換テーブル３１のＬＺＩＢＮ＃０に対応するＰＺＩＢＮは＃２２から＃２７に書き換えられ、空きブロック検索テーブル３３のＰＺＩＢＮ＃２２（＝ＰＢＡ＃２２）の物理ブロックに対応するビットの論理値は０から１に書き換えられる。
【００９１】
一方、ペアブロックテーブル３２には、図８（ｂ）に示したようにＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロックとＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックからなるペアブロックの情報が設定される。つまり、ＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロック及びＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックと対応関係にある論理ブロックのＬＺＩＢＮである＃２、新旧関係が新しい方の物理ブロックのＰＺＩＢＮである＃２８、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックの冗長領域に書き込んだペアブロックシリアル番号である＃１をそれぞれ設定する。
【００９２】
次に、ＬＢＮ＃１（＝ＬＺＩＢＮ＃１）の論理ブロックのＳＮ＃６４〜＃２５５の１９２セクタの領域に対する書込み（書換え）の指示がホストシステムから与えられた場合について説明する（図９（ｂ）に示した＊４）。
【００９３】
この書込み（書換え）処理は、ペアブロック状態を解消するためのデータの転送（複写）（図７（ａ）の＊３）が終了した後に開始される。従って、この書換え処理を開始するときに存在するペアブロックは、ＰＺＩＢＮ＃６（＝ＰＢＡ＃６）の物理ブロックとＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックからなるペアブロック（図９（ａ））だけである。
【００９４】
この書込み（書換え）処理の場合も、まず、アドレス変換テーブル３１とペアブロックテーブルが参照される。アドレス変換テーブル３１を参照することにより、ＬＺＩＢＮ＃１（＝ＬＢＮ＃１）の論理ブロックに対応するデータがＰＺＩＢＮ＃１２（＝ＰＢＡ＃１２）の物理ブロックに記憶されていることが分かる。更に、ペアブロックテーブル３２を参照することにより、ペアブロックが存在し、そのペアブロックに対応するペアブロックシリアル番号が＃１であることが分かる。
【００９５】
続いて、ＰＺＩＢＮ＃１２（＝ＰＢＡ＃１２）の物理ブロックの書込み状態を調べ、全てのサブページにデータが書き込まれいるため、空きブロック検索テーブル３３を用いた空きブロック検索が行われる。この空きブロック検索で、ＰＺＩＢＮ＃５０（＝ＰＢＡ＃５０）が検出され、このＰＢＡ＃５０（ＰＺＩＢＮ＃５０）の物理ブロックに対する書込み（書換え）処理が開始される。
【００９６】
この書込み（書換え）処理では、まず、ＰＺＩＢＮ＃１２（＝ＰＢＡ＃１２）の物理ブロックのサブページ番号＃０〜＃６３のサブページに記憶されているデータが、ＰＺＩＢＮ＃５０（＝ＰＢＡ＃５０）の物理ブロックのサブページ番号＃０〜＃６３のサブページに転送（複写）される。続いて、ホストシステム４から与えられるＬＢＮ＃１（＝ＬＺＩＢＮ＃１）の論理ブロックのＳＮ＃６４〜＃２５５のセクタに対応する書換えデータ（書換えデータＣ）が、ＰＺＩＢＮ＃５０（＝ＰＢＡ＃５０）の物理ブロックのサブページ番号＃６４〜＃２５５のサブページに書き込まれる。
【００９７】
尚、ＰＺＩＢＮ＃５０（＝ＰＢＡ＃５０）の物理ブロックの冗長領域には、シリアル番号として＃３が書き込まれ、ペアブロックシリアル番号として＃２が書き込まれる。ここで、ＰＺＩＢＮ＃５０（＝ＰＢＡ＃５０）の物理ブロックの冗長領域に書き込まれるシリアル番号は、ＰＺＩＢＮ＃１２（＝ＰＢＡ＃１２）の物理ブロックの冗長領域に書き込まれているシリアル番号をインクリメント（１を加算）した番号になる。又、ＰＺＩＢＮ＃５０（＝ＰＢＡ＃５０）の物理ブロックの冗長領域に書き込まれるペアブロックシリアル番号は、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号をインクリメント（１を加算）した番号になる。又、空きブロック検索テーブル３３のＰＺＩＢＮ＃５０（＝ＰＢＡ＃５０）の物理ブロックに対応するビットの論理値は、「１」から「０」に書き換えられる。
【００９８】
この書込み（書換え）処理が終了したときにＰＺＩＢＮ＃１２（＝ＰＢＡ＃１２）の物理ブロックに記憶されている全てのデータは、ＰＺＩＢＮ＃５０（＝ＰＢＡ＃５０）の物理ブロックに記憶されているデータで置き換えられているので、アドレス変換テーブル３１は更新されるが、ペアブロックテーブル３２は更新されない。つまり、この書込み（書換え）処理が終了した後にＰＺＩＢＮ＃１２（＝ＰＢＡ＃１２）の物理ブロックに記憶されているデータが消去され、アドレス変換テーブル３１のＬＺＩＢＮ＃１に対応するＰＺＩＢＮは＃１２から＃５０に書き換えられ、空きブロック検索テーブル３３のＰＺＩＢＮ＃１２（＝ＰＢＡ＃１２）の物理ブロックに対応するビットの論理値は０から１に書き換えられる。
【００９９】
この後、更にホストシステムから書込み（書換え）の指示が与えられた場合、ホストシステム４から与えられる書換えデータが書込まれる物理ブロックの冗長領域には、ペアブロックテーブル３２に設定されているペアブロックシリアル番号をインクリメント（１を加算）した番号、つまり、ＰＺＩＢＮ＃２８（＝ＰＢＡ＃２８）の物理ブロックの冗長領域に書き込まれているペアブロックシリアル番号をインクリメント（１を加算）した番号が書き込まれる。
【０１００】
以上に説明した実施の形態では、ペアブロックの最大数を２としため、ペアブロックテーブル３２に設定される情報（ＬＺＩＢＮ、ＰＺＩＢＮ及びペアブロックシリアル番号）は１組であったが、ペアブロックの最大数をｎとした場合は、ペアブロックテーブル３２に設定できる情報をｎ−１組とすればよい。例えば、ペアブロックの最大数を３とした場合は、図１０に示したようにペアブロックテーブル３２には２組までの情報が設定される。
【０１０１】
図１０に示したようにペアブロックテーブル３２に２組の情報が設定されていた場合において、新たなペアブロックの新旧関係が新しい方の物理ブロックの冗長領域には、順番が後のペアブロックシリアル番号をインクリメント（１を加算）した番号が書き込まれる。つまり、図１０に示したようにペアブロックテーブル３２に設定されているペアブロックシリアル番号が＃３と＃０の場合には、＃０をインクリメント（１を加算）した＃１が新たなペアブロックの新旧関係が新しい方の物理ブロックの冗長領域に書き込まれる。
【０１０２】
又、新たなペアブロックができた場合には、順番が先のペアブロックシリアル番号に対応するペアブロックのペアブロック状態が解消される。つまり、図１０に示したようにペアブロックテーブル３２に設定されているペアブロックシリアル番号が＃３と＃０の場合には、ＬＺＩＢＮ＃７の論理ブロックに対応するペアブロックのペアブロック状態が解消される。
【０１０３】
以上に説明したように、本発明のメモリコントローラ、メモリコントローラを備えるフラッシュメモリ、並びに、フラッシュメモリの制御方法においては、ペアブロックの組数及びペアブロックの新旧関係（ペアブロック状態になった順番の先後関係）を管理し、ペアブロックの組数が予め設定した最大数に達したときに、一番古いペアブロック（ペアブロック状態になった順番が最先のペアブロック）のペアブロック状態を解消している。従って、ペアブロック間の無駄な記憶データの転送（複写）を減少させるという効果を維持しつつ、ペアブロックの増加に伴う空きブロック数の減少を所定の範囲内に抑えることが可能となる。
【０１０４】
尚、本発明のメモリコントローラ、メモリコントローラを備えるフラッシュメモリ、並びに、フラッシュメモリの制御方法は上述した実施の形態に限定されず、特許請求の範囲に記載した範囲で様々の変形や改良が可能である。例えば、ペアブロックシリアル番号、ペアブロックテーブル等は、ペアブロック状態になった順番の先後関係を判別できれば、様々の変形や改良が可能である。
【図面の簡単な説明】
【０１０５】
【図１】本発明の一実施の形態によるフラッシュメモリシステムの概略構成を示すブロック図である。
【図２】フラッシュメモリにおける物理アドレス空間を示す図である。
【図３】ＬＢＡから物理ブロックアドレス（ＰＢＡ）へのアドレス変換を説明する図である。
【図４】本発明の一実施の形態によるホストインターフェースブロック及びフラッシュメモリインターフェースブロックのレジスタ構成を示すブロック図である。
【図５】空きブロック検索テーブルの構成の一例を示す図である。
【図６】アドレス変換テーブルの構成の一例を示す図である。
【図７】データの書き換え処理における、物理ブロックのデータ格納状態を示す概略図である。
【図８】ペアブロックテーブルの構成の一例を示す図である。
【図９】データの書き換え処理における、物理ブロックのデータ格納状態を示す概略図である。
【図１０】ペアブロックテーブルの構成の一例を示す図である。
【符号の説明】
【０１０６】
１    フラッシュメモリシステム
２    フラッシュメモリ
３    コントローラ
４    ホストシステム
６    マイクロプロセッサ
７    ホストインターフェースブロック
８    ワークエリア
９    バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１２  ＲＯＭ
１３  外部バス
１４  内部バス
【図１】
2008097339.tif 000003
【図２】
2008097339.tif 000004
【図３】
2008097339.tif 000005
【図４】
2008097339.tif 000006
【図５】
2008097339.tif 000007
【図６】
2008097339.tif 000008
【図７】
2008097339.tif 000009
【図８】
2008097339.tif 000010
【図９】
2008097339.tif 000011
【図１０】
2008097339.tif 000012