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