(57)【要約】【課題】  記憶データの誤りを、効率良く訂正して、フラッシュメモリに保存し直す。【解決手段】  メモリセルアレイ２１から読み出したデータは、ページレジスタ２２に保持される。保持されたデータは、フラッシュメモリコントローラ３によって読み出され、フラッシュメモリコントローラ３内のＥＣＣブロック１１に入力される。ＥＣＣブロック１１は、入力されたデータに基づいて訂正データとその訂正データに対応するカラムアドレスを求め、フラッシュメモリコントローラ３内の訂正レジスタに蓄積する。訂正レジスタに蓄積された訂正データをページレジスタ２２に転送し（訂正データの転送先は、訂正レジスタに蓄積されたカラムアドレスによって特定される）、ページレジスタ２２に保持されたデータに含まれる誤りを訂正する。ページレジスタ２２に保持されている訂正済みのデータは、メモリセルアレイ２１に書き込まれる。【選択図】  図１
2008158908.tif 000002
【特許請求の範囲】
【請求項１】
複数のページで構成されたメモリセルアレイと、該メモリセルアレイに書き込むデータ又は該メモリセルアレイから読み出したデータをページ単位で保持する内部レジスタとを備えるフラッシュメモリに対して、前記メモリセルアレイ内の第1のページに記憶されているデータを前記内部レジスタに読み出すことを指示する読み出し指示と、該読み出し指示に基づいて前記内部レジスタに読み出されたデータを前記第1のページとは異なる第２のページに書き込むことを指示する書き込み指示とを与えるデータ複写指示手段と、
前記第1のページに記憶されているデータを、前記フラッシュメモリのデータバスを介して前記フラッシュメモリから読み出す読み出し手段と、
前記読み出し手段により前記フラッシュメモリから読み出された前記第1のページに記憶されているデータに含まれる誤りの訂正値を求める誤り訂正手段と、
前記データバスのバス幅に対応するビット数単位で、前記訂正値を含む訂正データを保持する訂正データ保持手段と、
前記訂正データ保持手段に保持されている前記訂正データを、前記データバスを介して前記フラッシュメモリに転送し、前記内部レジスタに保持されているデータの一部を前記訂正データで置き換えるデータ置換手段とを備え、
前記データ複写指示手段は、前記第1のページに記憶されているデータに誤りが含まれている場合に、前記第1のページから前記内部レジスタに読み出されたデータの一部が前記訂正データで置き換えられた後に、前記第２のページに書き込むことを指示する書き込み指示を前記フラッシュメモリに与えることを特徴とするメモリコントローラ。
【請求項２】
前記訂正データ保持手段は、前記訂正データで置き換えられるデータの前記内部レジスタ内での位置を示す位置情報を保持し、前記データ置換手段は該位置情報に対応する部分のデータを前記訂正データで置き換えることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
請求項１又は２に記載のメモリコントローラと、
フラッシュメモリと、
を備えるフラッシュメモリシステム。
【請求項４】
複数のページで構成されたメモリセルアレイと、該メモリセルアレイに書き込むデータ又は該メモリセルアレイから読み出したデータをページ単位で保持する内部レジスタとを備えるフラッシュメモリに対して、前記メモリセルアレイ内の第1のページに記憶されているデータを前記内部レジスタに読み出すことを指示する第１のステップと、
前記第１のステップで前記内部レジスタに読み出されたデータを、前記フラッシュメモリのデータバスを介して前記内部レジスタから読み出す第２のステップと、
前記第２のステップで読み出されたデータに含まれる誤りの訂正値を求める第３のステップと、
前記第３のステップで求められた前記訂正値を含む訂正データを、前記データバスのバス幅に対応するビット数単位で保持する第４のステップと、
前記第４のステップで保持された前記訂正データを、前記データバスを介して前記内部レジスタに転送し、前記内部レジスタに保持されているデータの一部を前記訂正データで置き換える第５のステップと、
前記第５のステップで前記内部レジスタに保持されているデータの一部が前記訂正データで置き換えられた後に、前記フラッシュメモリに対して、前記内部レジスタに保持されているデータを前記第1のページとは異なる第２のページに書き込むことを指示する第６のステップと、
を含むことを特徴とするフラッシュメモリの制御方法。
【請求項５】
複数のページで構成されたメモリセルアレイと、該メモリセルアレイに書き込むデータ又は該メモリセルアレイから読み出したデータをページ単位で保持する内部レジスタとを備えるフラッシュメモリに対して、前記メモリセルアレイ内の第1のページに記憶されているデータを前記内部レジスタに読み出すことを指示する第１のステップと、
前記第１のステップで前記内部レジスタに読み出されたデータを、前記フラッシュメモリのデータバスを介して前記内部レジスタから読み出す第２のステップと、
前記第２のステップで読み出されたデータに含まれる誤りの訂正値を求める第３のステップと、
前記第３のステップで求められた前記訂正値を含む訂正データを、前記データバスのバス幅に対応するビット数単位で保持する第４のステップと、
前記フラッシュメモリに対して、前記第1のページに記憶されているデータを前記内部レジスタに読み出すことを指示する第５のステップと、
前記第４のステップで保持された前記訂正データを、前記第５のステップで前記内部レジスタに読み出されたデータが保持されている前記内部レジスタに前記データバスを介して転送し、前記内部レジスタに保持されているデータの一部を前記訂正データで置き換える第６のステップと、
前記第６のステップで前記内部レジスタに保持されているデータの一部が前記訂正データで置き換えられた後に、前記フラッシュメモリに対して、前記内部レジスタに保持されているデータを前記第1のページとは異なる第２のページに書き込むことを指示する第７のステップと、
を含むことを特徴とするフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、当該メモリコントローラを備えるフラッシュメモリシステム及びフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
近年、不揮発性の記憶媒体であるフラッシュメモリの開発が盛んに行われ、デジタルカメラ等の情報機器（ホストシステム）の記憶媒体として普及している。そして、このような情報機器が扱うデータが大容量化したことに伴い、フラッシュメモリの記憶容量も大容量化が進んでいる。そのため、集積度に優れ、大容量化が容易なＮＡＮＤ型フラッシュメモリが注目されている。
【０００３】
フラッシュメモリは、メモリセルを消去状態（論理値＝１）から書込状態（論理値＝０）に変化させる場合には、メモリセル単位で行うことができる。しかし、メモリセルを書込状態（論理値＝０）から消去状態（論理値＝１）に変化させる場合には、複数のメモリセルからなる所定の消去単位（ブロック単位）でしかこれを行うことができない。
【０００４】
また、ＮＡＮＤ型フラッシュメモリにおいては、上記ブロックは複数のページで構成されている。このページは、データの読み出し及び書き込みにおける処理単位であるが、上記特性によりデータの上書きができないため、記憶されているデータを書き換える場合には、書き換えデータを元のブロックとは異なる消去済みのブロックに書き込まなければならない。
【０００５】
さらに、フラッシュメモリは、その特性上、あるメモリセルに対する読み出しや書き込みが実行された場合に、そのメモリセルとビット線を共通にする他のメモリセルの状態が変化してしまうことがある。この現象はディスターブ現象と呼ばれ、メモリセルに対して書き込み動作・消去動作が繰り返されることにより発生率が高くなることが知られている。このディスターブ現象によって、一旦書き込まれたデータが変化し、データに誤りが混入してしまう。
【０００６】
このような場合、誤りが混入したページのデータをフラッシュメモリから読み出し、その誤りを訂正した後に、再度、フラッシュメモリに書き込むことが好ましい。例えば、特許文献１には、フラッシュメモリから読み出したデータに含まれる誤りが検出されたときに、その誤りを訂正したデータを他のブロックに書き込む発明が開示されている。
【特許文献１】特開２００４−２７２４７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に記載された処理では、誤りが検出されたページに記憶されているデータをフラッシュメモリから読み出してメモリコントローラ内のバッファに保持し、そのデータに含まれる誤りを訂正した後、訂正したデータをフラッシュメモリに書き込んでいる。つまり、この処理では、１ページ分のデータをフラッシュメモリからメモリコントローラに転送した後、更に、１ページ分のデータをメモリコントローラからフラッシュメモリに転送しなければならない。従って、特許文献１に記載された処理では、訂正済データをフラッシュメモリに保存し直すときの効率が良くなかった。
【０００８】
本発明は、上記実状に鑑みてなされたものであり、フラッシュメモリに記憶されているデータの誤りを、効率良く訂正して、フラッシュメモリに保存し直すことができるメモリコントローラ、フラッシュメモリシステム等を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の第１の観点に係るメモリコントローラは、複数のページで構成されたメモリセルアレイと、該メモリセルアレイに書き込むデータ又は該メモリセルアレイから読み出したデータをページ単位で保持する内部レジスタとを備えるフラッシュメモリに対して、前記メモリセルアレイ内の第1のページに記憶されているデータを前記内部レジスタに読み出すことを指示する読み出し指示と、該読み出し指示に基づいて前記内部レジスタに読み出されたデータを前記第1のページとは異なる第２のページに書き込むことを指示する書き込み指示とを与えるデータ複写指示手段と、
前記第1のページに記憶されているデータを、前記フラッシュメモリのデータバスを介して前記フラッシュメモリから読み出す読み出し手段と、
前記読み出し手段により前記フラッシュメモリから読み出された前記第1のページに記憶されているデータに含まれる誤りの訂正値を求める誤り訂正手段と、
前記データバスのバス幅に対応するビット数単位で、前記訂正値を含む訂正データを保持する訂正データ保持手段と、
前記訂正データ保持手段に保持されている前記訂正データを、前記データバスを介して前記フラッシュメモリに転送し、前記内部レジスタに保持されているデータの一部を前記訂正データで置き換えるデータ置換手段と、を備え、
前記データ複写指示手段は、前記第1のページに記憶されているデータに誤りが含まれている場合に、前記第1のページから前記内部レジスタに読み出されたデータの一部が前記訂正データで置き換えられた後に、前記第２のページに書き込むことを指示する書き込み指示を前記フラッシュメモリに与えることを特徴とする。
【００１０】
上記本発明に係るメモリコントローラでは、フラッシュメモリから読み出したデータに含まれる誤りが検出されたときに、その誤り部分を訂正するための訂正データが、フラッシュメモリに対するデータ転送の単位に相当する前記データバスのバス幅に対応するビット数単位で保持される。更に、この訂正データに対応するデータが保持されている内部レジスタにこの訂正データが転送され、内部レジスタに保持されているデータに含まれる誤りが訂正された後に、内部レジスタに保持されているデータがメモリセルアレイに書き込まれる。つまり、上記本発明に係るメモリコントローラでは、フラッシュメモリから読み出したデータに含まれる誤りが検出されたときに、その誤り部分を訂正するための訂正データだけが内部レジスタに転送され、内部レジスタ上で内部レジスタに保持されているデータの誤りの訂正が行われる。
【００１１】
前記訂正データ保持手段は、前記訂正データで置き換えられるデータの前記内部レジスタ内での位置を示す位置情報を保持し、前記データ置換手段は該位置情報に対応する部分のデータを前記訂正データと置き換えることを特徴とする。
【００１２】
上記目的を達成するため、本発明の第２の観点に係るフラッシュメモリシステムは、
上記メモリコントローラと、フラッシュメモリとを備えることを特徴とする。
【００１３】
上記目的を達成するため、本発明の第３の観点に係るフラッシュメモリの制御方法は、
複数のページで構成されたメモリセルアレイと、該メモリセルアレイに書き込むデータ又は該メモリセルアレイから読み出したデータをページ単位で保持する内部レジスタとを備えるフラッシュメモリに対して、前記メモリセルアレイ内の第1のページに記憶されているデータを前記内部レジスタに読み出すことを指示する第１のステップと、
前記第１のステップで前記内部レジスタに読み出されたデータを、前記フラッシュメモリのデータバスを介して前記内部レジスタから読み出す第２のステップと、
前記第２のステップで読み出されたデータに含まれる誤りの訂正値を求める第３のステップと、
前記第３のステップで求められた前記訂正値を含む訂正データを、前記データバスのバス幅に対応するビット数単位で保持する第４のステップと、
前記第４のステップで保持された前記訂正データを、前記データバスを介して前記内部レジスタに転送し、前記内部レジスタに保持されているデータの一部を前記訂正データで置き換える第５のステップと、
前記第５のステップで前記内部レジスタに保持されているデータの一部が前記訂正データで置き換えられた後に、前記フラッシュメモリに対して、前記内部レジスタに保持されているデータを前記第1のページとは異なる第２のページに書き込むことを指示する第６のステップと、
を含むことを特徴とする。
【００１４】
上記目的を達成するため、本発明の第４の観点に係るフラッシュメモリの制御方法は、
複数のページで構成されたメモリセルアレイと、該メモリセルアレイに書き込むデータ又は該メモリセルアレイから読み出したデータをページ単位で保持する内部レジスタとを備えるフラッシュメモリに対して、前記メモリセルアレイ内の第1のページに記憶されているデータを前記内部レジスタに読み出すことを指示する第１のステップと、
前記第１のステップで前記内部レジスタに読み出されたデータを、前記フラッシュメモリのデータバスを介して前記内部レジスタから読み出す第２のステップと、
前記第２のステップで読み出されたデータに含まれる誤りの訂正値を求める第３のステップと、
前記第３のステップで求められた前記訂正値を含む訂正データを、前記データバスのバス幅に対応するビット数単位で保持する第４のステップと、
前記フラッシュメモリに対して、前記第1のページに記憶されているデータを前記内部レジスタに読み出すことを指示する第５のステップと、
前記第４のステップで保持された前記訂正データを、前記第５のステップで前記内部レジスタに読み出されたデータが保持されている前記内部レジスタに前記データバスを介して転送し、前記内部レジスタに保持されているデータの一部を前記訂正データで置き換える第６のステップと、
前記第６のステップで前記内部レジスタに保持されているデータの一部が前記訂正データで置き換えられた後に、前記フラッシュメモリに対して、前記内部レジスタに保持されているデータを前記第1のページとは異なる第２のページに書き込むことを指示する第７のステップと、
を含むことを特徴とする。
【発明の効果】
【００１５】
本発明によれば、フラッシュメモリに記憶されているデータの誤りを、効率良く訂正して、フラッシュメモリに保存し直すことができる。
【発明を実施するための最良の形態】
【００１６】
以下、図面に基づき、本発明の実施の形態について詳細に説明する。
図１は、本発明の実施の形態に係るフラッシュメモリシステム１の構成を概略的に示すブロック図である。
図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するフラッシュメモリコントローラ３とから構成され、外部バス１３を介してホストシステム４と接続される。
【００１７】
ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成される。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００１８】
フラッシュメモリ２は、不揮発性メモリであり、メモリセルアレイ２１と、ページレジスタ（内部レジスタ）２２とを備えている。メモリセルアレイ２１に書き込まれるデータ、又はメモリセルアレイ２１から読み出されたデータはページレジスタ（内部レジスタ）２２に一時的に保持される。
【００１９】
フラッシュメモリコントローラ３はホストシステム４から供給されるデータをフラッシュメモリ２に転送し、フラッシュメモリ２内のページレジスタ（内部レジスタ）２２を介してメモリセルアレイ２１に書き込み、メモリセルアレイ２１に書き込まれているデータをページレジスタ（内部レジスタ）２２を介して読み出し、ホストシステム４に提供する。つまり、フラッシュメモリコントローラ３はページレジスタ２２へのデータの書き込み又はページレジスタ２２からのデータの読み出しを行い、フラッシュメモリ２はフラッシュメモリコントローラ３から与えられるコマンドに従ってページレジスタ２２からメモリセルアレイ２１へのデータの書き込み（複写）又はメモリセルアレイ２１からページレジスタ２２へのデータの読み出し（複写）を行う。
【００２０】
フラッシュメモリ２のアドレス空間は、「ページ」及び「ブロック（物理ブロック）」で構成されている。
ページは、フラッシュメモリ２にて行われるデータ読み出し動作及びデータ書き込み動作の処理単位である。つまり、データ読み出し動作及びデータ書き込み動作では、メモリセルアレイ２１内のメモリセルがページ単位で選択され、このページ単位で、ページレジスタ２２からメモリセルへのデータの書き込み（複写）、又はメモリセルからページレジスタ２２へのデータの読み出し（複写）が行われる。
【００２１】
物理ブロックは、フラッシュメモリ２で行われるデータ消去動作の処理単位であり、複数のページで構成されている。従って、データ消去動作では同じ物理ブロックに属する複数のページに記憶されているデータが一緒に消去される。
【００２２】
尚、ページレジスタ２２からメモリセルアレイ２１へのデータの書き込み、メモリセルアレイ２１からページレジスタ２２へのデータの読み出し、及びメモリセルアレイ２１に記憶されているデータの消去が行われているとき、フラッシュメモリ２は、データ、アドレス情報、内部コマンド等の授受を行うことができないビジー状態になる。
【００２３】
図２は、フラッシュメモリ２のアドレス空間の構造を概略的に示す図である。
図２に示した例では、フラッシュメモリ２のアドレス空間は、ブロック０〜４０９５の４０９６個の物理ブロックで構成されている。また、各物理ブロックは、ページ０〜ページ６３の６４個のページで構成されている。更に、各ページは、４セクタ（５１２バイト×４セクタ＝２０４８バイト）のユーザ領域２５と、６４バイトの冗長領域２６と、で構成されている。
【００２４】
ここで、ユーザ領域２５は、ホストシステム４から供給されるユーザデータを格納するための領域である。また、冗長領域２６は、付加データを記録するための領域である。付加データは、後述するエラーコレクションコード（ＥＣＣ）、その物理ブロックと対応関係にある論理ブロックを特定するための論理アドレス情報、その物理ブロックが不良ブロックであるか否かを示すブロックステータス等を含んでいる。
【００２５】
このフラッシュメモリ２が有する４０９６個の物理ブロックに含まれるすべてのページ、つまり２６２１４４個のページには、ロウアドレス（０〜２６２１４３）が割り当てられている。このロウアドレスにより、書き込み又は読み出しの対象のページが特定される。更に、各ページ内では、ビットｂ０〜ｂ７のビットからなる１バイト単位で、カラムアドレス（０〜２１１１）が割り当てられている。このカラムアドレスにより、書き込み又は読み出しの対象のページ内での位置が特定される。ここで、カラムアドレスが０〜２０４７の２０４８バイト（４セクタ）の領域がユーザ領域２５に対応し、カラムアドレスが２０４８〜２１１１の６４バイトの領域が冗長領域２６に対応している。
【００２６】
尚、フラッシュメモリ２のデータ入出力バス（データを入出力するためのデータバス）が８ビット（８端子）の場合、ページレジスタ（内部レジスタ）２２には上記のような１バイト（８ビット）単位のカラムアドレスが割り当てられ、ページレジスタ２２に書き込まれるデータは１バイト単位でフラッシュメモリコントローラ３からフラッシュメモリ２に入力（供給）され、ページレジスタ２２から読み出されるデータは１バイト単位でフラッシュメモリ２から出力され、フラッシュメモリコントローラ３に入力される。又、フラッシュメモリ２のデータ入出力バス（データを入出力するためのデータバス）が１６ビット（１６端子）の場合、ページレジスタ２２に書き込まれるデータは２バイト単位でフラッシュメモリコントローラ３からフラッシュメモリ２に入力（供給）され、ページレジスタ２２から読み出されるデータは２バイト単位でフラッシュメモリ２から出力されるので、ページレジスタ（内部レジスタ）２２には２バイト（１６ビット）単位のカラムアドレス（０〜１０５５）が割り当てられている。
【００２７】
図３は、４セクタ（２０４８バイト）のユーザ領域２５と６４バイトの冗長領域２６とで構成されているページの記憶領域を示す図である。図３を参照しているページの記憶領域の構成について説明する。尚、ページに書き込むデータ又はページから読み出したデータを一時的に保持するページレジスタ（内部レジスタ）２２の構成は、ページの記憶領域の構成と同じになっている。
ユーザ領域２５は、第１セクタ領域２５１、第２セクタ領域２５２、第３セクタ領域２５３、第４セクタ領域２５４の４つの領域に分割して使用される。第１セクタ領域２５１はカラムアドレスの０〜５１１に対応する領域であり、第２セクタ領域２５２はカラムアドレスの５１２〜１０２３に対応する領域であり、第３セクタ領域２５３はカラムアドレスの１０２４〜１５３５に対応する領域であり、第４セクタ領域２５４はカラムアドレスの１５３６〜２０４７に対応する領域である。ユーザ領域２５を４分割した５１２バイトの領域である第１セクタ領域２５１〜第４セクタ領域２５４には、それぞれ、ホストシステム４から供給される１セクタ（５１２バイト）のユーザデータが格納される。
【００２８】
冗長領域２６は、共通領域２６０、第１個別領域２６１、第２個別領域２６２、第３個別領域２６３、第４個別領域２６４に分割して使用される。共通領域２６０は、カラムアドレスの２０４８〜２０１１に対応する８バイトの領域であり、論理アドレス情報、ブロックステータス等が記憶される。なお、論理アドレス情報及びブロックステータスは、物理ブロックに含まれる６４個のページに共通の管理情報であるため、通常は物理ブロックの先頭ページの共通領域２６０にだけ書き込まれる。
【００２９】
第１個別領域２６１は、カラムアドレスの２０５６〜２０６９に対応する１４バイトの領域であり、第１セクタ領域２５１に書き込まれたデータに関する情報が記憶される。第２個別領域２６２は、カラムアドレスの２０７０〜２０８３に対応する１４バイトの領域であり、第２セクタ領域２５２に書き込まれたデータに関する情報が記憶される。第３個別領域２６３は、カラムアドレスの２０８４〜２０９７に対応する１４バイトの領域であり、第３セクタ領域２５３に書き込まれたデータに関する情報が記憶される。第４個別領域２６４は、カラムアドレス２０９８〜２１１１に対応する１４バイトの領域であり、第４セクタ領域２５４に書き込まれたデータに関する情報が記憶される。
【００３０】
例えば、第１個別領域２６１には、第１セクタ領域２５１に記憶されるデータに対応するエラーコレクションコード等が記憶される。以下同様に、第２セクタ領域２５２、第３セクタ領域２５３、第４セクタ領域２５４にそれぞれ記憶されるデータに対応するエラーコレクションコード等は、第２個別領域２６２、第３個別領域２６３、第４個別領域２６４にそれぞれ記憶される。
【００３１】
エラーコレクションコードは、第１セクタ領域２５１から第４セクタ領域２５４に書き込まれる各ユーザデータに基づいてＥＣＣブロック１１で生成され、上記の対応関係に従って第１個別領域２６１から第４個別領域２６４にそれぞれ書き込まれる。従って、第１セクタ領域２５１から読み出されたユーザデータに含まれる誤りは、第１個別領域２６１から読み出されたエラーコレクションコードに基づいて訂正され、第２セクタ領域２５２から読み出されたユーザデータに含まれる誤りは、第２個別領域２６２から読み出されたエラーコレクションコードに基づいて訂正され、第３セクタ領域２５３から読み出されたユーザデータに含まれる誤りは、第３個別領域２６３から読み出されたエラーコレクションコードに基づいて訂正され、第４セクタ領域２５４から読み出されたユーザデータに含まれる誤りは、第４個別領域２６４から読み出されたエラーコレクションコードに基づいて訂正される。
【００３２】
なお、エラーコレクションコードのデータ量は誤りの訂正能力に応じて適宜設定することができる。例えば、リードソロモン符号をエラーコレクションコードとして使用し、１０ビットを１シンボルとして、４シンボル以下の誤りを訂正できるようにしたい場合には、８シンボル（１０バイト）のエラーコレクションコードが第１個別領域２６１〜第４個別領域２６４にそれぞれ書き込まれる。
【００３３】
図４は、ホストシステム４側のアドレス空間（論理アドレス）とフラッシュメモリ２側のアドレス空間（物理アドレス）の対応関係を示す図である。
フラッシュメモリ２内の各物理ブロックには、物理ブロックアドレス（ＰＢＡ）が割り当てられている。この物理ブロックアドレス（ＰＢＡ）によりフラッシュメモリ２内の物理ブロックが特定される。複数の物理ブロックで構成されたフラッシュメモリ２内の記憶領域を複数のゾーンに分割して管理する場合には、複数の物理ブロックで物理ゾーンを構成して、各物理ゾーンに物理ゾーン番号（ＰＺＮ）を割り当てる。この物理ゾーン番号（ＰＺＮ）により物理ゾーンが特定される。また、各物理ゾーンに含まれる物理ブロックの、各物理ゾーン内での通番を物理ゾーン内ブロック番号（ＰＺＩＢＮ）と呼んでいる。
【００３４】
一方、ホストシステム４側のアドレス空間は、セクタ（５１２バイト）単位で分割した領域に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。ホストシステム４は、このＬＢＡでフラッシュメモリ２内のアクセス領域を指定する。
【００３５】
フラッシュメモリコントローラ３の内部では、複数のセクタをまとめたものを論理ブロックとして取り扱っている。各論理ブロックに対応するデータは、その論理ブロックに割り当てられた物理ブロックに書き込まれる。フラッシュメモリコントローラ３は、論理ブロックと物理ブロックとの対応関係を、冗長領域２６に書き込まれている論理アドレス情報に基づいて判断する。
【００３６】
この論理ブロックに付けられた通番を論理ブロック番号（ＬＢＮ）と呼び、各論理ブロックに含まれるセクタの、各論理ブロック内での通番をセクタ番号（ＳＮ）と呼んでいる。
【００３７】
本実施の形態では、２５６セクタをまとめたものを論理ブロックとしている。従って、ＬＢＡの下位８ビットがＳＮに対応し、下位８ビットを除いた上位ビット側がＬＢＮに対応する。例えば、ＬＢＡが０〜２５５のセクタで構成された論理ブロックのＬＢＮは０になり、ＬＢＡが２５６〜５１１のセクタで構成された論理ブロックのＬＢＮは１になる。
【００３８】
ＬＢＡで特定されるセクタが、ページ０〜ページ６３のいずれのページであるかは、ＬＢＡの下位側から数えて３ビット目から８ビット目の値に基づいて特定される。また、第１セクタ領域２５１〜第４セクタ領域２５４のいずれの領域であるかは、ＬＢＡの下位２ビット（ＬＢＡの下位側から数えて１ビット目と２ビット目）の値に基づいて特定される。例えば、ＬＢＡの下位８ビットの値が「０００００１００」〜「０００００１１１」のセクタは、ページ１に対応する。また、ＬＢＡの下位２ビットの値が「００」のセクタは第１セクタ領域２５１に対応し、「０１」のセクタは第２セクタ領域２５２に対応し、「１０」のセクタは第３セクタ領域２５３に対応し、「１１」のセクタは第４セクタ領域２５４に対応する。
【００３９】
また、複数の論理ブロックをまとめたものを論理ゾーンと呼んでいる。そして、論理ゾーンに付けられた通番を論理ゾーン番号（ＬＺＮ）と呼び、各論理ゾーンに含まれる論理ブロックの、各論理ゾーン内での通番を論理ゾーン内ブロック番号（ＬＺＩＢＮ）と呼んでいる。従って、各論理ゾーンに含まれる論理ブロック数をｋとした場合、ＬＢＮをｋで割ったときの商がＬＺＮに対応し、余りがＬＺＩＢＮに対応する。
【００４０】
また、各論理ゾーンにはそれぞれ１個の物理ゾーンが割り当てられ、論理ゾーンに含まれる各論理ブロックに対応するデータは、その論理ゾーンに割り当てられた物理ゾーンに含まれる物理ブロックに書き込まれる。従って、１個の論理ブロックに含まれるセクタ数は、１個の物理ブロックに含まれるセクタ領域の個数に応じて設定される。但し、１個の論理ブロックを複数個の物理ブロックに割り当てることもでき、その場合には、その複数個の物理ブロックを１個の物理ブロックとみなして１個の論理ブロックに含まれるセクタ数を設定する。
【００４１】
図４に示した例では、１個の物理ブロックが６４個のページを含み、１個のページが４個のセクタに対応するフラッシュメモリ、つまり１個の物理ブロックが２５６個のセクタ領域で構成されたフラッシュメモリを想定している。そのため、２５６セクタが１個の論理ブロックに対応している。従って、ＬＢＮ＃０〜＃４９９の５００個の論理ブロックで構成されたＬＺＮ＃０の論理ゾーンは、ＬＢＡ＃０〜＃１２７９９９の１２８０００セクタの領域に対応している。以下同様に、ＬＺＮ＃１の論理ゾーンは、ＬＢＡ＃１２８０００〜＃２５５９９９の１２８０００セクタの領域に対応し、ＬＺＮ＃２の論理ゾーンは、ＬＢＡ＃２５６０００〜＃３８３９９９の１２８０００セクタの領域に対応し、・・・、ＬＺＮ＃７の論理ゾーンは、ＬＢＡ＃８９６０００〜＃１０２３９９９の１２８０００セクタの領域に対応している。
【００４２】
また、ＬＢＮ＃０〜＃４９９の５００個の論理ブロックで構成されたＬＺＮ＃０の論理ゾーンは、ＰＢＡ＃０〜＃５１１の５１２個の物理ブロックで構成されたＰＺＮ＃０の物理ゾーンに割り当てられている。以下同様に、ＬＺＮ＃１の論理ゾーンは、ＰＺＮ＃１の物理ゾーンに割り当てられ、ＬＺＮ＃２の論理ゾーンは、ＰＺＮ＃２の物理ゾーンに割り当てられ、・・・、ＬＺＮ＃７の論理ゾーンは、ＰＺＮ＃７の物理ゾーンに割り当てられている。ここで、物理ゾーンに含まれる物理ブロックの個数を、論理ゾーンに含まれる論理ブロックの個数より多くしているのは、同一の論理ブロックに対応する新データと旧データとが別々の物理ブロックに並存する場合や、データを正常に書き込むことができない不良ブロックが発生した場合等に対応するためである。
【００４３】
また、本実施の形態では、各物理ブロックに、その物理ブロックに割り当てられた論理ブロックのデータがＬＢＡの順番で書き込まれる。このため、物理ブロックと論理ブロックとの対応関係を管理することによって、ホストシステム４から与えられるＬＢＡとフラッシュメモリ２内の記憶領域との対応関係を管理することができる。
【００４４】
フラッシュメモリ２においては、データの消去がブロック単位で行われ、物理ブロックを構成しているページにデータを上書きすることができない。従って、物理ブロック内の一部のページに記憶されているデータを書き換える場合には、書き換え対象のページの書き換えデータと、その書き換え対象のページと同一の物理ブロックに含まれている書き換え対象でないページの記憶データが、消去済みの別の物理ブロックに書き込まれる。
【００４５】
このようなデータの書き換えでは、書き換えられたデータは、以前に格納されていた物理ブロックとは異なる物理ブロックに書き込まれる。従って、データの書き換えが行われる毎に、論理ブロックと物理ブロックの対応関係が変化する。
【００４６】
そこで、個々の時点における両者の対応関係を管理するためのアドレス変換テーブルが作成され、両者の対応関係が変化する毎に更新される。このアドレス変換テーブルにより、ホストシステム４側の論理アドレスと、フラッシュメモリ２内の物理アドレスと、の対応関係が管理される。なお、論理ゾーンと物理ゾーンとの対応関係は予め設定されており、アドレス変換テーブルは論理ゾーン毎に作成される。
【００４７】
アドレス変換テーブルは、物理ブロックの先頭ページの冗長領域２６に書き込まれている論理アドレス情報（対応関係にある論理ブロックを示す情報）に基づいて作成される。論理アドレス情報としては、論理ブロック番号（ＬＢＮ）等の論理ブロックを特定するための情報が用いられる。なお、論理ゾーンと物理ゾーンとの対応関係が予め設定されている場合には、論理ゾーン内ブロック番号（ＬＺＩＢＮ）に基づいてアドレス変換テーブルを作成することができるので、ＬＢＮよりデータ量の少ないＬＺＩＢＮを論理アドレス情報として用いることが好ましい。その場合、アドレス変換テーブルは、対応する論理ゾーンと物理ゾーンの組毎に、論理ゾーン内ブロック番号（ＬＺＩＢＮ）と物理ゾーン内ブロック番号（ＰＺＩＢＮ）との対応関係を記憶する。
【００４８】
なお、論理アドレス情報は、ユーザ領域２５にデータが記憶されている物理ブロックに対応する論理ブロックを特定するための情報であるため、ユーザ領域２５に有効なデータが格納されていない物理ブロックについては、論理アドレス情報は格納されていない。
【００４９】
従って、冗長領域２６に論理アドレス情報が格納されているか否かを判定することにより、その冗長領域２６が含まれている物理ブロックに有効なデータが格納されているか否かを判断することができる。
【００５０】
また、物理ブロックの先頭ページの冗長領域２６には、その物理ブロックが不良ブロックであるか否かを示すブロックステータスが格納されている。正常にデータの書き込み等を行うことができない物理ブロックは、不良ブロックと判別され、冗長領域２６に不良ブロックである旨のブロックステータスが書き込まれる。
【００５１】
有効なデータが格納されていないブロックであって且つ不良ブロックでない物理ブロックは、データの書き込み先とすることができる。そこで、そのような物理ブロックを消去済みブロック（空きブロック）として管理するために、消去済みブロックテーブルが作成される。この消去済みブロックテーブルは、物理ブロックの先頭ページの冗長領域２６に書き込まれている論理アドレス情報とブロックステータスに基づいて物理ゾーン毎に作成される。この消去済みブロックテーブルの例としては、消去済みブロックを特定できる情報（ＰＢＡ、ＰＺＩＢＮ等）を記述したテーブルが挙げられる。
【００５２】
フラッシュメモリ２に記憶されているデータを書き換えるときには、消去済みブロックテーブルから消去済みブロックを選択し、選択した消去済みブロックに、書き換えデータを書き込む。また、消去済みブロックにデータを書き込んだときや、物理ブロックに記憶されているデータを消去したときは、消去済みブロックテーブルを更新する。
【００５３】
次に、フラッシュメモリ２に対するアクセスを制御するフラッシュメモリコントローラ３について説明する。
フラッシュメモリコントローラ３は、フラッシュメモリ２にデータ、アドレス情報、内部コマンド等を供給することにより、読み出し処理、書き込み処理、ブロック消去処理、データ複写処理等の各処理を行う。
【００５４】
ここで、内部コマンドとは、フラッシュメモリコントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２はフラッシュメモリコントローラ３から与えられる内部コマンドに従って動作する。これに対し、ホストシステム４からフラッシュメモリコントローラ３に与えられるコマンドを外部コマンドと言う。
【００５５】
図１に示したように、フラッシュメモリコントローラ３は、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（エラー・コレクション・コード）ブロック１１と、ＲＯＭ（Read Only Memory）１２と、を備えている。これら機能ブロックによって構成されるフラッシュメモリコントローラ３は、一つの半導体チップ上に集積される。以下に各機能ブロックについて説明する。
【００５６】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、フラッシュメモリコントローラ３を構成する各機能ブロックの動作を制御することにより、フラッシュメモリコントローラ３の全体の動作を制御する。
【００５７】
ホストインターフェースブロック７は、ホストシステム４との間で、外部バス１３を介し、データ、アドレス情報、外部コマンド等の授受を行う。ホストシステム４からフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（例えばバッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００５８】
ワークエリア８は、マイクロプロセッサ６によるフラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。ワークエリア８には、例えば、上述のアドレス変換テーブル、消去済みブロックテーブル等が記憶される。
【００５９】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込まれるデータを一時的に蓄積する。即ち、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態となるまでバッファ９に保持される。また、フラッシュメモリ２に書き込まれるデータは、フラッシュメモリ２が書き込み可能な状態となるまでバッファ９に保持される。
【００６０】
フラッシュメモリインターフェースブロック１０は、マイクロプロセッサ６によってＲＯＭ１２から読み出される各種処理を定義したコマンドセット（以下、シーケンスコマンドと言う）に従って、データの読み出しや書き込み等の各種処理を実行する。具体的には、フラッシュメモリインターフェースブロック１０は、シーケンスコマンドに従って、フラッシュメモリ２のデータ入出力バスに対してデータ、アドレス情報、ステータス情報、内部コマンド等を入出力する。
【００６１】
ここで、フラッシュメモリ２は、コマンドラッチイネーブル（ＣＬＥ）、アドレスラッチイネーブル（ＡＬＥ）、ライトイネーブル（ＷＥ）、リードイネーブル（ＲＥ）等の制御信号端子を備えている。これらの制御信号端子とデータ入出力バスは内部バス１４を介してフラッシュメモリコントローラ３に接続されている。コマンドラッチイネーブル（ＣＬＥ）とアドレスラッチイネーブル（ＡＬＥ）の制御信号端子に与えられる信号の信号レベルにより、データ入出力バスに供給される情報の種別が指定される。又、ライトイネーブル（ＷＥ）の制御信号端子に与えられる信号の信号レベルが遷移するタイミングでデータ、アドレス情報、内部コマンド等の情報がフラッシュメモリ２に取り込まれ、リードイネーブル（ＲＥ）の制御信号端子に与えられる信号の信号レベルが遷移するタイミングでデータ等の情報がフラッシュメモリ２から出力される。
【００６２】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加されるエラーコレクションコード（ＥＣＣ）を生成するとともに、読み出しデータに付加されているエラーコレクションコードに基づいて、読み出したデータに含まれる誤りを検出・訂正する。なお、本実施の形態では、エラーコレクションコード（ＥＣＣ）として、リードソロモン符号を使用し、１０ビットを１シンボルとして、シンボル単位でエラーを訂正するものとする。
【００６３】
ＲＯＭ１２は、不揮発性の記憶素子であり、フラッシュメモリコントローラ３の全体の動作を制御するプログラム、上述のシーケンスコマンド等を記憶している。
【００６４】
図５は、ホストインターフェースブロック７及びフラッシュメモリインターフェースブロック１０の構成を示すブロック図である。ホストインターフェースブロック７は、コマンドレジスタＲ１、セクタ数レジスタＲ２、ＬＢＡレジスタＲ３等を備えている。また、フラッシュメモリインターフェースブロック１０は、物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２、カウンタＲ１３等を備えている。更に、フラッシュメモリインターフェースブロック１０は、後述する訂正データレジスタ（図８参照）を備えている。
【００６５】
コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３には、ホストシステム４から与えられる情報が書き込まれる。コマンドレジスタＲ１には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。セクタ数レジスタＲ２にはアクセス対象領域のセクタ数が書き込まれる。ＬＢＡレジスタＲ３には、アクセス対象領域の先頭のＬＢＡが書き込まれる。
【００６６】
物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２及びカウンタＲ１３には、ホストインターフェースブロック７のセクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づいて、フラッシュメモリ２内のアクセス対象領域を指示する情報が書き込まれる。
つまり、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づいて特定されるＬＢＡの範囲が複数の論理ブロックに跨っていない場合、そのＬＢＡの範囲が含まれる論理ブロックと対応関係にある物理ブロック（消去済みブロックにデータを書き込む場合は消去済みブロック検索用テーブルを用いて選択した消去済みブロック）の物理ブロックアドレス（ＰＢＡ）が物理ブロックアドレスレジスタＲ１１に設定される。更に、そのＬＢＡの範囲に含まれる先頭セクタのセクタ番号（ＳＮ）がセクタ番号レジスタＲ１２に設定され、そのＬＢＡの範囲に含まれセクタの数がカウンタＲ１３に設定される。
【００６７】
尚、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づいて特定されるＬＢＡの範囲が複数の論理ブロックに跨っている場合は、論理ブロック毎に上記の設定が行われる。
【００６８】
読み出し、書き込み等の動作では、物理ブロックアドレスレジスタＲ１１及びセクタ番号レジスタＲ１２に設定された情報に基づいて、フラッシュメモリ２に与えられるロウアドレス及びカラムアドレスが生成される。この読み出し、書き込み等の動作で１セクタ分のユーザデータ及び付加データがフラッシュメモリ２に入力又はフラッシュメモリ２から出力される毎にセクタ番号レジスタＲ１２に設定されている値がインクリメント（１ずつ増加）され、カウンタＲ１３に設定されている値がデクリメント（１ずつ減少）される。このセクタ番号レジスタＲ１２に設定されている値のインクリメントとカウンタＲ１３に設定されている値のデクリメントは、カウンタＲ１３の設定値が０になるまで繰り返される。従って、セクタ番号レジスタＲ１２に初期設定されたＳＮに基づいて特定されるページ内のセクタ領域から、カウンタＲ１３に初期設定されたセクタ数分の領域が読み出し又は書き込みの対象となる。
【００６９】
本実施の形態のように、１個のページが４個のセクタ領域で構成され、１個の物理ブロックが６４個のページで構成されている場合には、セクタ番号レジスタＲ１２に、８ビットのＳＮ（０〜２５５）が設定される。フラッシュメモリ２に与えるロウアドレスは、物理ブロックアドレスレジスタＲ１１に設定されているＰＢＡの下位側にセクタ番号レジスタＲ１２に設定されているＳＮの上位６ビットを連結することにより求めることができる。一方、フラッシュメモリ２に与えるカラムアドレスはＳＮの下位２ビットに基づいて求めることができる。つまり、ＳＮの下位２ビットに基づいて第１セクタ領域２５１〜第４セクタ領域２５４のいずれかのセクタ領域が特定され、第１セクタ領域２５１〜第４セクタ領域２５４のカラムアドレスは予め設定されているので、ＳＮの下位２ビットに基づいてフラッシュメモリ２に与えるカラムアドレスを求めることができる。
【００７０】
次に、図６を参照して、１個のページに記憶されている４セクタのデータを、フラッシュメモリコントローラ３内のバッファ９を介して、異なる物理ブロック内のページ、又は同じ物理ブロック内の異なるページに転送（複写）する従来の転送処理について説明する。尚、転送元のページに記憶されているデータを読み出す処理は図６（ａ）を参照し、転送先のページにデータを書き込む処理は図６（ｂ）を参照して説明する。又、説明を簡略化するため、フラッシュメモリ２から読み出されたデータには訂正不能な誤り（５シンボル以上の誤り）は含まれていないものとする。
【００７１】
この転送処理では、まず、転送元のページからデータを読み出すための情報が物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２及びカウンタＲ１３に設定される。つまり、物理ブロックアドレスレジスタＲ１１には、転送元のページが含まれる物理ブロックの物理ブロックアドレス（ＰＢＡ）が設定される。セクタ番号レジスタＲ１２は、転送元のページ内の第１セクタ領域２５１に対応するセクタ番号（ＳＮ）が設定される。カウンタＲ１３には、１個のページに含まれるセクタ領域の数である４が設定される。
【００７２】
これらの設定に基づいて、読み出しコマンド、ロウアドレス（転送元のページに対応するロウアドレス）及びカラムアドレス（第１セクタ領域２５１に対応するカラムアドレス）がフラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。これに応答して、ロウアドレスに対応するページに記憶されているデータが、メモリセルアレイ２１からページレジスタ２２に読み出される（複写される）。ページレジスタ２２に読み出されたデータは、リードイネーブル（ＲＥ）端子に与えられる信号の信号レベルがハイからローに遷移するタイミングでデータ入出力バスから順次出力される。データ入出力バスに出力されるデータのカラムアドレスは、フラッシュメモリ２に与えたカラムアドレスから始まって、順次カウントアップされていく。
【００７３】
ページレジスタ２２からは、第１セクタ領域２５１に記憶されているデータ、第１個別領域２６１に記憶されているエラーコレクションコード、第２セクタ領域２５２に記憶されているデータ、第２個別領域２６２に記憶されているエラーコレクションコード、第３セクタ領域２５３に記憶されているデータ、第３個別領域２６３に記憶されているエラーコレクションコード、第４セクタ領域２５４に記憶されているデータ、第４個別領域２６４に記憶されているエラーコレクションコードの順番でデータとエラーコレクションコードが読み出される。
【００７４】
第１セクタ領域２５１に記憶されているデータを読み出した後に、第１個別領域２６１に記憶されているエラーコレクションコードを読み出すときは、ランダムデータ出力コマンドとカラムアドレス（第１個別領域２６１に対応するカラムアドレス）がフラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。第２セクタ領域２５２に記憶されているデータ、第２個別領域２６２に記憶されているエラーコレクションコード、第３セクタ領域２５３に記憶されているデータ、第３個別領域２６３に記憶されているエラーコレクションコード、第４セクタ領域２５４に記憶されているデータ、第４個別領域２６４に記憶されているエラーコレクションコードを読み出すときも、同様に、ランダムデータ出力コマンドとカラムアドレス（それぞれの領域に対応するカラムアドレス）がフラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。
【００７５】
第１セクタ領域２５１、第２セクタ領域２５２、第３セクタ領域２５３及び第４セクタ領域２５４から読み出されたデータは、バッファ９とＥＣＣブロック１１の双方に入力される。第１個別領域２６１、第２個別領域２６２、第３個別領域２６３及び第４個別領域２６４から読み出されたエラーコレクションコードはＥＣＣブロック１１に入力される。
【００７６】
第１セクタ領域２５１から読み出されたデータは、バッファ９の第１バッファ領域９１に保持され、第２セクタ領域２５２から読み出されたデータは、バッファ９の第２バッファ領域９２に保持され、第３セクタ領域２５３から読み出されたデータは、バッファ９の第３バッファ領域９３に保持され、第４セクタ領域２５４から読み出されたデータは、バッファ９の第４バッファ領域９４に保持される。
【００７７】
ＥＣＣブロック１１は、第１セクタ領域２５１から読み出されたデータと第１個別領域２６１から読み出されたエラーコレクションコードに基づいて、第１セクタ領域２５１から読み出されたデータに含まれる誤りの検出を行い、誤りが検出された場合は、バッファ９の第１バッファ領域９１に保持されているデータに対して誤りの訂正を行う。同様に、第２セクタ領域２５２、第３セクタ領域２５３及び第４セクタ領域２５４から読み出されたデータと第２個別領域２６２、第３個別領域２６３及び第４個別領域２６４から読み出されたエラーコレクションコードに基づいて、各データに含まれる誤りの検出を行い、誤りが検出された場合は、バッファ９の第２バッファ領域９２〜第４バッファ領域９４に保持されているデータに対して誤りの訂正を行う。
【００７８】
次に、転送先のページにデータを書き込むための情報が物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２及びカウンタＲ１３に設定される。つまり、物理ブロックアドレスレジスタＲ１１には、転送先のページが含まれる物理ブロックの物理ブロックアドレス（ＰＢＡ）が設定される。セクタ番号レジスタＲ１２は、転送先のページ内の第１セクタ領域２５１に対応するセクタ番号（ＳＮ）が設定される。カウンタＲ１３には、１個のページに含まれるセクタ領域の数である４が設定される。
【００７９】
これらの設定に基づいて、データ入力コマンド、ロウアドレス（転送先のページに対応するロウアドレス）及びカラムアドレス（第１セクタ領域２５１に対応するカラムアドレス）が、フラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。
【００８０】
続いて、バッファ９の第１バッファ領域９１に保持されている１セクタ（５１２バイト）のデータが、バッファ９から順次出力される。バッファ９から出力されたデータはフラッシュメモリ２のデータ入出力バスに入力されると共に、ＥＣＣブロック１１にも入力される。バッファ９の第１バッファ領域９１に保持されている１セクタ（５１２バイト）のデータがフラッシュメモリ２のデータ入出力バスに入力された後に、ランダムデータ入力コマンドとカラムアドレス（第１個別領域２６１に対応するカラムアドレス）がフラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。更に、ＥＣＣブロックから出力されるエラーコレクションコード（バッファ９の第１バッファ領域９１に保持されている１セクタ（５１２バイト）のデータに基づいて生成されたエラーコレクションコード）がフラッシュメモリ２のデータ入出力バスに入力される。
【００８１】
以下同様にして、ランダムデータ入力コマンド及びカラムアドレスと共に、バッファ９の第２バッファ領域９２、第３バッファ領域９３及び第４バッファ領域９４に保持されているデータと、これらのデータに対応するエラーコレクションコード（ＥＣＣブロック１１で生成されたエラーコレクションコード）がフラッシュメモリ２のデータ入出力バスに入力される。以上のようにして、データ入出力バスに入力されたデータとエラーコレクションコードはページレジスタ２２に保持される。
【００８２】
バッファ９の第１バッファ領域９１、第２バッファ領域９２、第３バッファ領域９３及び第４バッファ領域９４に保持されているデータと、これらのデータに対応するエラーコレクションコード（ＥＣＣブロック１１で生成されたエラーコレクションコード）がフラッシュメモリ２のデータ入出力バスに入力された後に、書き込みコマンドがフラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。
【００８３】
この書き込みコマンドに応答して、ページレジスタ２２に保持されているデータが、メモリセルアレイ２１内の転送先のページに書き込まれる（複写される）。
【００８４】
尚、ＥＣＣブロック１１は、入力された１バイト（８ビット）単位のデータとエラーコレクションコードを１０ビット単位のシンボルに変換して処理する。一方、エラーコレクションコードを出力するときは、１０ビットのシンボルを１バイト（８ビット）単位の情報に変換して出力する。尚、１セクタのデータは、末尾に予め設定されている４ビットのダミーデータを付加することにより、４１０個のシンボルに変換される。一方、ＥＣＣブロック１１で生成された８シンボルのエラーコレクションコードは、１０バイトの情報に変換される。又、ＥＣＣブロック１１は、記憶データが消去された物理ブロックにおけるデータとエラーコレクションコードの不整合を解消するため、生成した８シンボルのエラーコレクションコードに対してマスク処理を施している。このマスク処理では、１セクタのデータに含まれる全てのビットの論理値が１（消去状態の論理値）のときに、このデータに対する８シンボルのエラーコレクションコードに含まれる全てのビットの論理値が１（消去状態の論理値）になるような変換が行われる。つまり、１セクタのデータに含まれる全てのビットの論理値が１（消去状態の論理値）のときに、生成された８シンボルのエラーコレクションコードには論理値が０のビットが含まれているが、マスク処理が施された後は、全てのビットの論理値が１（消去状態の論理値）になる。一方、フラッシュメモリ２の冗長領域２６から読み出され、ＥＣＣブロック１１に入力されたエラーコレクションコードに対しては、生成時に施したマスク処理を解除するための処理が施される。
【００８５】
次に、本発明に係る転送処理を、図７を参照して説明する。この転送処理では、１個のページに記憶されている４セクタのデータが、異なる物理ブロック内のページ、又は同じ物理ブロック内の異なるページに転送（複写）される。尚、転送元のページに記憶されているデータを読み出す処理は図７（ａ）を参照し、転送先のページにデータを書き込む処理は図７（ｂ）を参照して説明する。又、説明を簡略化するため、フラッシュメモリ２から読み出されたデータには訂正不能な誤り（５シンボル以上の誤り）は含まれていないものとする。
【００８６】
従来の転送処理の場合と同様に、転送元のページからデータを読み出すための情報が物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２及びカウンタＲ１３に設定される。つまり、物理ブロックアドレスレジスタＲ１１には、転送元のページが含まれる物理ブロックの物理ブロックアドレス（ＰＢＡ）が設定される。セクタ番号レジスタＲ１２は、転送元のページ内の第１セクタ領域２５１に対応するセクタ番号（ＳＮ）が設定される。カウンタＲ１３には、１個のページに含まれるセクタ領域の数である４が設定される。
【００８７】
これらの設定に基づいて、読み出しコマンド、ロウアドレス（転送元のページに対応するロウアドレス）及びカラムアドレス（第１セクタ領域２５１に対応するカラムアドレス）がフラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。これ応答して、ロウアドレスに対応するページに記憶されているデータが、メモリセルアレイ２１からページレジスタ２２に読み出される（複写される）。ページレジスタ２２に読み出されたデータは、リードイネーブル（ＲＥ）端子に与えられる信号の信号レベルがハイからローに遷移するタイミングでデータ入出力バスから順次出力される。データ入出力バスに出力されるデータのカラムアドレスは、フラッシュメモリ２に与えたカラムアドレスから始まって、順次カウントアップされていく。
【００８８】
ここでフラッシュメモリ２に与える読み出しコマンドは、コピーバック用の読み出しコマンドであっても、通常の読み出しコマンドであってもよいが、コピーバック用の読み出しコマンドの方が好ましい。但し、通常の読み出しコマンドでなければ、ページレジスタ２２に読み出されたデータを、データ入出力バスを介して出力させることができない仕様のフラッシュメモリの場合は、通常の読み出しコマンドを用いる。
【００８９】
ページレジスタ２２からは、第１セクタ領域２５１に記憶されているデータ、第１個別領域２６１に記憶されているエラーコレクションコード、第２セクタ領域２５２に記憶されているデータ、第２個別領域２６２に記憶されているエラーコレクションコード、第３セクタ領域２５３に記憶されているデータ、第３個別領域２６３に記憶されているエラーコレクションコード、第４セクタ領域２５４に記憶されているデータ、第４個別領域２６４に記憶されているエラーコレクションコードの順番でデータとエラーコレクションコードが読み出される。
【００９０】
第１セクタ領域２５１に記憶されているデータを読み出した後に、第１個別領域２６１に記憶されているエラーコレクションコードを読み出すときは、ランダムデータ出力コマンドとカラムアドレス（第１個別領域２６１に対応するカラムアドレス）がフラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。第２セクタ領域２５２に記憶されているデータ、第２個別領域２６２に記憶されているエラーコレクションコード、第３セクタ領域２５３に記憶されているデータ、第３個別領域２６３に記憶されているエラーコレクションコード、第４セクタ領域２５４に記憶されているデータ、第４個別領域２６４に記憶されているエラーコレクションコードを読み出すときも、同様に、ランダムデータ出力コマンドとカラムアドレス（それぞれの領域に対応するカラムアドレス）がフラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。
【００９１】
第１セクタ領域２５１、第２セクタ領域２５２、第３セクタ領域２５３及び第４セクタ領域２５４から読み出されたデータは、バッファ９とＥＣＣブロック１１の双方に入力される。第１個別領域２６１、第２個別領域２６２、第３個別領域２６３及び第４個別領域２６４から読み出されたエラーコレクションコードはＥＣＣブロック１１に入力される。
【００９２】
ＥＣＣブロック１１は、第１セクタ領域２５１から読み出されたデータと第１個別領域２６１から読み出されたエラーコレクションコードに基づいて、第１セクタ領域２５１から読み出されたデータに含まれる誤りの検出を行う。誤りが検出された場合は、バッファ９に保持されている第１セクタ領域２５１から読み出されたデータに対する誤りの訂正を行う。更に、訂正されたビットを含むバイト単位の訂正データと、この訂正データに対応するカラムアドレスが訂正レジスタＲ２０に書き込まれる。
【００９３】
例えば、第１セクタ領域２５１から読み出された５１２バイトのデータ（カラムアドレスが０〜５１１のデータ）の先頭から１５バイト目のデータに含まれる一部のビットが訂正された場合は、１５バイト目のデータ（訂正後のデータ）が訂正データとして訂正レジスタＲ２０に書き込まれる。訂正レジスタＲ２０には、この訂正データと共に訂正データのカラムアドレスとして１４が書き込まれる。
【００９４】
第１セクタ領域２５１から読み出されたデータに対応する訂正データと、そのカラムアドレスが訂正レジスタＲ２０に書き込まれ後に、第２セクタ領域２５２から読み出されたデータに含まれる誤りの検出が行われる。この誤りの検出は、第２セクタ領域２５２から読み出されたデータと第２個別領域２６２から読み出されたエラーコレクションコードに基づいて行われる。誤りが検出された場合は、バッファ９に保持されている第２セクタ領域２５２から読み出されたデータに対する誤りの訂正が行われる。更に、訂正されたビットを含むバイト単位の訂正データと、この訂正データに対応するカラムアドレスが訂正レジスタＲ２０に書き込まれる。
【００９５】
尚、第２セクタ領域２５２から読み出された５１２バイトのデータのカラムアドレスは、５１２〜１０２３に対応している。従って、第２セクタ領域２５２から読み出されたデータの先頭から１５バイト目のデータが訂正データとして訂正レジスタＲ２０に書き込まれた場合、訂正レジスタＲ２０には、この訂正データのカラムアドレスとして５２６が書き込まれる。
【００９６】
以下同様に、第３セクタ領域２５３及び第４セクタ領域２５４から読み出されたデータに誤りが含まれていた場合は、訂正データと、そのカラムアドレスが訂正レジスタＲ２０に書き込まれる。又、第３セクタ領域２５３から読み出された５１２バイトのデータのカラムアドレスは、１０２４〜１５３５に対応し、第４セクタ領域２５４から読み出された５１２バイトのデータのカラムアドレスは、１５３６〜２０４７に対応している。又、冗長領域２６（第１個別領域２６１〜第４個別領域２６４）から読み出されたエラーコレクションコードに含まれる誤りが検出された場合も、それに対応する訂正データと、そのカラムアドレスが訂正レジスタＲ２０に書き込まれる。
【００９７】
尚、本発明に係る転送処理では、従来の転送処理のように、第１セクタ領域２５１、第２セクタ領域２５２、第３セクタ領域２５３及び第４セクタ領域２５４の各領域から読み出したデータを、バッファ９内の異なる領域（例えば、第１バッファ領域９１〜第４バッファ領域９４）に保持しておく必要はなく、バッファ９内の同じ領域に、第１セクタ領域２５１、第２セクタ領域２５２、第３セクタ領域２５３及び第４セクタ領域２５４の各領域から読み出したデータを、順次上書きしていってもよい。
【００９８】
上述のようにして訂正レジスタＲ２０に訂正データとそのカラムアドレスが書き込まれた後に、転送先のページへのデータの書き込みが開始される。尚、転送元のページからデータを読み出すときに、コピーバック用の読み出しコマンドではなく、通常の読み出しコマンドでデータを読み出した場合は、以下の処理を開始する前に、コピーバック用の読み出しコマンドにより、転送元のページに記憶されているデータをメモリセルアレイ２１からページレジスタ２２に読み出しておかなければならない。
【００９９】
次に、転送先のページにデータを書き込むための情報が物理ブロックアドレスレジスタＲ１１、セクタ番号レジスタＲ１２に設定される。つまり、物理ブロックアドレスレジスタＲ１１には、転送先のページが含まれる物理ブロックの物理ブロックアドレス（ＰＢＡ）が設定される。セクタ番号レジスタＲ１２は、転送先のページ内の第１セクタ領域２５１に対応するセクタ番号（ＳＮ）が設定される。
【０１００】
物理ブロックアドレスレジスタＲ１１及びセクタ番号レジスタＲ１２に設定されている情報、並びに訂正レジスタＲ２０に書き込まれている訂正データのカラムアドレスに基づいてコピーバック書き込みするためのデータ入力コマンド、ロウアドレス（転送先のページに対応するロウアドレス）及びカラムアドレス（訂正レジスタＲ２０に書き込まれている先頭の訂正データの書き込み先に対応するカラムアドレス）が、フラッシュメモリ２に与えられる（フラッシュメモリ２のデータ入出力バスに入力される）。続いて、訂正レジスタＲ２０に書き込まれている先頭の訂正データがフラッシュメモリ２のデータ入出力バスに入力される。
【０１０１】
この後、ランダムデータ入力コマンドと共に、訂正レジスタＲ２０に書き込まれている２番目以降の訂正データとそのカラムアドレスがフラッシュメモリ２のデータ入出力バスに順次入力される。この処理により、ページレジスタ２２に保持されている転送元のデータの一部が訂正レジスタＲ２０に保持されている訂正データによって置き換えられる。この置き換えにより、ページレジスタ２２に保持されている転送元のデータに含まれる誤りが訂正される。
【０１０２】
訂正レジスタＲ２０に書き込まれている全ての訂正データがフラッシュメモリ２のデータ入出力バスに入力された後に、コピーバック書き込みするための書き込みコマンドがフラッシュメモリ２のデータ入出力バスに入力される。この書き込みコマンドに応答して、ページレジスタ２２に保持されている転送元のデータが、メモリセルアレイ２１内の転送先のページに書き込まれる（複写される）。
【０１０３】
次に、訂正レジスタＲ２０に書き込まれている訂正データで、ページレジスタ２２に保持されているデータの一部を置き換える処理を詳細に説明する。訂正レジスタＲ２０には、ページレジスタ２２に保持されている転送元のデータを訂正するための訂正データと、この訂正データに対応するカラムアドレスが書き込まれている。つまり、訂正レジスタＲ２０には、ページレジスタ２２のカラムアドレス単位の訂正データが書き込まれている。従って、図２に示したように、１個のページが２０４８バイトのユーザ領域２５と６４バイトの冗長領域２６で構成されているデータ入出力バスが８ビットのフラッシュメモリ２の場合、訂正レジスタＲ２０には、８ビット単位で訂正データが書き込まれ、書き込まれた各訂正データのカラムアドレスは０〜２１１１のいずれかに対応する。
【０１０４】
図８は、訂正レジスタＲ２０に書き込まれている訂正データ（訂正データ＃０〜訂正データ＃ｎ−１）及びカラムアドレス（カラムアドレス＃０〜カラムアドレスｎ−１）と、フラッシュメモリ２のデータ入出力バスに入力されるカラムアドレス及び訂正データの対応関係を示している。ここで、訂正データ＃０〜訂正データ＃ｎ−１は、ページレジスタ２２に保持されているデータに上書きされる１バイト（８ビット）のデータである。訂正データ＃０〜訂正データ＃ｎ−１が上書きされるページレジスタ２２内の位置は、カラムアドレス＃０〜カラムアドレスｎ−１によって特定される。図８に示した例では、訂正データ＃０にはカラムアドレス＃０が対応し、訂正データ＃１にはカラムアドレス＃１が対応し、以下同様に、訂正データ＃ｎ−１にはカラムアドレスｎ−１が対応している。
【０１０５】
次に、フラッシュメモリ２のデータ入出力バスに入力されるカラムアドレス及び訂正データについて説明する。最初の訂正データ（訂正データ＃０）を入力するときは、データ入力コマンド（Ｉｎ−ｃｍｄ）、カラムアドレス（Ｃ−ａｄｄ）、ロウアドレス（Ｒ−ａｄｄ）及び訂正データ（Ｄａｔａ）がこの順番でデータ入出力バスに入力される。ページレジスタ２２に保持されているデータの書き込み先のページ（転送先のページ）は、ここで与えるカラムアドレス（Ｃ−ａｄｄ）により特定される。この後の訂正データ（訂正データ＃１〜訂正データ＃ｎ−１）を入力するときは、ランダムデータ入力コマンド（Ｉｎ−ｃｍｄ’）、カラムアドレス（Ｃ−ａｄｄ）、ロウアドレス（Ｒ−ａｄｄ）及び訂正データ（Ｄａｔａ）がこの順番でデータ入出力バスに入力される。
【０１０６】
図８に示したステップ＃０では、カラムアドレス（Ｃ−ａｄｄ）としてカラムアドレス＃０が入力され、訂正データ（Ｄａｔａ）として訂正データ＃０が入力される。ステップ＃１では、カラムアドレス（Ｃ−ａｄｄ）としてカラムアドレス＃１が入力され、訂正データ（Ｄａｔａ）として訂正データ＃１が入力される。例えば、カラムアドレス＃０が２５６で、カラムアドレス＃１が５１１の場合、カラムアドレスが２５６の１バイトのデータが訂正データ＃０で置き換えられ、カラムアドレスが５１１の１バイトのデータが訂正データ＃０で置き換えられる。
【０１０７】
以下同様に、訂正レジスタＲ２０に書き込まれている訂正データとカラムアドレスが入力され、ステップ＃ｎ−１では、カラムアドレス（Ｃ−ａｄｄ）としてカラムアドレス＃ｎ−１が入力され、訂正データ（Ｄａｔａ）として訂正データ＃ｎ−１が入力される。ステップ＃ｎ−１では、更に、書き込みコマンド（Ｐ−ｃｍｄ）が入力され、この書き込みコマンド（Ｐ−ｃｍｄ）に応答して、ページレジスタ２２に保持されているデータが、ステップ＃０で入力されたロウアドレス（Ｒ−ａｄｄ）に対応するメモリセルアレイ２１内のページに書き込まれる（複写される）。
【０１０８】
上述のように、図８に示した例では、ページレジスタ２２に保持されている２１１２バイトのデータのうちのｎバイトのデータが、訂正レジスタＲ２０に書き込まれている訂正データ＃０〜訂正データ＃ｎ−１で置き換えられた後に、転送先のページに書き込まれる。つまり、この処理では、ｎ個の訂正データ（ｎバイトの訂正データ）をフラッシュメモリ２に転送することにより、ページレジスタ２２に保持されている２１１２バイトのデータに含まれる誤りが訂正される。ここで、ページレジスタ２２に保持されている２１１２バイトのデータは、転送元のページに記憶されているデータなので、実質的には、ｎ個の訂正データ（ｎバイトの訂正データ）により転送元のページに記憶されているデータに含まれる誤りが訂正されたことになる。
【０１０９】
以上に説明したように、本発明に係る転送処理では、転送元のページから読み出されたデータはページレジスタ２２に保持され、このデータに誤りがあるときは、ページレジスタ２２に保持されているこのデータの一部（誤り部分）がメモリコントローラ側から与える訂正データで置き換えられ、この置き換えにより誤りが訂正されたデータが転送先のページに書き込まれる。従って、メモリコントローラ側から訂正データだけを与えることにより、転送元のページが記憶されているデータの誤りを訂正することができる。
【０１１０】
尚、上記実施の形態においては、エラーコレクションコードとしてリードソロモン符号を使用したが、エラーコレクションコードはＢＣＨ符号、ハミング符号等の他の符号化方式のエラーコレクションコードであってもよい。他の符号化方式のエラーコレクションコードの場合であっても、訂正されるビットを含むカラムアドレス単位（例えば、1バイト単位）の訂正データとそのカラムアドレスを訂正レジスタＲ２０に書き込むようにすれば同様に実施することができる。
【図面の簡単な説明】
【０１１１】
【図１】本発明の実施の形態に係るフラッシュメモリシステムの構成を示すブロック図である。
【図２】フラッシュメモリのアドレス空間の構造を示す図である。
【図３】ページの記憶領域の構成を説明する図である。
【図４】ホストシステム側のアドレス空間とフラッシュメモリ側のアドレス空間の対応関係を示す図である。
【図５】ホストインターフェースブロックとフラッシュメモリインターフェースブロックの構成を示すブロック図である。
【図６】従来の転送処理の手順を説明するための図である。
【図７】本発明の実施の形態に係る転送処理の手順を説明するための図である。
【図８】本発明の実施の形態に係る訂正データ及びカラムアドレスと、カラムアドレス及び訂正データの対応関係とを示した図である。
【符号の説明】
【０１１２】
１    フラッシュメモリシステム
２    フラッシュメモリ
３    フラッシュメモリコントローラ
４    ホストシステム
６    マイクロプロセッサ
７    ホストインターフェースブロック
８    ワークエリア
９    バッファ
１０  フラッシュメモリインタフェースブロック
１１  ＥＣＣブロック
２１  メモリセルアレイ
２２  ページレジスタ
【図１】
2008158908.tif 000003
【図２】
2008158908.tif 000004
【図３】
2008158908.tif 000005
【図４】
2008158908.tif 000006
【図５】
2008158908.tif 000007
【図６】
2008158908.tif 000008
【図７】
2008158908.tif 000009
【図８】
2008158908.tif 000010