(57)【特許請求の範囲】
【請求項１】
ホストシステムから与えられるアクセス指示に基づいて、物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
ホストシステム側の論理アドレス空間における複数セクタの領域で構成された論理ブロックと前記物理ブロックとの対応関係を管理するブロック管理手段と、
前記アクセス指示により指定された領域が属する前記論理ブロックと対応する前記物理ブロックにホストシステム側から与えられたデータを書き込むデータ書き込み手段と、
前記フラッシュメモリ内のいずれかの前記物理ブロックに対して新たに前記論理ブロックが割り当てられる毎にカウント値を更新するカウント手段と、
前記カウント値に基づいて決定されるカウント情報を、新たに前記論理ブロックが割り当てられた前記物理ブロックに書き込むカウント情報書き込み手段と、
前記カウント値と前記物理ブロックに書き込まれている前記カウント情報に基づいて、前記物理ブロックに記憶されているデータを別の前記物理ブロックに転送するか否かを判断する判断手段と、
前記判断手段によって肯定的な判断がなされたときに、前記肯定的な判断の対象の前記物理ブロックに記憶されているデータを別の前記物理ブロックに転送するデータ転送手段と
を備え、
前記カウント値は、前記フラッシュメモリが有する全ての前記物理ブロックに共通したカウント値である、
メモリコントローラ。
【請求項２】
前記カウント情報は、前記カウント値を２進数表示したときの所定範囲の桁を切り出した数値情報である、
請求項１に記載のメモリコントローラ。
【請求項３】
前記肯定的な判断の対象の前記物理ブロックは、前記カウント値の前記数値情報に対応する部分の値との差が所定値以上である値を示すカウント情報が記憶されている前記物理ブロックである、
請求項２に記載のメモリコントローラ。
【請求項４】
前記所定値は、前記フラッシュメモリを構成する前記物理ブロックの数に基づいて決定された値である、
請求項３に記載のメモリコントローラ。
【請求項５】
請求項１乃至４のうちのいずれか１項に記載のメモリコントローラと、
前記メモリコントローラによってアクセスされるフラッシュメモリと、
を備えるフラッシュメモリシステム。
【請求項６】
ホストシステムから与えられるアクセス指示に基づいて、物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
ホストシステム側の論理アドレス空間における複数セクタの領域で構成された論理ブロックと前記物理ブロックとの対応関係を管理するブロック管理ステップと、
前記アクセス指示により指定された領域が属する前記論理ブロックと対応する前記物理ブロックにホストシステム側から与えられたデータを書き込むデータ書き込みステップと、
前記フラッシュメモリ内のいずれかの前記物理ブロックに対して新たに前記論理ブロックが割り当てられる毎にカウント値を更新するカウントステップと、
前記カウント値に基づいて決定されるカウント情報を、新たな前記論理ブロックが割り当てられた前記物理ブロックに書き込むカウント情報書き込みステップと、
前記カウント値と前記物理ブロックに書き込まれている前記カウント情報に基づいて、前記物理ブロックに記憶されているデータを別の前記物理ブロックに転送するか否かを判断する判断ステップと、
前記判断ステップで肯定的な判断がなされたときに、前記肯定的な判断の対象の前記物理ブロックに記憶されているデータを別の前記物理ブロックに転送するデータ転送ステップと
を備え、
前記カウント値は、前記フラッシュメモリが有する全ての前記物理ブロックに共通したカウント値である、
フラッシュメモリの制御方法。
【請求項７】
前記カウント情報は、前記カウント値を２進数表示したときの所定範囲の桁を切り出した数値情報である、
請求項６に記載のフラッシュメモリの制御方法。
【請求項８】
前記肯定的な判断の対象の前記物理ブロックは、前記カウント値の前記数値情報に対応する部分の値との差が所定値以上である値を示すカウント情報が記憶されている前記物理ブロックである、
請求項７に記載のフラッシュメモリの制御方法。
【請求項９】
前記所定値は、前記フラッシュメモリを構成する前記物理ブロックの数に基づいて決定された値である、
請求項８に記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
例えば、特許文献１に開示されているように、フラッシュメモリを用いたメモリシステムでは、特定の物理ブロックに書き換えが集中しないようにウェアー・レベリング（Wear-leveling）制御が行われている。このウェアー・レベリング制御には、大きくは２つの方式がある。
【０００３】
１つは、書き換えが行われないデータが記憶されている物理ブロックを放置しておき、それ以外の物理ブロックの書き換え回数が平均化されるように制御するウェアー・レベリング制御（パッシブ・ウェアー・レベリング（Passive-wear-leveling）制御方式）である。もう一つは、書き換えが行われないデータが記憶されている物理ブロックを含めて、全ての物理ブロックの書き換え回数が平均化されるように制御するウェアー・レベリング制御（アクティブ・ウェアー・レベリング（Active-wear-leveling）制御方式）である。
【０００４】
ここで、書き換えが行わないデータが記憶されている物理ブロックが少ない場合は、パッシブ・ウェアー・レベリング制御方式が適している。しかし、書き換えが行われないデータが記憶されている物理ブロックが多い場合は、アクティブ・ウェアー・レベリング制御方式が適している。従って、特許文献１には、メモリシステムに記憶されるデータの書き換え頻度に応じて（つまり、書き換えが行われないデータが記憶されている物理ブロックが多いか少ないかに応じて）、パッシブ・ウェアー・レベリング制御方式、アクティブ・ウェアー・レベリング制御方式又はこれらを組み合わせたウェアー・レベリング制御方式のうちのいずれかのウェアー・レベリング制御を行うことが記載されている。
【０００５】
【特許文献１】特開２００７−１３３６８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、メモリシステムに記憶されるデータの書き換え頻度に応じて、適切なウェアー・レベリング制御方式を選択することは、必ずしも容易でない。
【０００７】
また、上述した特許文献１では、ウェアー・レベリング制御方式の選択や条件設定を、ユーザが行うようになっている。その際、ユーザは、適切なウェアー・レベリング制御方式を選択し、その条件設定を行う必要がある。これらは、ユーザにとって負担である。そして、ウェアー・レベリング制御方式の選択が適切でなかった場合、例えば、書き換えが行われないデータが記憶されている物理ブロックが少ないときにアクティブ・ウェアー・レベリング制御方式が選択されると、不必要なデータ転送が行われることが多くなる。
【０００８】
そこで、本発明は、殆ど書き換えが行われないデータ（書き換え頻度が低いデータ）が記憶されている物理ブロックが存在するときだけ、その物理ブロックを含めたウェアー・レベリング制御が行われるメモリコントローラ、フラッシュメモリシステム、及びフラッシュメモリの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の第１の側面に従うメモリコントローラは、ホストシステムから与えられるアクセス指示に基づいて、物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
ホストシステム側の論理アドレス空間における複数セクタの領域で構成された論理ブロックと前記物理ブロックとの対応関係を管理するブロック管理手段と、
前記アクセス指示により指定された領域が属する前記論理ブロックと対応する前記物理ブロックにホストシステム側から与えられたデータを書き込むデータ書き込み手段と、
前記物理ブロックに対して新たに前記論理ブロックが割り当てられる毎にカウント値を更新するカウント手段と、
前記カウント値に基づいて決定されるカウント情報を、新たな前記論理ブロックが割り当てられた前記物理ブロックに書き込むカウント情報書き込み手段と、
前記カウント値と前記物理ブロックに書き込まれている前記カウント情報に基づいて、前記物理ブロックに記憶されているデータを別の前記物理ブロックに転送するか否かを判断する判断手段と、
前記判断手段によって肯定的な判断がなされたときに、前記肯定的な判断の対象の前記物理ブロックに記憶されているデータを別の前記物理ブロックに転送するデータ転送手段と、
を備える。
【００１０】
好適な実施形態では、前記カウント情報は、前記カウント値を２進数表示したときの所定範囲の桁（ビット）を切り出した数値情報である。
【００１１】
好適な実施形態では、前記肯定的な判断の対象の前記物理ブロックは、前記カウント値の前記カウント情報を示す部分の値との差が所定値以上である値を示すカウント情報が記憶されている前記物理ブロックである。
【００１２】
好適な実施形態では、前記所定値は、前記フラッシュメモリを構成する前記物理ブロックの数に基づいて決定された値（例えば、前記物理ブロックの数に所定数値（１以上の整数）を乗じた値）である。
【００１３】
本発明の第２の側面に従うフラッシュメモリシステムは、本発明の第１の側面に従うメモリコントローラと、前記メモリコントローラによってアクセスされるフラッシュメモリとを備える。
【００１４】
本発明の第３の側面に従うフラッシュメモリの制御方法は、ホストシステムから与えられるアクセス指示に基づいて、物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
ホストシステム側の論理アドレス空間における複数セクタの領域で構成された論理ブロックと前記物理ブロックとの対応関係を管理するブロック管理ステップと、
前記アクセス指示により指定された領域が属する前記論理ブロックと対応する前記物理ブロックにホストシステム側から与えられたデータを書き込むデータ書き込みステップと、
前記物理ブロックに対して新たに前記論理ブロックが割り当てられる毎にカウント値を更新するカウントステップと、
前記カウント値に基づいて決定されるカウント情報を、新たな前記論理ブロックが割り当てられた前記物理ブロックに書き込むカウント情報書き込みステップと、
前記カウント値と前記物理ブロックに書き込まれている前記カウント情報に基づいて、前記物理ブロックに記憶されているデータを別の前記物理ブロックに転送するか否かを判断する判断ステップと、
前記判断ステップによって肯定的な判断がなされた前記物理ブロックに記憶されているデータを別の前記物理ブロックに転送するデータ転送ステップと、
を備える。
【発明の効果】
【００１５】
殆ど書き換えが行われないデータ（書き換え頻度が低いデータ）が記憶されている物理ブロックが存在するときだけ、その物理ブロックを含めたウェアー・レベリング制御が行われるメモリコントローラ、フラッシュメモリシステム、及びフラッシュメモリの制御方法を提供することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態を、図面を参照しながら詳細に説明する。
【００１７】
図１は、本発明の一実施形態に係るフラッシュメモリシステム１を概略的に示すブロック図である。
【００１８】
図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するメモリコントローラ３とで構成されている。
【００１９】
フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続されている。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成されている。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２０】
メモリコントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（Error Collection Code）ブロック１１と、ＲＯＭ（Read Only Memory）１２とから構成される。メモリコントローラ３は、内部バス１４を介してフラッシュメモリ２と接続されている。これら機能ブロックによって構成されるメモリコントローラ３は、一つの半導体チップ上に集積される。以下、各機能ブロックについて説明する。
【００２１】
ホストインターフェースブロック７は、ホストシステム４との間でデータ、アドレス情報、ステータス情報、外部コマンド等の授受を行なう。外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（例えば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００２２】
ホストインターフェースブロック７は、コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３を備えている。コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３には、ホストシステム４から与えられる情報が書き込まれる。コマンドレジスタＲ１には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。セクタ数レジスタＲ２にはアクセス対象領域のセクタ数が書き込まれる。ＬＢＡレジスタＲ３には、アクセス対象領域の先頭のＬＢＡ（Logical Block Address）（後述）が書き込まれる。
【００２３】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータを一時的に格納する作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成されている。ワークエリア８には、例えば、論理ブロックと物理ブロックとの対応関係や、論理ページと物理ページとの対応関係等を示したアドレス変換テーブル（後述）等が記憶される。
【００２４】
バッファ９は、フラッシュメモリ２から読み出したデータを、ホストシステム４が受け取り可能な状態となるまで保持する。また、バッファ９は、フラッシュメモリ２に書き込むデータを、フラッシュメモリ２が書き込み可能な状態となるまで保持する。
【００２５】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２との間でデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。ここで、内部コマンドとは、メモリコントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、メモリコントローラ３から与えられる内部コマンドに従って動作する。
【００２６】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加される誤り訂正符号（ＥＣＣ：Error Collection Code）を生成するとともに、読み出したデータに付加されている誤り訂正符号に基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００２７】
ＲＯＭ１２は、マイクロプロセッサ６による処理の手順を定義するプログラムを格納する不揮発性の記憶素子である。例えば、アドレス変換テーブルの作成等の処理手順を定義するプログラムが格納されている。
【００２８】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、メモリコントローラ３の全体の動作を制御する。例えば、マイクロプロセッサ６は、ＲＯＭ１２から読み出した各種処理を定義したコマンドセットに基づいてフラッシュメモリインターフェースブロック１０に処理を実行させる。
【００２９】
フラッシュメモリ２はＮＡＮＤ型フラッシュメモリからなる。ＮＡＮＤ型フラッシュメモリは、レジスタと、複数のメモリセルが２次元的に配列されたメモリセルアレイを備えている。メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。ここで、メモリセル群は、複数のメモリセルが直列に接続されたものである。各ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、レジスタから選択されたメモリセルへのデータの書き込み又は選択されたメモリセルからレジスタへのデータの読み出しが行われる。
【００３０】
ＮＡＮＤ型フラッシュメモリでは、データ読み出し動作及びデータ書き込み動作はページ単位で行われ、データ消去動作はブロック（物理ブロック）単位で行われる。物理ブロックは、複数のページ（物理ページ）で構成される。例えば、１個の物理ページは、所定サイズ（例えば２０４８バイト）のユーザ領域と、所定サイズ（例えば６４バイト）の冗長領域とで構成され、１個の物理ブロックが、所定個数（例えば６４個）の物理ページで構成されている。ユーザ領域は、ホストシステム４から与えられるデータを記憶するための領域であり、所定個数（例えば４個）の物理セクタ領域（５１２バイト単位の記憶領域）で構成されている。冗長領域は、誤り訂正符号（ＥＣＣ：Error Collection Code）、論理アドレス情報、ブロックステータス（フラグ）、カウント情報（後述）等の付加データを記憶するための領域である。
【００３１】
論理アドレス情報は、物理ブロックと論理ブロックの対応関係を判別するための情報である。従って、記憶データが消去された物理ブロックのような、対応する論理ブロックの無い物理ブロックについては、その物理ブロックの冗長領域に、論理アドレス情報は格納されていない。なお、以下の説明では、「物理ブロックの冗長領域」とは、物理ブロック内の一又は複数の物理ページが備える冗長領域（例えば、先頭物理ページの冗長領域）で構成された記憶領域を指す。
【００３２】
ブロックステータス（フラグ）は、物理ブロックの良否を示すフラグである。尚、初期不良の物理ブロックについては、不良ブロック（正常にデータの書き込み等を行うことができない物理ブロック）であることを示すブロックステータス（フラグ）が製造メーカによって書き込まれている。
【００３３】
ホストシステム４側のアドレス空間は、セクタ（５１２バイト）単位で分割した領域（以下、論理セクタ領域と言う）に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。又、複数個の論理セクタ領域で構成された論理ブロックが形成され、この論理ブロックに対して、１個又は複数個の物理ブロックが割り当てられる。この論理ブロックと物理ブロックの対応関係は、ゾーン単位で管理されることが多い。図２は、８個の論理ゾーンと８個の物理ゾーンを形成し、対応関係にある論理ゾーンと物理ゾーンの組毎に、論理ブロックと物理ブロックの対応関係を管理する場合の例を示している。この例では、ＬＢＡ＃０−＃２０４７９９９からなる２０４８０００個の論理セクタ領域を、８１９２個の物理ブロックからなるフラッシュメモリ２側の記憶領域に割り当てている。
【００３４】
図２では、アドレス（ＬＢＡ）が連続する２５６個の論理セクタ領域をまとめたものを論理ブロックとし、この論理ブロックに通し番号を付している。以下、論理ブロックに付した通し番号を論理ブロック番号（ＬＢＮ）と言う。例えば、ＬＢＡ＃０−＃２５５の２５６個の論理セクタ領域は、ＬＢＮ＃０の論理ブロックに属し、ＬＢＡ＃２５６−＃５１１の２５６個の論理セクタ領域はＬＢＮ＃１の論理ブロックに属している。このように、ＬＢＡ＃０−＃２０４７９９９の２０４８０００個の論理セクタ領域は、ＬＢＮ＃０−＃７９９９の８０００個の論理ブロックのいずれかに属している。
【００３５】
更に、この論理ブロックを複数個まとめたものを論理ゾーンとし、この論理ゾーンに通し番号を付している。以下、論理ゾーンに付した通し番号を論理ゾーン番号（ＬＺＮ）と言う。この例では、８個の論理ゾーン（ＬＺＮ＃０−＃７）が形成され、それぞれの論理ゾーンは、ＬＢＮが連続する１０００個の論理ブロックから構成されている。尚、ＬＢＮが連続する論理ブロックを、異なる論理ゾーンに順次振り分けるようにして論理ゾーンを形成してもよい。例えば、ＬＢＮ＃０の論理ブロックはＬＺＮ＃０の論理ゾーンに、ＬＢＮ＃１の論理ブロックはＬＺＮ＃１の論理ゾーンに、ＬＢＮ＃２の論理ブロックはＬＺＮ＃２の論理ゾーンにという順番でＬＺＮ＃７の論理ゾーンまで振り分けていく。以下同様に、ＬＢＮ＃８の論理ブロックをＬＺＮ＃０の論理ゾーンに、ＬＢＮ＃９の論理ブロックをＬＺＮ＃１の論理ゾーンに、ＬＢＮ＃１０の論理ブロックをＬＺＮ＃２の論理ゾーンに振り分けていく。
【００３６】
一方、フラッシュメモリ２側は、８１９２個の物理ブロックにより、８個の物理ゾーンが形成されている。８１９２個の物理ブロックには、固有の物理ブロックアドレス（ＰＢＡ）が付されている。又、８個の物理ゾーンには、通し番号を付されている。以下、物理ゾーンに付された通し番号を、物理ゾーン番号（ＰＺＮ）と言う。各物理ゾーンは、ＰＢＡが連続する物理ブロックが１０２４個で構成されている。尚、ＰＢＡが連続しない物理ブロックで物理ゾーンを形成するようにしてもよい。
【００３７】
論理ゾーンと物理ゾーンの対応関係については、物理ゾーンのＰＺＮと、当該ＰＺＮと同じ値のＬＺＮを有する論理ゾーンとを対応させている。つまり、ＰＺＮ＃０の物理ゾーンに対してＬＺＮ＃０の論理ゾーンが対応し、ＰＺＮ＃１の物理ゾーンに対してＬＺＮ＃１の論理ゾーンが対応する。
【００３８】
尚、論理ブロックと物理ブロックとの対応関係は、通常、アドレス変換テーブルによって管理される。このアドレス変換テーブルは、論理ブロックと物理ブロックとの対応関係を記述したテーブルであり、各物理ブロックの冗長領域に記憶されている論理アドレス情報に基づいて作成される。このアドレス変換テーブルを作成するときは、作成対象の物理ゾーンに含まれる物理ブロックの冗長領域から論理アドレス情報が順次読み出され、読み出された論理アドレス情報に基づいて論理ブロックと物理ブロックとの対応関係が順次記述される。
【００３９】
また、フラッシュメモリ内の物理ブロックには、出荷時から不良である先天性の不良ブロックが含まれている。更に、出荷時に良品の物理ブロックであっても、使用開始後に劣化して不良ブロックになる物理ブロック（後天性の不良ブロック）もある。従って、本実施の形態では、論理ゾーンに含まれる論理ブロックの数よりも、物理ゾーンに含まれる物理ブロックの数の方が多い。具体的には、例えば、論理ゾーンに含まれる論理ブロックの数は１０００個であるのに対し、物理ゾーンに含まれる物理ブロックの数は１０２４個としている。
【００４０】
また、上述のように論理ゾーンと物理ゾーンを形成せずに論理ブロックと物理ブロックとの対応関係を管理するようにしてもよい。この場合、全ての物理ブロックを対象に論理ブロックと物理ブロックとの対応関係を管理することになるので、アドレス変換テーブルを作成するときの時間が長くなる。従って、アドレス変換テーブルはフラッシュメモリ２に保存しておくことが好ましい。より好ましくは、メモリコントローラ３内に、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の不揮発性ＲＡＭからなる記憶領域を設け、この記憶領域にアドレス変換テーブルを保持する。このような不揮発性ＲＡＭにアドレス変換テーブルを保持した場合には、不揮発性ＲＡＭ上でアドレス変換テーブルを更新することができる。
【００４１】
本実施の形態の書き込み処理では、ホストシステム４によって、コマンドレジスタＲ１に、書き込みコマンドを示すコマンドコードが書き込まれ、セクタ数レジスタＲ２に、書き込むデータのセクタ数が書き込まれ、ＬＢＡレジスタＲ３には、書き込みを開始する先頭データに対応するＬＢＡが書き込まれる。セクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づいて、アクセス対象の領域である論理アクセス領域が判別され、その論理アクセス領域が含まれる論理ブロックに対応する物理ブロック内のデータが書き込まれていない物理セクタ領域の先頭から、ホストシステム４から与えられるデータが書き込まれる。
【００４２】
セクタ数レジスタＲ２及びＬＢＡレジスタＲ３に書き込まれた情報に基づいて判別される論理アクセス領域が複数個の論理ブロックに跨っている場合は、データの書き込み先になる物理ブロックも複数個になる。従って、論理アクセス領域が複数個の論理ブロックに跨っている場合は、論理アクセス領域が属する論理ブロック毎に領域を分割してデータの書き込み処理が行われる。例えば、論理アクセス領域が２個の論理ブロック（第１の論理ブロックと第２の論理ブロック）に跨っている場合は、第１の論理ブロックに対応する物理ブロックに対する書き込み処理と、第２の論理ブロックに対応する物理ブロックに対する書き込み処理とが行われる。第１の論理ブロックに属する論理アクセス領域に対して書き込むことが指示されたデータは、第１の論理ブロックに対応する物理ブロック内のデータが書き込まれていない物理セクタ領域に書き込まれる。第２の論理ブロックに属する論理アクセス領域に対して書き込むことが指示されたデータは、第２の論理ブロックに対応する物理ブロック内のデータが書き込まれていない物理セクタ領域に書き込まれる。
【００４３】
さて、前述したように、ＮＡＮＤ型フラッシュメモリでは、データ読み出し動作及びデータ書き込み動作はページ単位で行われ、データ消去動作は物理ブロック単位で行われる。データ消去動作は、論理アクセス領域が属する論理ブロック（以下、「書込み先論理ブロック」と言う）に対応した物理ブロックに記憶されているデータ又はそのデータに対応する最新データが別の物理ブロックに書き込まれ、その物理ブロックに記憶されているデータが全て別の物理ブロックに書き込まれたデータで置き換えられたときに行われる。すなわち、書込み先論理ブロックに対応した物理ブロックに記憶されているデータが、全て別の物理ブロックに書き込まれたデータで置き換えられた場合には、その物理ブロックに記憶されているデータが消去され、前述したアドレス変換テーブル（論理ブロックと物理ブロックとの対応関係を記述したテーブル）に記述されている論理ブロックと物理ブロックとの対応関係が更新される。また、書込み先論理ブロックを新たに割り当てる空きの物理ブロック（論理ブロックが未割当ての物理ブロック）を検索するときには、例えば、対応する物理ゾーン内における先頭の物理ブロックから末尾の物理ブロックへと順次に空きの物理ブロックの検索が行われる。そして、検出された空きの物理ブロックに、書込み先論理ブロックが割り当てられる。
【００４４】
以上のように、物理ブロックに記憶されているデータの書き換えが行われる場合には、その物理ブロックとは別の物理ブロック（空きの物理ブロック）に、その物理ブロックと対応する論理ブロックが新たに割り当てられることになる。また、書込み先論理ブロックに対応する物理ブロックがない場合にも、空きの物理ブロックに論理ブロックが新たに割り当てられることになる。本実施の形態では、メモリコントローラ３に、物理ブロックに対して新たに論理ブロックを割り当てる毎にカウント値をカウントアップするカウンタ機能が設けられている。具体的には、例えば、マイクロプロセッサ６が、カウンタの役割を果たし、物理ブロックに対して新たに論理ブロックを割り当てる毎に、カウント値をカウントアップする。カウント値は、メモリコントローラ３内の記憶領域、例えばワークエリア６（ＳＲＡＭ等の揮発性メモリ）に記憶され、ワークエリア６に記憶されているカウント値がカウントアップされる。ワークエリア６に記憶されているカウント値は、適時に（例えば、所定回数カウント値が更新される都度に）、フラッシュメモリ２に複写される（書き込まれる）。メモリコントローラ３の電源が遮断された場合、ワークエリア６に記憶されているカウント値は消去されるが、メモリコントローラ３の電源が投入された場合に、フラッシュメモリ２に記憶されているカウント値がワークエリア６に読み出され、以後、その読み出されたカウント値が、カウントアップされる。なお、カウント値は、カウントアップに限らず、カウントダウンなど他の規則に従って更新されても良い。また、カウント値の更新が行われるタイミングは、本実施の形態では、物理ブロックに対して新たに論理ブロックを割り当てる毎であるが、それに限らず、他のタイミング、例えば、物理ブロックの記憶データの消去が行われるタイミングであっても良い。また、メモリコントローラ３内に、ＦｅＲＡＭ、ＭＲＡＭ等の不揮発性ＲＡＭからなる記憶領域を設け、この記憶領域にカウント値を保持するようにしてもよい。このような不揮発性ＲＡＭにカウント値を保持するようにした場合、不揮発性ＲＡＭ上でカウント値を更新することができ、カウント値をフラッシュメモリ２に複写する必要がなくなる。
【００４５】
物理ブロックに対して新たに論理ブロックが割り当てられた場合、新たに論理ブロックが割り当てられた物理ブロックの冗長領域に、その新たに割り当てられた論理ブロックを示す論理アドレス情報と、カウントアップ前のカウント値（カウントアップ後のカウント値でも良い）に基づくカウント情報とを書き込む。具体的には、例えば、図３に示すように、新たに論理ブロックが割り当てられた物理ブロックの冗長領域１０５に、論理アドレス情報として、割り当てられた論理ブロックを示すＬＢＮが書き込まれ、カウント情報として、カウントアップ前の４バイトのカウント値の上位３バイトの部分が書き込まれる。
【００４６】
より具体的に言えば、図３に示す例によれば、（３Ａ）に示すように、カウント値（１６進数表示）が、“００  ００  ３Ｆ  ＦＡｈ”の場合において、空きの物理ブロックとして検出されたＰＢＡ＃７の物理ブロックに、ＬＢＮ＃４０の論理ブロックが新たに割り当てられると、そのＰＢＡ＃７の物理ブロックの冗長領域１０５に、新たに割り当てられた論理ブロックのＬＢＮ“＃４０”と、カウントアップ前のカウント値の上位３バイトであるカウント情報“００  ００  ３Ｆｈ”が書き込まれる。そして、カウント値（１６進数表示）が、“００  ００  ３Ｆ  ＦＡｈ”から“００  ００  ３Ｆ  ＦＢｈ”にカウントアップされる。
【００４７】
次に、例えば、（３Ｂ）に示すように、空きの物理ブロックとして検出されたＰＢＡ＃１２の物理ブロックに、ＬＢＮ＃４１の論理ブロックが新たに割り当てられると、そのＰＢＡ＃１２の物理ブロックの冗長領域１０５に、新たに割り当てられた論理ブロックのＬＢＮ“＃４１”と、カウントアップ前のカウント値の上位３バイトであるカウント情報“００  ００  ３Ｆｈ”が書き込まれる。そして、カウント値が、“００  ００  ３Ｆ  ＦＢｈ”から“００  ００  ３Ｆ  ＦＣｈ”にカウントアップされる。
【００４８】
以後も、同様にして、新たに論理ブロックが物理ブロックに割り当てられる毎に、新たに論理ブロックが割り当てられた物理ブロックの冗長領域１０５に、その割り当てられた論理ブロックのＬＢＮと、カウントアップ前のカウント値の上位３バイトであるカウント情報とが書き込まれ、カウント値がカウントアップされる。例えば、（３Ｃ）に示すように、ＰＢＡ＃１８の物理ブロックにＬＢＮ＃４２の論理ブロックが割り当てられた場合、ＰＢＡ＃１８の物理ブロックの冗長領域１０５に、ＬＢＮ“＃４２”及びカウント情報“００  ００  ３Ｆｈ”が書込まれ、カウント値が、“００  ００  ３Ｆ  ＦＣｈ”から“００  ００  ３Ｆ  ＦＤｈ”にカウントアップされる。その次に、（３Ｄ）に示すように、ＰＢＡ＃２２の物理ブロックにＬＢＮ＃４３の論理ブロックが割り当てられた場合、ＰＢＡ＃２２の物理ブロックの冗長領域１０５に、ＬＢＮ“＃４３”及びカウント情報“００  ００  ３Ｆｈ”が書込まれ、カウント値が、“００  ００  ３Ｆ  ＦＤｈ”から“００  ００  ３Ｆ  ＦＥｈ”にカウントアップされる。その次に、（３Ｅ）に示すように、ＰＢＡ＃２７の物理ブロックにＬＢＮ＃４４の論理ブロックが割り当てられた場合、ＰＢＡ＃２７の物理ブロックの冗長領域１０５に、ＬＢＮ“＃４４”及びカウント情報“００  ００  ３Ｆｈ”が書込まれ、カウント値が、“００  ００  ３Ｆ  ＦＥｈ”から“００  ００  ３Ｆ  ＦＦｈ”にカウントアップされる。その次に、（３Ｆ）に示すように、ＰＢＡ＃３１の物理ブロックの物理ブロックにＬＢＮ＃４５の論理ブロックが割り当てられた場合、ＰＢＡ＃３１の物理ブロックの冗長領域１０５に、ＬＢＮ“＃４５”及びカウント情報“００  ００  ３Ｆｈ”が書込まれ、カウント値が、“００  ００  ３Ｆ  ＦＦｈ”から“００  ００  ４０  ００ｈ”にカウントアップされる。
【００４９】
尚、新たに論理ブロックが割り当てられる物理ブロックを検索するための空きブロック検索は、物理ゾーン内の物理ブロック又はホストシステムの記憶領域として用いられる全ての物理ブロックを対象にして行われる。物理ゾーン内の物理ブロックを対象とした検索の場合、物理ゾーン内の先頭の物理ブロックから末尾の物理ブロックに向かって、順次、空きブロックの検索が行われる。ホストシステムの記憶領域として用いられる全ての物理ブロックを対象とした検索の場合、それら全ての物理ブロックについて先頭の物理ブロックから末尾の物理ブロックに向かって、順次、空きブロックの検索が行われる。このように、検索対象の範囲に含まれる物理ブロックについて、先頭の物理ブロックから末尾の物理ブロックに向かう順番の空きブロックの検索が繰り返し行われることにより、殆ど書き換えが行われないデータ（書き換え頻度が低いデータ）が記憶されている物理ブロックがなければ、検索対象の範囲に含まれる物理ブロックの書き換え回数は、ほぼ均等になることが期待される。
【００５０】
以上の説明によれば、データの書き換え（又は書き込み）を行う過程で、例えば、物理ブロックに対して８１９２個の論理ブロックの割り当てが新たに行われると、カウント値は、０（１６進数表示：００  ００  ００  ００ｈ）から８１９２（１６進数表示：００  ００  ２０  ００ｈ）までカウントアップされる。また、各物理ブロックに対して新たな論理ブロックが割り当てられたときに、各物理ブロックの冗長領域１０５に、カウント値の上位３バイトがカウント情報として書き込まれる。従って、各物理ブロックの冗長領域１０５には、“００  ００  ００ｈ”から“００  ００  １Ｆｈ”までのいずれかの値がカウント情報として書き込まれている。
【００５１】
その後、更に８１９２個の論理ブロックの割り当てが新たに行われた場合、カウント値は、８１９２（１６進数表示：００  ００  ２０  ００ｈ）から１６３８４（１６進数表示：００  ００  ４０  ００ｈ）までカウントアップされる。この期間に、新たな論理ブロックが割り当てられた物理ブロックの冗長領域１０５には、“００  ００  ２０ｈ”から“００  ００  ３Ｆｈ”までのいずれかの値がカウント情報として書き込まれている。
【００５２】
ここで、“００  ００  １Ｆｈ”以下の値がカウント情報として書き込まれている物理ブロックについては、カウント値が８１９２（１６進数表示：００  ００  ２０  ００ｈ）から１６３８４（１６進数表示：００  ００  ４０  ００ｈ）までカウントアップされる期間に、新たな論理ブロックが割り当てられていないことが分かる。なぜなら、その期間に新たな論理ブロックが割り当てられた物理ブロックの冗長領域１０５には、カウント情報として“００  ００  ２０”から“００  ００  ３Ｆ”までのいずれかの値がカウント情報として書き込まれ、“００  ００  １Ｆｈ”以下の値のカウント情報が書き込まれることは無いためである。また、物理ブロックの総数を、１０２４個と仮定した場合（図２の例では、８１９２個であるが、ここでは以降の説明を分かり易くするために、物理ブロックの総数を１０２４個とする）、この期間中に少なくとも８回（８１９２÷１０２４）新たな論理ブロックが割り当てられた物理ブロックが存在することになる。
【００５３】
本実施の形態では、例えば、カウント値が１６３８４（１６進数表示：００  ００  ４０  ００ｈ）にカウントアップされたときに、書き換え頻度の低いデータが記憶されている物理ブロックとして、“００  ００  １Ｆｈ”以下の値がカウント情報として書き込まれている物理ブロックの検索が行われる（例えば、先頭の物理ブロックから末尾の物理ブロックにかけて順次にそのような物理ブロックが検索される）。そして、そのような物理ブロックが検出された場合に、その物理ブロックに記憶されているデータが別の物理ブロックに転送（複写）される。具体的には、その検出された物理ブロック（以下、「転送元の物理ブロック」と言う）に記憶されているデータの転送先となる物理ブロック（以下、「転送先の物理ブロック」と言う）を探す空きブロック検索が行われる。この検索で検出された空きブロック（転送先の物理ブロック）に対して、転送元の物理ブロックに割り当てられている論理ブロックが新たに割り当てられ、この転送先の物理ブロックに、転送元の物理ブロックに記憶されているデータが転送（複写）される。そして、この転送先の物理ブロックの冗長領域１０５に、新たに割り当てられた論理ブロックのＬＢＮ（転送元の物理ブロックに割り当てられている論理ブロックのＬＢＮ）と、カウントアップ前のカウント値の上位３バイトであるカウント情報とが書き込まれる。その後、転送元の物理ブロックに記憶されているデータと、その物理ブロックの冗長領域１０５に記憶されているＬＢＮ及びカウント情報等の付加データとが消去される。つまり、転送元の物理ブロックのユーザ領域に記憶されているデータと冗長領域に記憶されている付加データが一括して消去される。また、物理ブロックに対して新たに論理ブロックが割り当てられたため、カウント値がカウントアップされる。以下、図４を参照して具体的に説明する。
【００５４】
カウント値が１６３８４（１６進数表示：００  ００  ４０  ００ｈ）にカウントアップされた場合に、“００  ００  １Ｆｈ”以下の値を表すカウント情報が記憶されている物理ブロックの検索が行われる。この検索により、まず、“００  ００  １Ａｈ”を記憶しているＰＢＡ＃６の物理ブロックが検出される。この場合、そのＰＢＡ＃６の物理ブロックに記憶されているデータが、空きの物理ブロックとして検出されたＰＢＡ＃３４の物理ブロックに複写され、且つ、そのＰＢＡ＃３４の物理ブロックの冗長領域１０５に、ＰＢＡ＃６の物理ブロックに割り当てられていた論理ブロックのＬＢＮ“＃６”と、カウントアップ前のカウント値の上位３バイトであるカウント情報“００  ００  ４０ｈ”とが書き込まれる（（４Ｄ）参照）。その後、ＰＢＡ＃６の物理ブロックに記憶されているデータと、そのＰＢＡ＃６の物理ブロックの冗長領域１０５に記憶されているＬＢＮ“＃６”及びカウント情報“００  ００  １Ａｈ”
等の付加データとが消去される（（４Ａ）参照）。また、カウント値が、“００  ００  ４０  ００ｈ”から“００  ００  ４０  ０１ｈ”にカウントアップされる。
【００５５】
次に、“００  ００  １０ｈ”を記憶しているＰＢＡ＃１５の物理ブロックが検出される。この場合、そのＰＢＡ＃１５の物理ブロックに記憶されているデータが、空きの物理ブロックとして検出されたＰＢＡ＃３５の物理ブロックに複写され、且つ、そのＰＢＡ＃３５の物理ブロックの冗長領域１０５に、ＰＢＡ＃１５の物理ブロックに割り当てられていた論理ブロックのＬＢＮ“＃１５”と、カウントアップ前のカウント値の上位３バイトであるカウント情報“００  ００  ４０ｈ”とが書き込まれる（（４Ｅ）参照）。その後、ＰＢＡ＃１５の物理ブロックに記憶されているデータと、そのＰＢＡ＃１５の物理ブロックの冗長領域１０５に記憶されているＬＢＮ“＃１５”及びカウント情報“００  ００  １０ｈ”
等の付加データとが消去される（（４Ｂ）参照）。また、カウント値が、“００  ００  ４０  ０１ｈ”から“００  ００  ４０  ０２ｈ”にカウントアップされる。
【００５６】
次に、“００  ００  ０Ｆｈ”を記憶しているＰＢＡ＃１６の物理ブロックが検出される。この場合、そのＰＢＡ＃１６の物理ブロックに記憶されているデータが、空きの物理ブロックとして検出されたＰＢＡ＃３６の物理ブロックに複写され、且つ、そのＰＢＡ＃３６の物理ブロックの冗長領域１０５に、ＰＢＡ＃１６の物理ブロックに割り当てられていた論理ブロックのＬＢＮ“＃１６”と、カウントアップ前のカウント値の上位３バイトであるカウント情報“００  ００  ４０ｈ”とが書き込まれる（（４Ｆ）参照）。その後、ＰＢＡ＃１６の物理ブロックに記憶されているデータと、そのＰＢＡ＃１６の物理ブロックの冗長領域１０５に記憶されているＬＢＮ“＃１６”及びカウント情報“００  ００  ０Ｆｈ”
等の付加データとが消去される（（４Ｃ）参照）。また、カウント値が、“００  ００  ４０  ０２ｈ”から“００  ００  ４０  ０３ｈ”にカウントアップされる。
【００５７】
以上により、カウント値が８１９２（１６進数表示：００  ００  ２０  ００ｈ）から１６３８４（１６進数表示：００  ００  ４０  ００ｈ）までの期間に新たな論理ブロックが割り当てられていない物理ブロック、つまり、“００  ００  １Ｆｈ”以下の値がカウント情報として書き込まれている物理ブロックが、書き込み頻度の低い物理ブロックとみなされて、その物理ブロックを含めたウェアー・レベリング制御が行われことになる。言い換えれば、現在のカウント値における上位３バイト（つまりカウント情報に相当する部分）である“００  ００  ４０”との差が所定値以上であるカウント情報（“００  ００  １Ｆｈ”以下の値を示すカウント情報）が記憶されている物理ブロックが、書き込み頻度の低い物理ブロックとみなされる。尚、この書き込み頻度の低い物理ブロックの検索処理と、この検索処理で検出された物理ブロックに記憶されているデータを別の物理ブロックに複写するデータ転送処理は、必ずしもカウント値が１６３８４（１６進数表示：００  ００  ４０  ００ｈ）に達した直後に開始する必要はなく、カウント値が１６３８４（１６進数表示：００  ００  ４０  ００ｈ）に達した後のアイドル時間（例えばホストシステム４からのアクセスが無い期間）に行うようにしてもよい。また、これらの処理の実行中にホストシステム４からのアクセスがあったときは、一旦、処理を中止し、その後、再度アイドル時間が発生したときに処理を再開するようにしてもよい。
【００５８】
この後、更にカウント値が１６３８４（１６進数表示：００  ００  ４０  ００ｈ）から２４５７６（１６進数表示：００  ００  ６０  ００ｈ）までカウントアップされたときには、“００  ００  ３Ｆｈ”以下の値がカウント情報として書き込まれている物理ブロックの検索が行われる。そのような物理ブロックが検出された場合には、その物理ブロックに記憶されているデータが別の物理ブロックに複写（転送）される。
【００５９】
このように、書き換えが頻繁に行われていない物理ブロックの検索は、物理ブロックの総数（例えば１０２４）に所定数（例えば、８）を乗じて得られた個数分（例えば８１９２個分）の新たな論理ブロックの割り当てが行われる毎に実行することが好ましい。つまり、物理ブロックの総数をｎ（ｎは１以上の整数）、所定数ｋ（ｋは１以上の整数）とした場合、カウント値がｎ×ｋ増加する毎に、書き換えが頻繁に行われていない物理ブロックの検索が行われる。この検索では、カウント値がｎ×ｋ増加する期間に新たな物理ブロックが割り当てられなかった物理ブロックの検索が行われ、この検索で検出された物理ブロックが書き換え頻度の低いデータが記憶されている物理ブロックとみなされる。そして、その物理ブロックに記憶されているデータが別の物理ブロックに転送（複写）される。
【００６０】
尚、書き換え頻度の低いデータが記憶されている物理ブロックとみなされた物理ブロックは、その物理ブロックに記憶されているデータが別の物理ブロックに転送（複写）された後に記憶データが消去され、空きの物理ブロックとされる。空きとされた物理ブロックは、それまでの書き換え回数が少ない可能性があるが、空きブロックになったことにより、この後の書き換え回数が多くなる可能性が高くなる。逆に、データの複写先となった物理ブロックは、それまでの書き換え回数が多い可能性があるが、書き換え頻度の低いデータが複写されたことにより、この後の書き換え回数が少なくなる可能性が高くなる。このような原理により、フラッシュメモリ２における複数の物理ブロックの書き換え回数が均等化されることが期待できる。
【００６１】
なお、フラッシュメモリ内の物理ブロックの総数は、フラッシュメモリ２に書き込まれているＩＤ情報（フラッシュメモリ２の構成に関する情報）に基づいて求めることができる。具体的には、例えば、ＩＤ情報には、フラッシュメモリ２全体の記憶容量を示す情報と、ブロックサイズ（１個の物理ブロックの記憶容量）を示す情報とが含まれており、それ故、フラッシュメモリ２全体の記憶容量とブロックサイズとから物理ブロックの総数を計算することができる。また、カウント情報は、カウント値の全てのビットであっても一部のビットであってもよいが、所定の期間（カウント値が所定値分増加するまでの期間）書き換えられていない物理ブロックを判別できる情報でなければならない。この判別ができる範囲でカウント値の一部のビットをカウント情報とするときは、冗長領域の記憶容量、冗長領域に書き込まれるカウント情報以外の情報の容量を考慮してカウント情報のビット数を決定しても良い。
【００６２】
以下、本実施の形態で行われる処理の流れの概要を、図５を参照して説明する。
【００６３】
本実施の形態に係るウェアー・レベリング制御を行う場合には、まず、初期設定が行われる（ステップ１０１）。具体的には、例えば、メモリコントローラ３が、ＩＤ情報をフラッシュメモリ２から読出し、そのＩＤ情報から把握されるフラッシュメモリ２全体の記憶容量とブロックサイズとを基に、物理ブロックの総数ｎを算出する。更に、算出されたｎと上記所定数ｋに基づいてカウント値がｎ×ｋ増加する毎に上記検索処理と上記データ転送処理を実行することを決定する。また、カウンタのカウント値が０に設定される。なお、所定数ｋは、予め決められていても良いし、物理ブロックの総数ｎに基づいて決定されても良い。また、カウント値の上位何バイトをカウント情報として用いるかは、予め決められていても良いし、物理ブロックの総数ｎに基づいて決定されても良い。ここでは、カウント値の上位３バイトをカウント情報として用いる。
【００６４】
初期設定の後、ホストシステム４から書込みコマンドを受信した場合、その書込みコマンドで指定された論理アクセス領域が属する論理ブロックに対応させる物理ブロックを新たに設定する必要があるかどうかを判断する（ステップ１０２）。その必要がある場合は（ステップ１０２でＹＥＳ）、空きブロックの検索が行われ、検出された空きブロックに書込みコマンドで指定された論理アクセス領域が属する論理ブロックが割り当てられる（ステップ１０３）。具体的には、検出された空きブロック（物理ブロック）の冗長領域１０５に、書込みコマンドで指定された論理アクセス領域が属する論理ブロックのＬＢＮと、カウンタのカウント値の上位３バイトであるカウント情報とが書き込まれ、その後、カウンタのカウント値がカウントアップされる。
【００６５】
ステップ１０３でカウントアップされたカウンタのカウント値が、（ｎ×ｋ）の倍数であるか否かが判定される（ステップ１０４）。（ｎ×ｋ）の倍数とは、前述の例（ｎ＝１０２４、ｋ＝８）で言えば、８１９２、１６３８４、２４５７６、…である。
【００６６】
カウントアップ後のカウント値が、（ｎ×ｋ）の倍数であるとの判定結果であれば（ステップ１０４でＹＥＳ）、書き換え頻度の低いデータが記憶されている物理ブロックの検索処理が行われ、書き換え頻度の低いデータが記憶されている物理ブロックが検出された場合には、検出された物理ブロックに記憶されているデータを別の物理ブロックに複写するデータ転送処理が行われる（ステップ１０５）。具体的には、カウンタのカウント値が（ｎ×ｋ）の倍数に達したときに、カウント値が（ｎ×ｋ）増加した期間内に論理ブロックが新たに割り当てられていない物理ブロックが検索される。つまり、カウンタのカウント値が（ｎ×ｋ）の倍数に達したときに、そのカウント値から（ｎ×ｋ）の値を引いた値よりも小さい値に対応するカウント情報が書き込まれている物理ブロックの検索が行われる。そして、これに該当する物理ブロックが検出された場合には、検出された物理ブロックの記憶されているデータが別の物理ブロックに転送された後、検出された物理ブロックの記憶データが消去される。
【００６７】
ステップ１０５では、書き換え頻度の低いデータが記憶されている物理ブロックが検出されなければ、データ転送処理は行われないが、書き換え頻度の低いデータが記憶されている物理ブロックが検出されば、データ転送処理が行われる。つまり、書き換え頻度の低いデータが記憶されている物理ブロックが存在するときだけ、その物理ブロックに記憶されている書き換え頻度の低いデータを別の物理ブロックに複写するデータ転送処理が行われる。
【００６８】
以上が、本実施形態についての説明である。
【００６９】
本実施形態によれば、メモリコントローラ２に、物理ブロックに対して新たに論理ブロックが割り当てられる毎にカウント値をカウントアップするカウンタ機能が設けられる。そして、新たに論理ブロックが割り当てられた物理ブロックの冗長領域１０５には、カウンタ機能によって管理されているカウント値に基づくカウント情報が書き込まれる。そして、物理ブロックの冗長領域１０５にカウント情報が書き込まれた後に、カウント値がカウントアップされる。
【００７０】
更に、所定のタイミングで（前述の例では、カウント値がｎ×ｋ増加する毎に）、書き換え頻度が低いデータが記憶されている物理ブロックの検索が行われる。この検索処理では、カウンタ機能によって管理されているカウント値のカウント情報を示す部分（つまり上位３バイト）の値との差が所定値以上である値を示すカウント情報が記憶されている物理ブロックが、書き換え頻度が低いデータが記憶されている物理ブロックとみなされ、それに該当する物理ブロックの検索が行われる。そして、そのような物理ブロックが検出された場合にのみ、検出された物理ブロックに記憶されているデータが別の物理ブロックに転送（複写）される。つまり、本実施形態によれば、書き換え頻度が低いデータが記憶されている物理ブロックが存在するときだけ、その物理ブロックを含めたウェアー・レベリング制御が行われる。
【００７１】
また、本実施形態によれば、どんな場合に書き換え頻度が低いデータが記憶されている物理ブロックを検索するかという条件の設定は、フラッシュメモリ２から読み出されたＩＤ情報に基づき算出された物理ブロック総数ｎに基づいて自動的に行われるため、ユーザによる条件設定は不要である。
【００７２】
以上、上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。例えば、書き換え頻度が低いデータが記憶されている物理ブロックを検索するタイミングは、カウント値がｎ×ｋ増加する毎でなくてもよく、例えば、物理ブロックを検索するタイミングを設定するためのテーブルを設け、そのテーブルに基づいて書き換え頻度が低いデータが記憶されている物理ブロックを検索するタイミングを決定してもよい。このテーブルの例としては、物理ブロックの個数とその個数に対応する検索のタイミング（例えば、物理ブロックの個数が５１２個の場合はカウント値が４０９６増加する毎）を記述したテーブルが挙げられる。
【図面の簡単な説明】
【００７３】
【図１】本発明の一実施形態に係るフラッシュメモリシステムの概略構成を示すブロック図である。
【図２】論理ブロックと物理ブロックの対応関係を示す図である。
【図３】物理ブロックに対して新たに論理ブロックが割り当てられた場合に行われる処理の説明図である。
【図４】書き換え頻度の低いデータが記憶されている物理ブロックが検出された場合に行われるウェアー・レベリング制御の説明図である。
【図５】本発明の一実施形態で行われる処理の流れを示すフローチャートである。
【符号の説明】
【００７４】
１…フラッシュメモリシステム、２…フラッシュメモリ、３…メモリコントローラ、６…マイクロプロセッサ
【図１】
0004488048.tif 000002
【図２】
0004488048.tif 000003
【図３】
0004488048.tif 000004
【図４】
0004488048.tif 000005
【図５】
0004488048.tif 000006