(57)【特許請求の範囲】
【請求項１】
記憶装置のデータ記憶領域に記憶されたデータの消去に要した時間をデータの消去の要求のたびに計測する計測部と、
前記計測部によって計測された時間が標準値より短い場合に予め設定された所定サイズを、前記計測された時間が前記標準値よりも長く所定値より短い場合に前記計測された時間と前記所定サイズに基づいて算出した値を、消去の対象のデータ記憶領域における誤り訂正符号のデータサイズに決定する決定部と、
前記決定部によって決定されたデータサイズの誤り訂正符号を生成する生成部と、
前記生成部によって生成された誤り訂正符号を前記記憶装置に書き込むように制御する書込み制御部と
を有することを特徴とするアクセス制御装置。
【請求項２】
前記計測部により計測された時間が前記標準値の２倍である前記所定値以上である場合に、前記消去の対象のデータ記憶領域を不良領域とする管理情報を記憶する第１記憶部をさらに有する
ことを特徴とする請求項１に記載のアクセス制御装置。
【請求項３】
読出し制御部と、前記決定部によって決定された誤り訂正符号のデータサイズを記憶する第２記憶部とをさらに有し、
前記書込み制御部は、前記記憶装置にデータを書き込む際に、前記第２記憶部から前記誤り訂正符号のデータサイズを読出し、該誤り訂正符号のデータサイズに応じて、前記生成部によって生成された誤り訂正符号の書込み位置を決定し、該書込み位置に前記誤り訂正符号を書き込むように制御し、
前記読出し制御部は、前記記憶装置に記憶されたデータを読出す際に、前記記憶部から前記誤り訂正符号のデータサイズを読出し、該誤り訂正符号のデータサイズに応じて、前記記憶装置に記憶された誤り訂正符号の読出し位置を決定し、該読出し位置から前記誤り訂正符号を読出すように制御する
ことを特徴とする請求項１または２に記載のアクセス制御装置。
【請求項４】
前記書込み制御部は、前記記憶装置におけるデータを記憶している記憶領域と異なる記憶領域に誤り訂正符号を書き込むように制御し、
前記異なる記憶領域は、前記所定サイズの誤り訂正符号を書き込む領域と拡張された分を書き込む領域を有する
ことを特徴とする請求項１乃至３のいずれか一つに記載のアクセス制御装置。
【請求項５】
記憶装置へのアクセスを制御するアクセス制御装置が誤り訂正符号を生成する誤り訂正制御方法であって、
記憶装置のデータ記憶領域に記憶されたデータの消去に要した時間をデータの消去の要求のたびに計測し、
計測した時間が標準値より短い場合に予め設定された所定サイズを、前記計測した時間が前記標準値よりも長く所定値より短い場合に前記計測した時間と前記所定サイズに基づいて算出した値を、消去の対象のデータ記憶領域における誤り訂正符号のデータサイズに決定し、
決定したデータサイズの誤り訂正符号を生成し、
生成した誤り訂正符号を前記記憶装置に書き込むように制御する
ことを特徴とする誤り訂正制御方法。
【請求項６】
記憶装置のデータ記憶領域に記憶されたデータの消去に要した時間をデータの消去の要求のたびに計測する計測部と、
前記計測部によって計測された時間が標準値より短い場合に予め設定された所定サイズを、前記計測された時間が前記標準値よりも長く所定値より短い場合に前記計測された時間と前記所定サイズに基づいて算出した値を、消去の対象のデータ記憶領域における誤り訂正符号のデータサイズに決定する決定部と、
前記決定部によって決定されたデータサイズの誤り訂正符号を生成する生成部と、
前記生成部によって生成された誤り訂正符号を前記記憶装置に書き込むように制御する書込み制御部と
を有することを特徴とするストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセス制御装置、誤り訂正制御方法およびストレージ装置に関する。
【背景技術】
【０００２】
従来、不揮発性の半導体メモリであるフラッシュメモリが利用されている。このようなフラッシュメモリを制御するコントローラでは、ページと呼ばれる複数ビット単位でデータの書き込みおよび読み出しを行い、複数のページからなるブロック単位でデータの消去を行う。
【０００３】
このようなコントローラは、データを消去するＥｒａｓｅ処理をブロック単位でフラッシュメモリに対して行う。そして、コントローラは、データを書き込む際に、データを消去されたブロックを検索し、検出された空きブロックに対して新たなデータを書き込んでいる。
【０００４】
また、コントローラは、誤ったデータが書き込まれていることを検出して正しいデータに訂正することができるＥＣＣ（Error  Correcting  Code：誤り訂正符号）を生成し、データとともにフラッシュメモリに記憶させる。ここで、コントローラによって生成されるＥＣＣのデータサイズは、初期設定で設定された固定値により決められる。
【０００５】
そして、コントローラは、フラッシュメモリからデータを読み出す場合には、フラッシュメモリからデータとともにＥＣＣを読出し、ＥＣＣを用いて、読み出したデータの誤りを検出し、正しいデータに訂正する処理を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１５２５５１号公報
【特許文献２】特開２００５−１９６６５８号公報
【特許文献３】特開２００４−２７２４７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、上記した従来の技術では、生成されたＥＣＣのデータサイズが一定であるので、フラッシュメモリに記憶されるデータの信頼性が低くなるという課題があった。つまり、フラッシュメモリでは、データの消去処理およびデータの書き込み処理を行うたびに、フラッシュメモリのセルが劣化していき、誤ったデータが書き込まれる可能性が高くなる。
【０００８】
このため、劣化したセルに記憶されたデータに対してＥＣＣのデータサイズが小さい場合には、適切にデータを訂正できず、フラッシュメモリに記憶されるデータの信頼性が低くなる。なお、ＥＣＣのデータサイズを一律大きくすることで、データの信頼性を向上させることも考えられる。しかし、ＥＣＣのデータサイズが大きくなれば、データの誤り検出処理およびデータの訂正処理に時間が掛かる。このため、劣化していないセルに記憶されたデータについても、データの誤り検出処理およびデータの訂正処理に時間が掛かってしまい、フラッシュメモリからのデータ読出し性能が低下してしまう。
【０００９】
一つの側面では、データの信頼性を高くするアクセス制御装置、誤り訂正制御方法およびストレージ装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
第一の案では、記憶装置のデータ記憶領域に記憶されたデータの消去に要した時間をデータの消去の要求のたびに計測し、計測された時間が標準値より短い場合に予め設定された所定サイズを、前記計測された時間が標準値よりも長く所定値より短い場合に計測された時間と所定サイズに基づいて算出した値を、消去の対象のデータ記憶領域における誤り訂正符号のデータサイズに決定する。そして、決定されたデータサイズの誤り訂正符号を生成し、生成された誤り訂正符号を記憶装置に書き込むように制御する。
【発明の効果】
【００１１】
データの信頼性を高くすることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラを含むＲＡＩＤ装置の構成を示すブロック図である。
【図２】図２は、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラの構成を示すブロック図である。
【図３】図３は、不良ＢＬＫ管理テーブルの一例を示す図である。
【図４】図４は、Ｅｒａｓｅ処理に要した時間とＥＣＣのデータサイズとの関係を示す図である。
【図５】図５は、ＮＡＮＤフラッシュのデータ構造の一例を示す図である。
【図６】図６は、ＥＣＣのデータサイズの一例を示す図である。
【図７】図７は、ＥＣＣのデータサイズの一例を示す図である。
【図８】図８は、不良ＢＬＫ管理テーブルの不良ＢＬＫコードとＮＡＮＤフラッシュのデータとの関係を示す図である。
【図９】図９は、不良ＢＬＫ管理テーブルの一例を示す図である。
【図１０】図１０は、ＥＣＣデータの書き込み位置を決定する処理を説明する図である。
【図１１】図１１は、ＥＣＣデータの読出し位置を決定する処理を説明する図である。
【図１２】図１２は、エラー訂正に用いられるＥＣＣについて説明する図である。
【図１３】図１３は、ＮＡＮＤ−ＦｌａｓｈメモリコントローラのＥｒａｓｅ処理を説明する図である。
【図１４】図１４は、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラの書き込み処理を説明する図である。
【図１５】図１５は、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラの読出し処理を説明する図である。
【図１６】図１６は、実施例１に係るＮＡＮＤ−ＦｌａｓｈメモリコントローラのＥｒａｓｅ処理の動作を示すフローチャートである。
【図１７】図１７は、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラの書き込み処理の動作を示すフローチャートである。
【図１８】図１８は、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラの読出し処理の動作を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明に係るアクセス制御装置、誤り訂正制御方法およびストレージ装置の実施例を詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１４】
以下の実施例では、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラの構成および処理の流れを順に説明し、最後に実施例１による効果を説明する。
【００１５】
［ＮＡＮＤ−Ｆｌａｓｈメモリコントローラの構成］
最初に、図１を用いて、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラを含むＲＡＩＤ（Redundant  Arrays  of  Independent（Inexpensive）Disks）装置の構成例を説明する。図１は、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラを含むＲＡＩＤ装置の構成を示すブロック図である。図１に示すように、ＲＡＩＤ装置１は、ＣＭ（Controller  Module）１００と、ＰＳＵ（Power  Supply  Unit）１０１と、ＨＤＤ（Hard  Disk  Drive）１０２ａ〜１０２ｚとを有する。
【００１６】
ＣＭ１００は、キャッシュメモリの管理や、ホストとのインターフェース制御や、各ＨＤＤ１０２ａ〜１０２ｚの制御を行う制御部である。また、ＣＭ１００は、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０と、ＮＡＮＤ−Ｆｌａｓｈメモリ２０と、ＲｏＣ（ＲＡＩＤ−ｏｎ−Ｃｈｉｐ）３０と、ＳＣＵ（Super  Capacitor  Unit）４０と、Ｅｘｐ（エキスパンダ）５０と、キャッシュメモリ６０とを有する。
【００１７】
ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、所定のプログラムによって制御される集積回路であるＦＰＧＡ（Field  Programmable  Gate  Array）であって、ＤＭＡ（Direct  Memory  Access）エンジンを有する。このＤＭＡとは、ＣＰＵ（Central  Processing  Unit）を介さずに装置とＲＡＭ（Random  Access  Memory）間でデータ転送を行う方式のことである。本実施例では、Ｅｒａｓｅに要した時間が長いページほど、大きいサイズのＥＣＣを作成することで、劣化したページほどデータサイズの大きいＥＣＣを作成する機能を付加したＤＭＡをＦＰＧＡであるＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０に搭載している。なお、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０の構成については、後に図２を用いて詳述する。
【００１８】
ＮＡＮＤ−Ｆｌａｓｈメモリ２０は、不揮発性の半導体メモリである。例えば、ＮＡＮＤ−Ｆｌａｓｈメモリ２０は、停電発生時において、揮発性のキャッシュメモリ６０上のデータを退避させるためのバックアップ用の記憶装置として機能する。
【００１９】
ＲｏＣ３０は、ＣＭ１００を全体制御する制御装置であり、キャッシュメモリ６０のバックアップ処理や、ホストとのインターフェース制御や、キャッシュメモリ６０の管理を行うファームウェアを有する処理部である。
【００２０】
ＳＣＵ４０は、大容量コンデンサであり、ＲＡＩＤ装置１００に停電が発生した際に、バッテリーフリーで、ＲｏＣ３０に電力を供給する。ＥＸＰ（エキスパンダ）５０は、ＲｏＣ３０とＨＤＤ１０２ａ〜ＨＤＤ１０２ｚとの間で送受信されるユーザデータを中継する処理部である。
【００２１】
キャッシュメモリ６０は、ＤＤＲ  ＳＤＲＡＭ（Double  Date  Rate  Synchronous  DRAM）などの揮発性メモリであり、例えば、キャッシュメモリ６０は、ＨＤＤに書き込むべきデータを一時的に記憶するものであり、停電等でＨＤＤに書き込めない場合に、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に書き込むべきデータを一時的に退避する。
【００２２】
ＰＳＵ（Power  Supply  Unit）１０１は、ＲＡＩＤ装置１００へ電力を供給する装置で、停電が発生した場合、ＲＡＩＤ装置１００への電力の供給を停止する。なお、上述したように、この場合、ＳＣＵ４０の放電により、ＲＡＩＤ装置１００へ電力が供給される。ＨＤＤ１０２ａ〜ＨＤＤ１０２ｚは、ＲＡＩＤグループを構成し、高速性や安全性のレベルに応じて、データが振り分けられており、ユーザデータの書込みやプログラムを記憶する記憶媒体（ディスク）等を有する。
【００２３】
次に、図２を用いて、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラの構成を説明する。図２は、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラの構成を示すブロック図である。図２に示すように、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、Ｉ／Ｆ制御部１１、ＮＡＮＤ制御部１２、不良ＢＬＫ管理テーブル記憶部１３、ＥＲＳ制御部１４ａ、ＤＭＡ書込み制御部１４ｂ、ＥＣＣ生成部１４ｃ、ＥＣＣバッファ１４ｄ、ＤＭＡ読出し制御部１４ｅおよびエラー訂正制御部１４ｆを有する。以下にこれらの各部の処理を説明する。
【００２４】
Ｉ／Ｆ制御部１１は、接続されるＲｏＣ３０との間でやり取りする各種情報に関する通信を制御する。例えば、Ｉ／Ｆ制御部１１は、データの書き込み要求を受信すると、ＤＭＡ書き込み制御部１４ｂに通知する。また、Ｉ／Ｆ制御部１１は、データの読出し要求をＲｏＣ３０から受信すると、ＤＭＡ読出し制御部１４ｅに通知する。また、Ｉ／Ｆ制御部１１は、ＮＡＮＤ−Ｆｌａｓｈメモリ２０から読み出されたデータをＤＭＡ読出し制御部１４ｅから受信し、ＲｏＣ３０に通知する。
【００２５】
ＮＡＮＤ制御部１２は、接続されるＮＡＮＤ−Ｆｌａｓｈメモリ２０に対するデータの書き込みおよび読出しを制御する。例えば、ＮＡＮＤ制御部１２は、ＤＭＡ書き込み制御部１４ｂから書き込み要求を受信すると、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に対して、データおよびＥＣＣの書き込み処理を行う。また、ＮＡＮＤ制御部１２は、ＤＭＡ読出し制御部１４ｅから読出し要求を受信すると、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に対して、データおよびＥＣＣの読出し処理を行う。
【００２６】
不良ＢＬＫ管理テーブル記憶部１３は、不良ブロックであるか否かを記憶する不良ＢＬＫ管理テーブルを記憶する。ここで「不良ブロック」とは、ＮＡＮＤ−Ｆｌａｓｈメモリ２０の消耗により、キャッシュデータの書き込みが規定時間内に完了しないブロックを示す。そして、不良ブロックは、データの書き込みブロックとして使用されない。例えば、不良ＢＬＫ管理テーブル記憶部１３は、図３に示すように、各ブロックに付与されたアドレスの値である「ＡＤＲ」、不良ブロックであるか否かを示す「不良ＢＬＫコード」、各ページに対するＥＣＣの拡張分データサイズを示す「ＥＣＣサイズ」を記憶する。図３は、不良ＢＬＫ管理テーブルの一例を示す図である。
【００２７】
不良ＢＬＫ管理テーブルにおいて、不良ＢＬＫコードが「０」である場合には、良好ブロックであることを示している。また、不良ＢＬＫ管理テーブルにおいて、不良ＢＬＫコードが「０」である場合には、該当するブロックに属する各ページのデータに対応するＥＣＣサイズが初期設定された値（以下、固定値という）である。このため、ＥＣＣの拡張分データサイズであるＥＣＣサイズが「０」と記憶される。なお、ＥＣＣサイズの固定値は、不良ＢＬＫ管理テーブル記憶部１３の所定の記憶領域に記憶されている。
【００２８】
また、不良ＢＬＫ管理テーブルにおいて、不良ＢＬＫコードが「１」である場合には、ＥＣＣサイズが可変長の良好ブロックであることを示している。ここで、良好ブロックとは、データの読み書きに使用できるブロックのことをいう。また、不良ＢＬＫ管理テーブルにおいて、不良ＢＬＫコードが「１」である場合には、該当するブロックに属する各ページのデータに対応するＥＣＣサイズが記憶されている。図３の例では、ＥＣＣサイズの項目に「ｘｘｘ」と記載されているが、実際にはバイト数の値がテーブルに記憶される。ここで、ＥＣＣサイズの項目に記憶されるバイト数は、固定値よりも拡張した分のＥＣＣのデータサイズを示している。つまり、ＥＣＣサイズの項目に「６４」バイトと記憶されている場合には、ＥＣＣのサイズは、固定値に６４バイト足した値となる。
【００２９】
また、不良ＢＬＫ管理テーブルにおいて、不良ＢＬＫコードが「２」である場合には、不良ブロックであることを示している。また、不良ＢＬＫ管理テーブルにおいて、不良ＢＬＫコードが「２」である場合には、該当するブロックに属する各ページのデータに対応するＥＣＣサイズが「ｎ／ａ（no  active）」となる。つまり、不良ＢＬＫコードが「２」である場合には、不良ブロックなので使用されない。なお、不良ＢＬＫコードおよびＥＣＣサイズがどのように決定されるかについては、ＥＲＳ制御部１４ａの説明で詳述する。
【００３０】
ＥＲＳ制御部１４ａは、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶されたデータを消去する処理であるＥｒａｓｅ処理を実施するように制御する。例えば、ＥＲＳ制御部１４ａは、ＲｏＣ３０からＥｒａｓｅ要求を受信すると、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶されたデータの消去を要求するＥＲＳ要求をＮＡＮＤ制御部１２に送信する。
【００３１】
また、ＥＲＳ制御部１４ａは、ＥＲＳ要求がＲｏＣ３０から通知されると、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶されたデータを消去するのに要した時間を計測し、計測された時間に応じて、誤り訂正符号のデータサイズを決定する。例えば、ＥＲＳ制御部１４ａは、データを消去するのに要した時間として、ＥＲＳ要求をＮＡＮＤ制御部１２に送信してから、Ｅｒａｓｅ処理が完了したことを示す完了応答をＮＡＮＤ制御部１２から受信するまでの時間を計測する。そして、ＥＲＳ制御部１４ａは、ＥＲＳ要求がＲｏＣ３０からＥＲＳ制御部１４ａに通知されるたびに、計測された時間に応じて、誤り訂正符号のデータサイズを決定する。
【００３２】
ここで、図４を用いて、計測された時間に応じて、誤り訂正符号のデータサイズを決定する処理について具体的に説明する。図４は、Ｅｒａｓｅ処理に要した時間とＥＣＣのデータサイズとの関係を示す図である。図４に示すように、Ｅｒａｓｅ処理に要した時間であるＥｒａｓｅ時間（図４では、「ｔＥＲＳ」と記載）が標準値（図４では、Ｔｙｐｉｃａｌ値）と同じである場合には、ＥＲＳ制御部１４ａは、ＥＣＣサイズを初期設定である「Ｎ」に決定する（図４では、「Ｄｅｆａｕｌｔ＝Ｎ」と記載）。また、Ｅｒａｓｅ時間が標準値よりも短い場合も、ＥＲＳ制御部１４ａは、ＥＣＣサイズを初期設定である「Ｎ」に決定する。
【００３３】
そして、Ｅｒａｓｅ時間が標準値と同じか標準値よりも短い場合には、ＥＲＳ制御部１４ａは、Ｅｒａｓｅ時間が標準値と同じか標準値よりも短かったブロックを良好ブロックとし、ＮＡＮＤ不良ＢＬＫ管理テーブルの不良ＢＬＫコードの項目に「０」を登録する。
ここで、Ｅｒａｓｅ時間の標準値は、例えば、初回Ｅｒａｓｅ時の値を用いてもよいし、ＮＡＮＤ−ｆｌａｓｈメモリ２０に標準値が格納されていてもよい。なお、フラッシュの交換等で標準値が変更になる。
【００３４】
また、Ｅｒａｓｅ時間が標準値よりも長く、かつ、標準値の２倍よりも短かった場合には、ＥＲＳ制御部１４ａは、「初期設定値Ｎ×（ｔＥＲＳ／Ｔｙｐｉｃａｌ値）」を算出し、算出した値をＥＣＣのデータサイズに決定する。その後、ＥＲＳ制御部１４ａは、決定したＥＣＣのデータサイズの値をＮＡＮＤ不良ＢＬＫ管理テーブルに記憶させる。つまり、Ｅｒａｓｅに要した時間が長いページほど、大きいサイズのＥＣＣを作成することで、劣化したページほどデータサイズの大きいＥＣＣを作成できる結果、フラッシュメモリ内のデータの信頼性を向上させることができる。
【００３５】
そして、Ｅｒａｓｅ時間が標準値よりも長く、かつ、標準値の２倍よりも短い場合には、ＥＲＳ制御部１４ａは、該当ブロックを良好ブロックとし、ＮＡＮＤ不良ＢＬＫ管理テーブルの不良ＢＬＫコードの項目に「１」を登録する。なお、Ｅｒａｓｅ時間が標準値の２倍以上である場合には、ＥＲＳ制御部１４ａは、Ｅｒａｓｅ時間が標準値の２倍以上かかったページを含むブロック全体を不良ブロックとし、ＮＡＮＤ不良ＢＬＫ管理テーブルの不良ＢＬＫコードの項目に「２」を登録する。これにより、Ｅｒａｓｅ時間が標準値の２倍以上かかったページを含むブロックが以後利用されないようにする。
【００３６】
ここで、図５の例を用いて、ＮＡＮＤフラッシュメモリ２０に記憶されるデータの構造について説明する。図５は、ＮＡＮＤフラッシュのデータ構造の一例を示す図である。図５に示すように、ＮＡＮＤフラッシュメモリ２０は、ページ０〜７のうち、ページ０〜６にデータを記憶し、ページ７にＥＣＣを記憶する。ページは、データを記憶するデータ領域を示し、ＮＡＮＤフラッシュメモリ２０のデータを記憶する分割単位を示すもので、このページごとに、データの書き込みおよび読出しが行われる。
【００３７】
ページ７には、ページ０〜６に記憶されたデータの誤りを検出し、正しいデータに訂正するためのＥＣＣが記憶されている。例えば、ページ７には、図５に例示するように、ＥＣＣ０、ＥＣＣ１・・・ＥＣＣ６という順に、ページ０〜６に記憶されたデータに対応するＥＣＣが記憶されている。また、ページ７に記憶された各ページ対応する各ＥＣＣのデータサイズは、それぞれデータのサイズが異なる場合がある。例えば、図６に示すように、ページ１に記憶されたデータ１のＥｒａｓｅ処理に要した時間が標準値よりも長くなった場合には、「ＥＣＣ１」のデータサイズが大きくなる。また、図７に例示するように、ページ１に記憶されたデータ１とともに、ページ５に記憶されたデータ５のＥｒａｓｅ処理に要した時間が標準値よりも長くなった場合には、「ＥＣＣ１」および「ＥＣＣ５」のデータサイズが大きくなる。図６および図７は、ＥＣＣのデータサイズの一例を示す図である。なお、ＥＣＣのデータサイズが拡張した場合にも、ＥＣＣを記憶できるように、記憶領域の容量に余裕をもたせているので、例えば、ＥＣＣ１のデータが大きくなった場合にも、「ＥＣＣ２」のデータが上書きされることはない。
【００３８】
このように、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ページ７においてＥＣＣのみを記憶させるので、ＥＣＣのデータサイズが変化した場合であっても、ＥＣＣの管理を容易にすることが可能である。また、上述しように、ページ７は、ＥＣＣのデータサイズが拡張した場合にもＥＣＣを記憶できるように、各ＥＣＣの記憶領域の容量に余裕をもたせておく。
【００３９】
ここで、図８を用いて、不良ＢＬＫ管理テーブルの不良ＢＬＫコードとＮＡＮＤフラッシュのデータとの関係を説明する。図８は、不良ＢＬＫ管理テーブルの不良ＢＬＫコードとＮＡＮＤフラッシュのデータとの関係を示す図である。図８左側に示すように、各ブロックのアドレスに対応付けて不良ＢＬＫコード「０」、「１」、「２」のいずれかの値が記憶されている。また、図８中央に示すように、ＮＡＮＤ−Ｆｌａｓｈメモリ２０は、複数のページＰａｇｅ００〜ＰａｇｅＮ７からなるブロック単位でデータを管理している。また、図８右側に示すように、ＮＡＮＤ−Ｆｌａｓｈメモリ２０は、Ｐａｇｅ０〜Ｐａｇｅ６にＤａｔａ０〜Ｄａｔａ６を記憶し、Ｐａｇｅ７にＤａｔａ０〜Ｄａｔａ６のＥＣＣが記憶されている。
【００４０】
そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、不良ＢＬＫコードが「２」であるブロックについては、不良ブロックであるので、該当ブロックを縮退させる。例えば、図８の例では、ＡＤＲ「３」のブロックの不良ＢＬＫコードが「２」であるので、ＡＤＲ「３」のブロックを縮退させ、以後記憶領域として利用しないようにする。
【００４１】
図２の説明に戻って、ＤＭＡ書込み制御部１４ｂは、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に対してデータの書き込み処理を行うように制御する。例えば、ＤＭＡ書込み制御部１４ｂは、ＲｏＣ３０から書き込み要求を受信するとともに書き込み対象のデータを受信すると、不良ＢＬＫ管理テーブルを読み出して、書き込み可能なブロックをサーチする。つまり、不良ＢＬＫ管理テーブルの不良ＢＬＫコードの項目が「０」または「１」である良好ブロックをサーチする。そして、ＤＭＡ書込み制御部１４ｂは、書き込み可能なブロックについて、不良ＢＬＫ管理テーブルから各ページのＥＣＣサイズを読み出す。
【００４２】
そして、ＤＭＡ書込み制御部１４ｂは、書き込み可能なブロックの各ページに対して、データの書き込み処理を行うように制御する。そして、ＤＭＡ書込み制御部１４ｂは、不良ＢＬＫ管理テーブルから読み出したＥＣＣのデータサイズに応じて、ＥＣＣデータのデータサイズを決定し、ＥＣＣ生成部１４ｃにＥＣＣを生成させる。つまり、不良ＢＬＫ管理テーブルの「ＥＣＣサイズ」の項目が「ａ」バイトであった場合には、初期設定の固定値に「ａ」バイトを加算した分のサイズでＥＣＣデータを生成させる。
【００４３】
そして、ＤＭＡ書込み制御部１４ｂは、ＥＣＣサイズを基に、ＥＣＣデータの書き込み位置を決定する。その後、ＤＭＡ書込み制御部１４ｂは、ＥＣＣデータをＮＡＮＤ−Ｆｌａｓｈメモリ２０に書き込む。ここで、図９および図１０を用いて、ＥＣＣデータの書き込み位置を決定する処理について説明する。図９は、不良ＢＬＫ管理テーブルの一例を示す図である。図１０は、ＥＣＣデータの書き込み位置を決定する処理を説明する図である。
【００４４】
図９に例示する不良ＢＬＫ管理テーブルは、ＡＤＲ「１」のブロックにおけるＰａｇｅ  ｘ１のＥＣＣサイズが「ａ」、Ｐａｇｅ  ｘ３のＥＣＣサイズが「ｂ」、Ｐａｇｅ  ｘ６のＥＣＣサイズが「ｃ」である。図１０では、図９に例示した不良ＢＬＫ管理テーブルの例を用いて、ＥＣＣデータの書き込み位置を決定する処理について説明する。図１０の（１）に示すように、ＤＭＡ書込み制御部１４ｂは、ライトポインタ１およびライトポインタ２を移動させて各データの書き込み位置を指定し、ＮＡＮＤ制御部１２に指定した位置でのデータの書き込みを処理させるように制御する。ライトポインタ１は、エリア１の書き込み位置を指定し、ライトポインタ２は、エリア２の書き込み位置を指定する。エリア１は、ページ７に記憶されたＥＣＣのうち（図５参照）、固定値のＥＣＣを記憶する領域を示す。また、エリア２は、ページ７に記憶されたＥＣＣのうち（図５参照）、拡張された分のＥＣＣを記憶する領域を示す。このように、各ＥＣＣを分けて管理し、各ＥＣＣサイズを可変長とすることで、ＥＣＣのデータサイズを一律大きくする場合と比較して、ＮＡＮＤ−Ｆｌａｓｈメモリ２０からのデータ読出し性能が向上する。つまり、劣化しているセルに記憶されたデータについては、ＥＣＣのデータサイズを大きくして、データの誤り検出処理およびデータの訂正処理に時間を掛ける。一方、劣化していないセルに記憶されたデータについては、ＥＣＣのデータサイズを小さくして、データの誤り検出処理およびデータの訂正処理に時間を掛けないようにすることで、ＮＡＮＤ−Ｆｌａｓｈメモリ２０からのデータ読出し性能が向上する。
【００４５】
そして、図１０の（２）に示すように、ＮＡＮＤ制御部１２は、ライトポインタ１によって指定されたエリア１の書き込み位置に固定値のＥＣＣ１を格納し、およびライトポインタ２によって指定されたエリア２の書き込み位置に、拡張されたＥＣＣ２を格納する。その後、ＤＭＡ書込み制御部１４ｂは、ライトポインタ１を固定値のサイズ分移動させ、また、ライトポインタ２を拡張されたＥＣＣのサイズ分移動させる。例えば、Ｐａｇｅｘ１のＥＣＣを書き込む場合には、ＮＡＮＤ制御部１２は、ライトポインタ１によって指定されたエリア１の書き込み位置に固定値のＥＣＣ１を格納し、ライトポインタ２によって指定されたエリア２の書き込み位置に、拡張されたＥＣＣ２を格納する。その後、ＤＭＡ書込み制御部１４ｂは、ライトポインタ１を固定値のサイズ分移動させ、また、ライトポインタ２を拡張されたＥＣＣのサイズ「ａ」バイト分移動させる。なお、拡張されたＥＣＣがさらに拡張された場合にも、上記と同様の処理を行う。
【００４６】
ＥＣＣ生成部１４ｃは、不良ＢＬＫ管理テーブルに記憶されたＥＣＣのデータサイズに応じて、ＥＣＣを生成する。具体的には、ＥＣＣ生成部１４ｃは、ＤＭＡ書込み制御部１４ｂからＥＣＣの生成指示とともに、ＥＣＣのデータサイズが指示され、指示されたデータサイズのＥＣＣを生成し、ＥＣＣバッファ１４ｄに記憶させる。
【００４７】
ＥＣＣバッファ１４ｄは、ＥＣＣを一時的に記憶する。具体的には、ＥＣＣバッファ１４ｄは、ＥＣＣ生成部１４ｃによって生成されたＥＣＣを記憶し、また、ＮＡＮＤ制御部１２によって読み出されたＥＣＣを記憶する。
【００４８】
ＤＭＡ読出し制御部１４ｅは、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に対して、データの読出し処理を行うように制御する。例えば、ＤＭＡ読出し制御部１４ｅは、ＲｏＣ３０から読み出し要求を受信すると、不良ＢＬＫ管理テーブルからＥＣＣサイズを読み出す。そして、ＤＭＡ読出し制御部１４ｅは、ＥＣＣサイズを基に、ＥＣＣバッファ１４ｄ上のＥＣＣデータの読出し位置を決定し、ＥＣＣデータをＮＡＮＤ−Ｆｌａｓｈメモリ２０から読み出すための読出し要求をＮＡＮＤ制御部１２に通知する。その後、ＤＭＡ読出し制御部１４ｅは、エラー訂正制御部１４ｆによってエラー訂正されたデータをＥＣＣバッファ１４ｄから取得し、ＲｏＣ３０に送信する。
【００４９】
ここで、図９および図１１を用いて、ＥＣＣデータの読出し位置を決定する処理について説明する。図１１は、ＥＣＣデータの読出し位置を決定する処理を説明する図である。図９に例示する不良ＢＬＫ管理テーブルは、前述しようたように、ＡＤＲ「１」のブロックにおけるＰａｇｅ  ｘ１のＥＣＣサイズが「ａ」、Ｐａｇｅ  ｘ３のＥＣＣサイズが「ｂ」、Ｐａｇｅ  ｘ６のＥＣＣサイズが「ｃ」である。
【００５０】
図１１では、図９に例示した不良ＢＬＫ管理テーブルの例を用いて、ＥＣＣデータの読出し位置を決定する処理について説明する。図１１の（１）に示すように、ＤＭＡ読出し制御部１４ｅは、リードポインタ１およびリードポインタ２を移動させて各データの読出し位置を指定し、ＮＡＮＤ制御部１２に指定した位置でのデータの読出しを処理させるように制御する。ライトポイント１は、エリア１の読出し位置を指定し、ライトポインタ２は、エリア２の読出し位置を指定する。エリア１は、ページ７に記憶されたＥＣＣのうち（図５参照）、固定値のＥＣＣを記憶する領域を示す。また、エリア２は、ページ７に記憶されたＥＣＣのうち（図５参照）、拡張された分のＥＣＣを記憶する領域を示す。
【００５１】
そして、図１１の（２）に示すように、ＤＭＡ読出し制御部１４ｅは、リードポインタ１によって指定されたエリア１の読出し位置から固定値のＥＣＣ１を読出し、リードポインタ２によって指定されたエリア２の読出し位置から拡張されたＥＣＣ２を読出す。その後、ＤＭＡ読出し制御部１４ｅは、リードポインタ１を固定値のサイズ分移動させ、また、リードポインタ２を拡張されたＥＣＣのサイズ分移動させる。例えば、Ｐａｇｅｘ１のＥＣＣを読出し場合には、ＮＡＮＤ制御部１２は、リードポインタ１によって指定されたエリア１の読出し位置から固定値のＥＣＣ１を読み出し、ライトポインタ２によって指定されたエリア２の読出し位置から拡張されたＥＣＣ２を読出す。その後、ＤＭＡ読出し制御部１４ｅは、ライトポインタ１を固定値のサイズ分移動させ、また、ライトポインタ２を拡張されたＥＣＣのサイズ「ａ」バイト分移動させる。
【００５２】
図２の説明に戻って、エラー訂正制御部１４ｆは、各ページについて、データの読出し処理をＮＡＮＤ−Ｆｌａｓｈメモリ２０に対して行い、ＥＣＣを用いてエラー訂正処理を行う。具体的には、エラー訂正制御部１４ｆは、ＮＡＮＤ制御部１２によって読み出されたデータおよびＥＣＣを受信し、ＥＣＣを用いて、読み出したデータの誤りを検出し、正しいデータに訂正する処理を行う。
【００５３】
ここで、図１２を用いて、エラー訂正符号について、説明する。図１２は、エラー訂正に用いられるＥＣＣについて説明する図である。図１２に例示するように、ＮＡＮＤ−Ｆｌａｓｈメモリ２０のエラー訂正にＲｅｅｄ−Ｓｏｌｏｍｏｎ符号等の線形巡回ブロック符号が用いられる。そして、Ｒｅｅｄ−Ｓｏｌｏｍｏｎ符号は、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶されるデータ（図１２の例では、情報シンボルと記載）とＥＣＣであるエラー訂正符号（図１２の例では、チェックシンボルと記載）とを有する。
【００５４】
そして、Ｒｅｅｄ−Ｓｏｌｏｍｏｎ符号のエラー訂正能力はチェックシンボルのサイズによって決まる。具体的には、エラーのシンボル数がチェックシンボル数の１／２である場合には、そのエラーシンボルを正しいデータに復元する事が出来る。つまり、チェックシンボル数を増やすと、そのシステムのエラー訂正能力が増大し、データの信頼度が向上する。
【００５５】
次に、図１３〜図１５を用いて、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０によるＥｒａｓｅ処理、書込み処理および読出し処理を説明する。図１３は、ＮＡＮＤ−ＦｌａｓｈメモリコントローラのＥｒａｓｅ処理を説明する図である。図１４は、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラの書き込み処理を説明する図である。図１５は、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラの読出し処理を説明する図である
【００５６】
図１３に示すように、ＥＲＳ制御部１４ａは、ＲｏＣ３０からＥｒａｓｅ要求を受信すると、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶されたデータの消去を要求するＥＲＳ要求をＮＡＮＤ制御部１２に送信する（ステップＳ１０１）。
【００５７】
そして、ＥＲＳ制御部１４ａは、Ｅｒａｓｅ処理が完了したことを示す完了応答をＮＡＮＤ制御部１２から受信する（ステップＳ１０２）。ここで、ＥＲＳ制御部１４ａは、データを消去するのに要した時間として、ＥＲＳ要求をＮＡＮＤ制御部１２に送信してから、Ｅｒａｓｅ処理が完了したことを示す完了応答をＮＡＮＤ制御部１２から受信するまでの時間を計測する。そして、ＥＲＳ制御部１４ａは、計測された時間に応じて、誤り訂正符号のデータサイズを決定するとともに、書込み可能な良好ブロックであるか書込み不可な不良ブロックであるかを不良ＢＬＫ管理テーブルに登録する。
【００５８】
次に、図１４を用いて、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラの書き込み処理を説明する。図１４に示すように、ＤＭＡ書込み制御部１４ｂは、ＲｏＣ３０から書き込み要求を受信するとともに書き込み対象のデータを受信すると、不良ＢＬＫ管理テーブルを読み出して、書き込み可能なブロックをサーチする（ステップＳ２０１）。つまり、不良ＢＬＫ管理テーブルの不良ＢＬＫコードの項目が「０」または「１」である良好ブロックをサーチする。そして、ＤＭＡ書込み制御部１４ｂは、書き込み可能なブロックについて、不良ＢＬＫ管理テーブルから各ページのＥＣＣサイズを読み出す（ステップＳ２０２）。
【００５９】
そして、ＤＭＡ書込み制御部１４ｂは、書き込み可能なブロックのＰａｇｅ＃０〜＃６に対して、データの書き込み処理を行うように制御する（ステップＳ２０３ａ〜Ｓ２０３ｇ）。そして、ＤＭＡ書込み制御部１４ｂは、不良ＢＬＫ管理テーブルから読み出したＥＣＣのデータサイズからＥＣＣデータのデータサイズを決定し、ＥＣＣ生成部１４ｃにＥＣＣの生成を指示する（ステップＳ２０４ａ〜Ｓ２０４ｇ）。つまり、不良ＢＬＫ管理テーブルの「ＥＣＣサイズ」の項目が「ａ」バイトであった場合には、初期設定の固定値に「ａ」バイトを加算した分のサイズでＥＣＣデータを生成させる。
【００６０】
そして、ＤＭＡ書込み制御部１４ｂは、ＥＣＣサイズを基に、ＥＣＣデータの書き込み位置を決定し、ＥＣＣデータをＮＡＮＤ−Ｆｌａｓｈメモリ２０に書込み要求を送信する（ステップＳ２０５）。これにより、Ｅｒａｓｅに要した時間が長いページほど、大きいサイズのＥＣＣを作成することで、劣化したページほどデータサイズの大きいＥＣＣを作成できる結果、フラッシュメモリ内のデータの信頼性を向上させることができる。
【００６１】
次に、図１５を用いて、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラの読出し処理を説明する。図１５に示すように、ＤＭＡ読出し制御部１４ｅは、ＲｏＣ３０から読み出し要求を受信すると、不良ＢＬＫ管理テーブルからＥＣＣサイズを読み出す（ステップＳ３０１、Ｓ３０２）。そして、ＤＭＡ読出し制御部１４ｅは、ＥＣＣサイズを基に、ＥＣＣデータの読出し位置を決定し、ＥＣＣをＮＡＮＤ−Ｆｌａｓｈメモリ２０から読み出すための読出し要求をＮＡＮＤ制御部１２に通知する（ステップＳ３０３）。その後、ＤＭＡ読出し制御部１４ｅは、ＥＣＣデータを取得し（ステップＳ３０４）、エラー訂正制御部１４ｆに通知する（図示せず）。
【００６２】
そして、ＤＭＡ読出し制御部１４ｅは、読出し対象のＰａｇｅ＃０〜＃６について、データをＮＡＮＤ−Ｆｌａｓｈメモリ２０から読み出すための読出し要求をＮＡＮＤ制御部１２に通知する（ステップＳ３０５ａ〜Ｓ３０５ｇ）。続いて、エラー訂正制御部１４ｆは、Ｐａｇｅ＃０〜＃６について、ＮＡＮＤ制御部１２によって読み出されたデータおよびＥＣＣを受信し（ステップＳ３０６ａ〜Ｓ３０６ｇ）、ＥＣＣを用いて、読み出したデータの誤りを検出し、正しいデータに訂正する処理を行う。その後、ＤＭＡ読出し制御部１４ｅは、Ｐａｇｅ＃０〜＃６について、エラー訂正制御部１４ｆによってエラー訂正されたデータをＥＣＣバッファ１４ｄから受信し（ステップＳ３０７ａ〜Ｓ３０７ｇ）、ＲｏＣ３０に送信する。
【００６３】
［ＮＡＮＤ−Ｆｌａｓｈメモリコントローラによる処理］
次に、図１６〜図１８を用いて、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０による処理を説明する。図１６は、実施例１に係るＮＡＮＤ−ＦｌａｓｈメモリコントローラのＥｒａｓｅ処理の動作を示すフローチャートである。図１７は、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラの書き込み処理の動作を示すフローチャートである。図１８は、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラの読出し処理の動作を示すフローチャートである。
【００６４】
まず、図１６を用いて、実施例１に係るＮＡＮＤ−ＦｌａｓｈメモリコントローラのＥｒａｓｅ処理について説明する。図１６に示すように、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＲｏＣ３０からＥｒａｓｅ要求を受信すると（ステップＳ４０１肯定）、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に対するＥｒａｓｅ処理を行う（ステップＳ４０２）。
【００６５】
そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、Ｅｒａｓｅ処理に要した時間を計測し（ステップＳ４０３）、Ｅｒａｓｅ処理に要した時間からＥＣＣサイズを決定する（ステップＳ４０４）。そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＥＣＣサイズをＮＡＮＤ不良ＢＬＫ管理テーブルに登録する（ステップＳ４０５）。
【００６６】
次に、図１７を用いて、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０の書き込み処理について説明する。図１７に示すように、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＲｏＣ３０から書き込み要求を受信すると（ステップＳ５０１肯定）、不良ＢＬＫ管理テーブルからＥＣＣサイズを読み出す（ステップＳ５０２）。そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、各ページについて、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に対するデータ書き込み処理を行う（ステップＳ５０３）。
【００６７】
そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、不良ＢＬＫ管理テーブルから読み出したＥＣＣサイズに応じて、ＥＣＣデータを生成する（ステップＳ５０４）。つまり、不良ＢＬＫ管理テーブルの「ＥＣＣサイズ」の項目に記憶されたサイズ分を拡張したＥＣＣデータを生成する。そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＥＣＣサイズを基に、ＥＣＣデータの書き込み位置を決定する（ステップＳ５０５）。その後、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＥＣＣデータをＮＡＮＤ−Ｆｌａｓｈメモリ２０に書き込む（ステップＳ５０６）。
【００６８】
次に、図１８を用いて、実施例１に係るＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０の読出し処理について説明する。図１８に示すように、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＲｏＣ３０から読み出し要求を受信すると（ステップＳ６０１肯定）、不良ＢＬＫ管理テーブルからＥＣＣサイズを読み出す（ステップＳ６０２）。
【００６９】
そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＥＣＣサイズを基に、ＥＣＣデータの読出し位置を決定し（ステップＳ６０３）、ＥＣＣデータをＮＡＮＤ−Ｆｌａｓｈメモリ２０から読み出す（ステップＳ６０４）。続いて、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、各ページについて、データの読出し処理をＮＡＮＤ−Ｆｌａｓｈメモリ２０に対して行い（ステップＳ６０５）、ＥＣＣを用いてエラー訂正処理を行う（ステップＳ６０６）。
【００７０】
[実施例１の効果]
上述してきたように、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶されたデータの消去に要した時間を計測し、計測された時間に応じて、誤り訂正符号のデータサイズを決定する。そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、決定されたデータサイズの誤り訂正符号を生成し、生成された誤り訂正符号をＮＡＮＤ−Ｆｌａｓｈメモリ２０に書き込むように制御する。このため、データの信頼性を向上させることが可能である。
【００７１】
つまり、Ｅｒａｓｅに要した時間が長いページほど、大きいサイズのＥＣＣを作成することで、劣化したページほどデータサイズの大きいＥＣＣを作成できる結果、フラッシュメモリ内のデータの信頼性を向上させることができる。
【００７２】
また、実施例１によれば、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、決定された誤り訂正符号のデータサイズを記憶する不良ＢＬＫ管理テーブル記憶部１３を有する。ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶されたデータを書き込む際に、不良ＢＬＫ管理テーブル記憶部１３から誤り訂正符号のデータサイズを読出す。そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、誤り訂正符号のデータサイズに応じて、生成された誤り訂正符号の書込み位置を決定し、書込み位置に誤り訂正符号を書き込むように制御する。このため、誤り訂正符号のデータサイズが変化した場合であっても、誤り訂正符号をＮＡＮＤ−Ｆｌａｓｈメモリ２０に適切に書き込むことが可能である。
【００７３】
また、実施例１によれば、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、決定された誤り訂正符号のデータサイズを記憶する不良ＢＬＫ管理テーブル記憶部１３を有する。そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶されたデータを読出す際に、不良ＢＬＫ管理テーブル記憶部１３から誤り訂正符号のデータサイズを読出す。そして、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、誤り訂正符号のデータサイズに応じて、ＮＡＮＤ−Ｆｌａｓｈメモリ２０に記憶された誤り訂正符号の読出し位置を決定し、読出し位置から誤り訂正符号を読出すように制御する。このため、誤り訂正符号のデータサイズが変化した場合であっても、誤り訂正符号をＮＡＮＤ−Ｆｌａｓｈメモリ２０から適切に読み出すことが可能である。
【００７４】
また、実施例１によれば、ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ１０は、ＮＡＮＤ−Ｆｌａｓｈメモリ２０におけるデータを記憶しているページと異なるページに誤り訂正符号を書き込むように制御する。このため、同一ページ上で誤り訂正符号のみを管理することができ、誤り訂正符号のデータサイズが変化した場合であっても、誤り訂正符号の管理を容易にすることが可能である。
【実施例２】
【００７５】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【００７６】
（１）システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ＤＭＡ書込み制御部１４ｂとＥＣＣ生成部１４ｃを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００７７】
（２）プログラム
なお、本実施例で説明した誤り訂正制御方法は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【００７８】
１０  ＮＡＮＤ−Ｆｌａｓｈメモリコントローラ
１１  Ｉ／Ｆ制御部
１２  ＮＡＮＤ制御部
１３  不良ＢＬＫ管理テーブル記憶部
１４  ＤＭＡエンジン
１４ａ  ＥＲＳ制御部
１４ｂ  ＤＭＡ書込み制御部
１４ｃ  ＥＣＣ生成部
１４ｄ  ＥＣＣバッファ
１４ｅ  ＤＭＡ読出し制御部
１４ｆ  エラー訂正制御部
２０  ＮＡＮＤ−Ｆｌａｓｈメモリ
３０  ＲｏＣ
４０  ＳＣＵ
５０  Ｅｘｐ
６０  キャッシュメモリ
１０１  ＰＳＵ
１０２ａ〜１０２ｚ  ＨＤＤ
【図１】
0005720210.tif 000002
【図２】
0005720210.tif 000003
【図３】
0005720210.tif 000004
【図４】
0005720210.tif 000005
【図５】
0005720210.tif 000006
【図６】
0005720210.tif 000007
【図７】
0005720210.tif 000008
【図８】
0005720210.tif 000009
【図９】
0005720210.tif 000010
【図１０】
0005720210.tif 000011
【図１１】
0005720210.tif 000012
【図１２】
0005720210.tif 000013
【図１３】
0005720210.tif 000014
【図１４】
0005720210.tif 000015
【図１５】
0005720210.tif 000016
【図１６】
0005720210.tif 000017
【図１７】
0005720210.tif 000018
【図１８】
0005720210.tif 000019