(57)【要約】【課題】システムデータをフラッシュメモリ内に保存するフラッシュメモリシステムにおいて、ホストシステム側から与えられるユーザーデータに含まれるファイル管理データの信頼性を向上させる。【解決手段】予め予約されている物理ブロック（システムブロック）にシステムデータを保存するフラッシュメモリシステムにおいて、フラッシュメモリシステム内のメモリコントローラが、いずれかの論理ブロックに対して空きブロックを割り当てるときに、空きブロックを検出することができなかった場合に、その論理ブロックが所定の論理ブロックに該当するか否かを判断する。そして、メモリコントローラは、その論理ブロックが所定の論理ブロックに該当すると判断したときだけ、その論理ブロックに対して有効なシステムデータが記憶されていないシステムブロックを割り当てる。【選択図】図２
2010026878.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムから与えられるアクセス指示に従って、物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
前記フラッシュメモリ内の物理ブロックを、前記フラッシュメモリに対するアクセスを制御又は管理するためのシステムデータの保存先として使用するシステムブロックとして予約する予約手段と、
前記予約手段により予約された前記システムブロックに対して前記システムデータを書き込むシステムデータ書き込み手段と、
前記システムブロックとして予約されていない前記フラッシュメモリ内の物理ブロックであって、有効なデータが記憶されていない空きブロックを検索する空きブロック検索手段と、
前記アクセス指示により指定される論理アドレスが割り当てられているセクタ単位の領域が複数個含まれる論理ブロックに対して、前記空きブロック検索手段により検出された前記空きブロックを割り当てる物理ブロック割り当て手段と、
前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックと対応する物理ブロックに、前記アクセス指示と共に与えられるデータを書き込むデータ書き込み手段と、
前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックが、所定の前記論理ブロックに該当するか否かを判断する判断手段と、
を備え、
前記物理ブロック割り当て手段は、いずれかの前記論理ブロックに対して前記空きブロックを割り当てるときに、前記空きブロック検索手段が前記空きブロックを検出することができなかった場合、前記判断手段が前記いずれかの前記論理ブロックが前記所定の前記論理ブロックに該当すると判断したときにだけ、前記いずれかの前記論理ブロックに対して、有効な前記システムデータが記憶されていない前記システムブロックを割り当てる
ことを特徴とするメモリコントローラ。
【請求項２】
前記ホストシステムから与えられる設定情報に基づいて前記所定の前記論理ブロックを設定する第１の設定手段を備え、
前記設定情報には、前記論理アドレスの範囲を指定する情報が含まれ、
前記第１の設定手段は、前記設定情報に含まれる前記論理アドレスの範囲が属する前記論理ブロックを前記所定の前記論理ブロックとして設定する
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
それぞれの前記論理ブロック内の領域に対する、所定セクタ数より少ない容量の領域を指定したデータの書き込みが、前記アクセス指示により指示される回数に基づいて、前記所定の前記論理ブロックを設定する第２の設定手段を備え、
前記第２の設定手段は、前記回数が所定回数以上の前記論理ブロックを前記所定の前記論理ブロックとして設定する
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項４】
前記フラッシュメモリが複数個あり、
前記アクセス指示で指定されるアドレスが割り当てられているセクタ単位の領域が複数個含まれる論理ブロックと、異なる前記フラッシュメモリに含まれるアドレスが同一の物理ブロックを複数個集めた物理ブロック群との対応関係を管理するブロック管理手段、
を更に備え、
前記データ書き込み手段が、前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックと対応する前記物理ブロック群に、前記アクセス指示と共に与えられるデータを書き込み、
前記予約手段は、不良ブロックが含まれる前記物理ブロック群内の良品ブロックを、不良ブロックが含まれていない前記物理ブロック群内の物理ブロックよりも優先的に前記システムブロックとして予約する、
ことを特徴とする請求項１乃至３のうちのいずれか１項に記載のメモリコントローラ。
【請求項５】
請求項１乃至４のうちのいずれか１項に記載のメモリコントローラと、
前記メモリコントローラによってアクセス制御されるフラッシュメモリと、
を備えるフラッシュメモリシステム。
【請求項６】
ホストシステムから与えられるアクセス指示に従って、物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
前記フラッシュメモリ内の物理ブロックを、前記フラッシュメモリに対するアクセスを制御又は管理するためのシステムデータの保存先として使用するシステムブロックとして予約する予約ステップと、
前記予約ステップにより予約された前記システムブロックに対して前記システムデータを書き込むシステムデータ書き込みステップと、
前記システムブロックとして予約されていない前記フラッシュメモリ内の物理ブロックであって、有効なデータが記憶されていない空きブロックを検索する空きブロック検索ステップと、
前記アクセス指示により指定される論理アドレスが割り当てられているセクタ単位の領域が複数個含まれる論理ブロックに対して、前記空きブロック検索ステップにより検出された前記空きブロックを割り当てる物理ブロック割り当てステップと、
前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックと対応する物理ブロックに、前記アクセス指示と共に与えられるデータを書き込むデータ書き込みステップと、
前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックが、所定の前記論理ブロックに該当するか否かを判断する判断ステップと、
を備え、
前記物理ブロック割り当てステップでは、いずれかの前記論理ブロックに対して前記空きブロックを割り当てるときに、前記空きブロック検索ステップにより前記空きブロックを検出することができなかった場合、前記判断ステップにより前記いずれかの前記論理ブロックが前記所定の前記論理ブロックに該当すると判断されたときにだけ、前記いずれかの前記論理ブロックに対して、有効な前記システムデータが記憶されていない前記システムブロックが割り当てられる
ことを特徴とするフラッシュメモリの制御方法。
【請求項７】
前記ホストシステムから与えられる設定情報に基づいて前記所定の前記論理ブロックを設定する第１の設定ステップを備え、
前記設定情報には、前記論理アドレスの範囲を指定する情報が含まれ、
前記第１の設定ステップでは、前記設定情報に含まれる前記論理アドレスの範囲が属する前記論理ブロックが前記所定の前記論理ブロックとして設定される
ことを特徴とする請求項６に記載のフラッシュメモリの制御方法。
【請求項８】
それぞれの前記論理ブロック内の領域に対する、所定セクタ数より少ない容量の領域を指定したデータの書き込みが、前記アクセス指示により指示される回数に基づいて、前記所定の前記論理ブロックを設定する第２の設定ステップを備え、
前記第２の設定ステップでは、前記回数が所定回数以上の前記論理ブロックが前記所定の前記論理ブロックとして設定される
ことを特徴とする請求項６に記載のフラッシュメモリの制御方法。
【請求項９】
前記フラッシュメモリが複数個あり、
前記アクセス指示で指定されるアドレスが割り当てられているセクタ単位の領域が複数個含まれる論理ブロックと、異なる前記フラッシュメモリに含まれるアドレスが同一の物理ブロックを複数個集めた物理ブロック群との対応関係を管理するブロック管理ステップ、
を更に備え、
前記データ書き込みステップでは、前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックと対応する前記物理ブロック群に、前記アクセス指示と共に与えられるデータが書き込まれ、
前記予約ステップでは、不良ブロックが含まれる前記物理ブロック群内の良品ブロックが、不良ブロックが含まれていない前記物理ブロック群内の物理ブロックよりも優先的に前記システムブロックとして予約される、
ことを特徴とする請求項６乃至８のうちのいずれか１項に記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
フラッシュメモリを記憶媒体として用いた記憶装置では、特許文献１に記載されているように、ホストシステムから与えられるユーザーデータの他に、アドレス変換テーブルのような、記憶データを管理するための管理情報が、フラッシュメモリに書き込まれる。従って、このような管理情報を保存するための領域が、フラッシュメモリ内に確保される。
【０００３】
【特許文献１】特開２００１−１４２７７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
フラッシュメモリを記憶媒体として用いたフラッシュメモリシステムでは、管理情報の保存先の領域を、フラッシュメモリ内に適宜設定することができる。従って、管理情報の保存先の物理ブロックを固定せずに、任意の物理ブロックを管理情報の保存先として使用したり、ユーザーデータの保存先として使用したりするようにしてもよい。しかしながら、このように管理情報の保存先の物理ブロックを固定しなかった場合、管理情報の保存先の管理が煩雑になる。
【０００５】
従って、フラッシュメモリシステムでは、管理情報の保存先として使用する物理ブロックを予約しておき、その物理ブロックに管理情報が保存される場合が多い。又、フラッシュメモリに対するアクセスを制御するためのファームウェアを、そのフラッシュメモリ内に保存するような場合も、その保存先の物理ブロックを予約しておくことが好ましい。
【０００６】
管理情報やファームウェア等のシステムデータの保存先として使用する物理ブロックの予約は、フォーマット（初期化）の際に行われる。予約された物理ブロックには、システムデータだけが保存されるため、予約された物理ブロックがシステムデータの保存先として使用されていない場合（予約された物理ブロックに有効なシステムデータが保存されていない場合）であっても、ユーザーデータの保存先として使用されない。従って、このようなフラッシュメモリシステムでは、ユーザーデータの保存先の物理ブロックを確保することができないような場合であっても、システムデータの保存先として予約された物理ブロックにユーザーデータを保存しない。
【０００７】
フラッシュメモリシステムでは、ホストシステムから与えられる論理アドレスに基づいてユーザーデータの書き込み又は読み出しが行われる。フラッシュメモリシステムは、このユーザーデータの書き込み又は読み出しを制御するときにシステムデータを使用する。例えば、ユーザーデータに関連付けられている論理アドレスと、そのユーザーデータが保存されているフラッシュメモリ内の物理アドレスとの対応関係は、システムデータによって管理されている。
【０００８】
ホストシステムから与えられるユーザーデータには、ファイルデータとそのファイルデータを管理するための情報（以下、「ファイル管理データ」と言う）が含まれている。従って、フラッシュメモリシステムには、ファイルデータだけでなく、ファイル管理データも保存される。ファイルデータは、通常、ＦＡＴ（File Allocation Table）ファイルシステム・ＮＴファイルシステム等のファイルシステムで管理されているので、例えば、ＦＡＴファイルシステムの場合には、ルートディレクトリを含む情報や、ファイルが使用するクラスタの番号等がファイル管理データとして保存され、ＮＴファイルシステムの場合には、ファイル名やインデックス等がファイル管理データとして保存される。
【０００９】
このように、システムデータは、ファイルデータ及びファイル管理データを含むユーザーデータをフラッシュメモリに書き込んだり、フラッシュメモリから読み出したりするときにフラッシュメモリシステム内で使用される。一方、ユーザーデータに含まれるファイル管理データは、ユーザーデータに含まれるファイルデータを管理するためにホストシステム側で使用される。
【００１０】
従って、システムデータが破損又は消失した場合には、ホストシステム側からファイルデータ及びファイル管理データを含むユーザーデータを読み出すことができなくなってしまうことがある。また、システムデータが正常に保存されていても、ファイル管理データが破損又は消失した場合には、ホストシステム側でのファイルデータの管理に支障が生じる。これらを考慮すれ、フラッシュメモリシステム内では、システムデータと同様にファイル管理データの信頼性を向上させる必要がある。
【００１１】
そこで、本発明は、システムデータをフラッシュメモリ内に保存するフラッシュメモリシステムにおいて、ホストシステム側から与えられるユーザーデータに含まれるファイル管理データの信頼性を向上させることのできるフラッシュメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の第一の観点に従うメモリコントローラは、ホストシステムから与えられるアクセス指示に従って、物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
前記フラッシュメモリ内の物理ブロックを、前記フラッシュメモリに対するアクセスを制御又は管理するためのシステムデータの保存先として使用するシステムブロックとして予約する予約手段と、
前記予約手段により予約された前記システムブロックに対して前記システムデータを書き込むシステムデータ書き込み手段と、
前記システムブロックとして予約されていない前記フラッシュメモリ内の物理ブロックであって、有効なデータが記憶されていない空きブロックを検索する空きブロック検索手段と、
前記アクセス指示により指定される論理アドレスが割り当てられているセクタ単位の領域が複数個含まれる論理ブロックに対して、前記空きブロック検索手段により検出された前記空きブロックを割り当てる物理ブロック割り当て手段と、
前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックと対応する物理ブロックに、前記アクセス指示と共に与えられるデータを書き込むデータ書き込み手段と、
前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックが、所定の前記論理ブロックに該当するか否かを判断する判断手段と、
を備え、
前記物理ブロック割り当て手段は、いずれかの前記論理ブロックに対して前記空きブロックを割り当てるときに、前記空きブロック検索手段が前記空きブロックを検出することができなかった場合、前記判断手段が前記いずれかの前記論理ブロックが前記所定の前記論理ブロックに該当すると判断したときにだけ、前記いずれかの前記論理ブロックに対して、有効な前記システムデータが記憶されていない前記システムブロックを割り当てる。
【００１３】
好適な実施形態では、前記ホストシステムから与えられる設定情報に基づいて前記所定の前記論理ブロックを設定する第１の設定手段が備えられる。前記設定情報には、前記論理アドレスの範囲を指定する情報が含まれる。前記第１の設定手段は、前記設定情報に含まれる前記論理アドレスの範囲が属する前記論理ブロックを前記所定の前記論理ブロックとして設定する。
【００１４】
好適な実施形態では、第２の設定手段が備えられる。前記第２の設定手段は、それぞれの前記論理ブロック内の領域に対する、所定セクタ数より少ない容量の領域を指定したデータの書き込みが、前記アクセス指示により指示される回数に基づいて、前記所定の前記論理ブロックを設定する。前記第２の設定手段は、前記回数が所定回数以上の前記論理ブロックを前記所定の前記論理ブロックとして設定する。
【００１５】
好適な実施形態では、前記フラッシュメモリが複数個ある。前記アクセス指示で指定されるアドレスが割り当てられているセクタ単位の領域が複数個含まれる論理ブロックと、異なる前記フラッシュメモリに含まれるアドレスが同一の物理ブロックを複数個集めた物理ブロック群との対応関係を管理するブロック管理手段が更に備えられる。前記データ書き込み手段が、前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックと対応する前記物理ブロック群に、前記アクセス指示と共に与えられるデータを書き込む。前記予約手段は、不良ブロックが含まれる前記物理ブロック群内の良品ブロックを、不良ブロックが含まれていない前記物理ブロック群内の物理ブロックよりも優先的に前記システムブロックとして予約する。
【００１６】
本発明の第二の観点に従うフラッシュメモリシステムは、前述した第一の観点及び複数の実施形態のうちのいずれかのメモリコントローラと、前記メモリコントローラによってアクセス制御されるフラッシュメモリとを備える。
【００１７】
本発明の第三の観点に従う方法は、ホストシステムから与えられるアクセス指示に従って、物理ブロック単位で消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
前記フラッシュメモリ内の物理ブロックを、前記フラッシュメモリに対するアクセスを制御又は管理するためのシステムデータの保存先として使用するシステムブロックとして予約する予約ステップと、
前記予約ステップにより予約された前記システムブロックに対して前記システムデータを書き込むシステムデータ書き込みステップと、
前記システムブロックとして予約されていない前記フラッシュメモリ内の物理ブロックであって、有効なデータが記憶されていない空きブロックを検索する空きブロック検索ステップと、
前記アクセス指示により指定される論理アドレスが割り当てられているセクタ単位の領域が複数個含まれる論理ブロックに対して、前記空きブロック検索ステップにより検出された前記空きブロックを割り当てる物理ブロック割り当てステップと、
前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックと対応する物理ブロックに、前記アクセス指示と共に与えられるデータを書き込むデータ書き込みステップと、
前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックが、所定の前記論理ブロックに該当するか否かを判断する判断ステップと、
を備える。前記物理ブロック割り当てステップでは、いずれかの前記論理ブロックに対して前記空きブロックを割り当てるときに、前記空きブロック検索ステップにより前記空きブロックを検出することができなかった場合、前記判断ステップにより前記いずれかの前記論理ブロックが前記所定の前記論理ブロックに該当すると判断されたときにだけ、前記いずれかの前記論理ブロックに対して、有効な前記システムデータが記憶されていない前記システムブロックが割り当てられる。
【００１８】
好適な実施形態では、前記ホストシステムから与えられる設定情報に基づいて前記所定の前記論理ブロックを設定する第１の設定ステップが備えられる。前記設定情報には、前記論理アドレスの範囲を指定する情報が含まれる。
【００１９】
前記第１の設定ステップでは、前記設定情報に含まれる前記論理アドレスの範囲が属する前記論理ブロックが前記所定の前記論理ブロックとして設定される。
【００２０】
好適な実施形態では、第２の設定ステップが備えられる。前記第２の設定ステップでは、それぞれの前記論理ブロック内の領域に対する、所定セクタ数より少ない容量の領域を指定したデータの書き込みが、前記アクセス指示により指示される回数に基づいて、前記所定の前記論理ブロックが設定される。前記第２の設定ステップでは、前記回数が所定回数以上の前記論理ブロックが前記所定の前記論理ブロックとして設定される。
【００２１】
好適な実施形態では、前記フラッシュメモリが複数個ある。前記アクセス指示で指定されるアドレスが割り当てられているセクタ単位の領域が複数個含まれる論理ブロックと、異なる前記フラッシュメモリに含まれるアドレスが同一の物理ブロックを複数個集めた物理ブロック群との対応関係を管理するブロック管理ステップが更に備えられる。前記データ書き込み手段では、前記アクセス指示により指定される前記論理アドレスが属する前記論理ブロックと対応する前記物理ブロック群に、前記アクセス指示と共に与えられるデータが書き込まれる。前記予約ステップでは、不良ブロックが含まれる前記物理ブロック群内の良品ブロックが、不良ブロックが含まれていない前記物理ブロック群内の物理ブロックよりも優先的に前記システムブロックとして予約される。
【発明の効果】
【００２２】
本発明によれば、システムデータをフラッシュメモリ内に保存するフラッシュメモリシステムにおいて、ファイル管理データを保存するための空きブロックを確保することができないときに、ファイル管理データの保存先として、システムデータを保存するために予約されている物理ブロックを代用できる。このため、フラッシュメモリシステムに保存されるファイル管理データの信頼性を向上させることができる。更に、ホストシステムから与えられるアクセス指示に従って書き込まれるユーザーデータの容量（書き込み先の領域の容量）、つまり、書き込みを指示するアクセス指示により指定されるデータのセクタ数（書き込み先の領域のセクタ数）に基づいて、ファイル管理データが割り当てられている論理アドレスの範囲（論理ブロック）を特定するようにすれば、ファイル管理データが割り当てられている論理アドレスを予め設定しなくても本発明を適用することができる。
【発明を実施するための最良の形態】
【００２３】
図１は、本発明の一実施形態に係るフラッシュメモリシステム１を概略的に示すブロック図である。本実施形態では、互いに異なるフラッシュメモリ２Ａ，２Ｂに属する２個の物理ブロックで仮想ブロックを形成したフラッシュメモリシステムに、本発明を適用する場合にいて説明する。尚、仮想ブロックの構成については後述する。
【００２４】
図１に示すように、フラッシュメモリシステム１は、２個のフラッシュメモリ２Ａ，２Ｂと、それを制御するメモリコントローラ３とで構成されている。以下の説明では、２個のフラッシュメモリ２Ａ、２Ｂを総称して「フラッシュメモリ２」と言うことがある。
【００２５】
フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続されている。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成されている。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２６】
メモリコントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ＳＲＡＭ８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（Error-Correcting Code）ブロック１１と、ＲＯＭ（Read Only Memory）１２とから構成される。メモリコントローラ３は、内部バス１４を介してフラッシュメモリ２と接続されている。これら機能ブロックによって構成されるメモリコントローラ３は、一つの半導体チップ上に集積される。以下、各機能ブロックについて説明する。
【００２７】
ホストインターフェースブロック７は、ホストシステム４との間でデータ、アドレス情報、ステータス情報、外部コマンド等の授受を行なう。外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（例えば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００２８】
ＳＲＡＭ（Static Random Access Memory）８は、揮発性の記憶素子であり、フラッシュメモリ２の制御に必要なデータを一時的に格納するために使用される。本実施形態においては、不良ブロックテーブル、アドレス変換テーブル及び空きブロックテーブルがシステムデータ（フラッシュメモリ２に対するアクセスを制御又は管理するためのシステムデータであり、管理情報及びファームウェア等のデータが含まれる）としてフラッシュメモリ２に保存されている。そして、不良ブロックテーブル、アドレス変換テーブル及び空きブロックテーブルは、必要なときにフラッシュメモリ２から読み出されＳＲＡＭ８に保持される。ここで、不良ブロックテーブルは、不良ブロックを示す情報を保持するテーブルである。アドレス変換テーブルは、論理ブロックと物理ブロックとの対応関係を示したテーブルである。空きブロックテーブルは、消去状態の物理ブロック（又は、有効なデータが書き込まれていない物理ブロック）を検索するためのテーブルである。なお、フラッシュメモリ２にファームウェアが保存されている場合、ファームウェアは、起動後又は必要なときにフラッシュメモリ２から読み出されＳＲＡＭ８に保持される。
【００２９】
ＲＯＭ１２は、不揮発性の記憶素子である。ＲＯＭ１２には、フラッシュメモリ２の制御に必要なファームウェアが書き込まれている。なお、フラッシュメモリ２にファームウェアが保存されている場合、ＲＯＭ１２には、起動時に必要な最低限のファームウェア（以下、「起動用ファームウェア」と言う）だけが記憶されている。
【００３０】
バッファ９は、ホストシステム４から与えられたデータやフラッシュメモリ２から読み出されたデータを一時的に保持する。例えば、フラッシュメモリ２に書き込まれるデータは、フラッシュメモリ２が書き込み可能な状態になるまでバッファ９に保持される。また、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態になるまでバッファ９に保持される。
【００３１】
フラッシュメモリインターフェースブロック１０は、ＲＯＭ１２又はＳＲＡＭ８にファームウェアとして保存されている各種の処理を規定したシーケンスコードを読み込み、読込んだシーケンスコードに従って、フラッシュメモリ２に対する各種の処理を実行する。このシーケンスコードは、フラッシュメモリインターフェースブロック１０が実行するシーケンス処理毎に設定されたコードセットであり、それぞれのコードセットが複数個のコードで構成されている。このシーケンスコードに基づいて実行される処理では、フラッシュメモリインターフェースブロック１０とフラッシュメモリ２との間で、データ、アドレス情報、ステータス情報、内部コマンド等の授受が、内部バス１４を介して行なわれる。ここで、内部コマンドとは、メモリコントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、メモリコントローラ３から与えられる内部コマンドに従って動作する。
【００３２】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加される誤り訂正符号（ＥＣＣ：Error-Correcting Code））を生成するとともに、読み出したデータに付加されている誤り訂正符号に基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００３３】
マイクロプロセッサ６は、ＲＯＭ１２又はＳＲＡＭ８上にファームウェアとして保存されているプログラムコードを読み込み、読み込んだプログラムコードに従って、メモリコントローラ３の全体の動作を制御する。このプログラムコードは、マイクロプロセッサ６の動作を規定したプログラムであり、マイクロプロセッサ６は、読込んだプログラムコードに基づいて、フラッシュメモリ２に対するアクセスを制御する。
【００３４】
フラッシュメモリ２Ａ，２Ｂは、それぞれ、ＮＡＮＤ型フラッシュメモリからなる。ＮＡＮＤ型フラッシュメモリは、レジスタと、複数のメモリセルが２次元的に配列されたメモリセルアレイを備えている。メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。ここで、メモリセル群は、複数のメモリセルが直列に接続されたものである。各ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、レジスタから選択されたメモリセルへのデータの書き込み又は選択されたメモリセルからレジスタへのデータの読み出しが行われる。
【００３５】
ＮＡＮＤ型フラッシュメモリでは、データの読み出し及び書き込みはページ（物理ページ）単位で行われ、データの消去はブロック（物理ブロック）単位で行われる。物理ブロックは、複数のページ（物理ページ）で構成される。例えば、１個の物理ページは、所定セクタ数のユーザー領域（例えば４セクタ（２０４８バイト）の領域）と、所定バイト数の冗長領域（例えば６４バイトの領域）とで構成され、１個の物理ブロックは、所定個数（例えば６４個）の物理ページで構成されている。ユーザー領域は、主にホストシステムから与えられるユーザーデータが書き込まれる領域であり、冗長領域は、誤り訂正符号（ＥＣＣ：Error-Correcting Code））、論理アドレス情報、ブロックステータス（フラグ）等の付加データが記憶される領域である。
【００３６】
論理アドレス情報は、その物理ブロックに割り当てられた論理ブロックを示す情報であり、この情報に基づいて物理ブロックと論理ブロックの対応関係が判別される。ブロックステータス（フラグ）は、物理ブロックの良否を示すフラグであり、このブロックステータス（フラグ）に基づいて、正常にデータの書き込み等を行うことができない物理ブロックである不良ブロックが判別される。尚、不良ブロックには、出荷時から不良である初期不良の物理ブロック（以下、「初期不良ブロック」と言う）と、使用開始後に劣化して不良ブロックになった後発不良の物理ブロック（以下、「後発不良ブロック」と言う）があり、初期不良ブロックについては、不良ブロックであることを示すブロックステータス（フラグ）が製造メーカによって書き込まれている。また、この初期不良ブロックを示すブロックステータス（フラグ）を、ユーザー領域に書き込んでいる製造メーカもある。後発不良ブロックの判断基準については、設計の際に設計者が適宜設定することができる。例えば、書き込み又は消去を行った際にフラッシュメモリから出力される処理ステータスがフェイルであった場合、読み出されたデータに予め定められた閾値以上の誤りが含まれていた場合、又はこれらの組合せにより、後発不良理ブロックであるとの判断が行われてもよい。
【００３７】
本実施形態では、図２に示すように、互いに異なるフラッシュメモリ２Ａ，２Ｂに属する２個の物理ブロックで仮想ブロックが形成され、この仮想ブロックに対して、１個の論理ブロックが割り当てられる。従って、ホストシステム４から書き込みを指示するアクセス指示が与えられた場合、メモリコントローラ３は、そのアクセス指示で指定されるアクセス対象の領域が属する論理ブロックと対応関係にある仮想ブロックを特定し、その仮想ブロックを形成する２個の物理ブロックに対して、そのアクセス指示に対応するデータを書き込む。このデータ書き込み処理で、メモリコントローラ３は、フラッシュメモリ２Ａに属する物理ブロック対するデータの書き込みとフラッシュメモリ２Ｂに属する物理ブロック対するデータの書き込みとを並行して行っても良いし、フラッシュメモリ２Ａに属する物理ブロック対するデータの書き込みとフラッシュメモリ２Ｂに属する物理ブロック対するデータの書き込みとを交互に行っても良い。後者は、いわゆるインターリーブ方式であり、この方式では、一方のフラッシュメモリがビジー状態のとき（フラッシュメモリ内で書き込みが実行されているとき）にビジー状態ではない（フラッシュメモリ内で書き込みが実行されていない）他方のフラッシュメモリに対するデータの書き込みが行われる。
【００３８】
ホストシステム４側のアドレス空間は、セクタ（５１２バイト）単位で分割した領域（以下、「論理セクタ領域」と言う）に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。メモリコントローラ３内で行われるアドレス管理では、複数個の論理セクタ領域で論理ブロックが形成され、この論理ブロックに対して、仮想ブロックが割り当てられる。本実施形態では、１個の物理ブロックが、２５６セクタのユーザー領域で構成されており、１個の仮想ブロックが、２個の物理ブロックで形成されている。このため、図３に示したように、ＬＢＡが連続する５１２個の論理セクタ領域をまとめたものが論理ブロックとされ、この論理ブロックに、通し番号が付けられている。以下、論理ブロックに付けられている通し番号を、「論理ブロック番号（ＬＢＮ）」と言う。例えば、ＬＢＡ＃０−＃５１１の５１２個の論理セクタ領域は、ＬＢＮ＃０の論理ブロックに対応する。
【００３９】
また、本実施形態では、図２に示すように、物理ブロックアドレス（ＰＢＡ）が同一の２個の物理ブロックで仮想ブロックを形成している。すなわち、仮想ブロックは、互いに異なるフラッシュメモリ２Ａ，２Ｂに属するＰＢＡが同一の物理ブロックで形成されている。このようにすることにより、ＰＢＡが異なる２個の物理ブロックで仮想ブロックが形成される場合に比べて、仮想ブロックの管理が容易になる。つまり、ＰＢＡが同一の２個の物理ブロックで仮想ブロックが形成されていない場合、メモリコントローラ３は、論理ブロックと物理ブロックの対応関係（ＬＢＮとＰＢＡの対応関係）を、フラッシュメモリ２Ａとフラッシュメモリ２Ｂとで別々に管理しなければならない。これに対し、本実施形態のように、ＰＢＡが同一の２個の物理ブロックで仮想ブロックが形成されている場合、各論理ブロックには必ずＰＢＡが同一の物理ブロックが割り当てられるので、メモリコントローラ３は、２個のフラッシュメモリ２Ａ，２Ｂのうちのいずれか一方について、論理ブロックと物理ブロックの対応関係（ＬＢＮとＰＢＡの対応関係）を管理すればよい。
【００４０】
図２に示すように、仮想ブロックには、不良ブロック（図２で“ＮＧ”と記載された物理ブロック）が含まれていない仮想ブロック（以下、「良品仮想ブロック」と言う）と、不良ブロックが含まれている仮想ブロック（以下、「不良仮想ブロック」と言う）との２種類がある。つまり、良品仮想ブロックは、仮想ブロックを形成する２個の物理ブロックが両方とも良品の仮想ブロックであり、不良仮想ブロックは、仮想ブロックを形成する２個の物理ブロックのうち、いずれか一方又は両方のブロックが不良の仮想ブロックである。
【００４１】
良品仮想ブロック（例えば、ＰＢＡ＃２の２個の物理ブロックで構成される仮想ブロック）は、メモリコントローラ３がユーザーデータの書き込み先として使用することができる仮想ブロックである。言い換えれば、良品仮想ブロックは、論理ブロック（例えば、ＬＢＮ＃０の論理ブロック）に割り当てられ得る仮想ブロックである。
【００４２】
一方、不良仮想ブロック（例えば、ＰＢＡ＃６の２個の物理ブロックで構成される仮想ブロック）は、メモリコントローラ３がユーザーデータの書き込み先として使用することができない仮想ブロックである。言い換えれば、不良仮想ブロックは、論理ブロックに割り当てられない仮想ブロックである。
【００４３】
本実施形態では、不良仮想ブロック内の良品の物理ブロック（不良ブロックでない物理ブロック）が、システムデータの書き込み先として使用される物理ブロック（以下、「システムブロック」と言う）として優先的に予約される。つまり、不良仮想ブロックに含まれる良品の物理ブロックが、良品仮想ブロックに含まれる物理ブロックよりも優先的にシステムブロックとして予約される。このようにすることにより、不良仮想ブロックに含まれる良品の物理ブロックを有効に活用することができる。
【００４４】
システムブロックの予約は、フォーマット（初期化）の際に行われることが好ましい。本実施形態では、フォーマット（初期化）の際に、メモリコントローラ３によって、不良ブロックが検出され、検出された不良ブロックが含まれる不良仮想ブロック内の良品の物理ブロックが、良品仮想ブロックに含まれる物理ブロックよりも優先的にシステムブロックとして予約される。システムブロックとして予約される物理ブロックの個数については、システムデータの容量を考慮して決定される。更に、この物理ブロックの個数を決定するときには、システムデータの更新処理やシステムブロックとして予約された物理ブロックが後発不良ブロックになること等も考慮される。フォーマット（初期化）の際には、これらのことを考慮して決定された所定個数の物理ブロックがシステムブロックとして予約される。
【００４５】
ここで、もし、不良仮想ブロック内の良品の物理ブロックだけでは、所定個数の物理ブロックをシステムブロックとして予約することができない場合、つまり、不良仮想ブロック内の良品の物理ブロックの総数が所定個数に満たない場合、良品仮想ブロック内の物理ブロックが、システムブロックとして予約される。
【００４６】
なお、本実施形態では、互いに異なるフラッシュメモリ２Ａ，２Ｂに属するＰＢＡが同一の物理ブロックで仮想ブロックを形成し、この仮想ブロックに対して論理ブロックが割り当てられる。従って、仮想ブロックに含まれる一方の物理ブロックだけがユーザーデータの書き込み先として使用されることはない。この点を考慮して、本実施形態では、仮想ブロック単位でシステムブロックの予約が行われる。つまり、良品仮想ブロック内の一方の物理ブロックがシステムブロックとして予約される場合には、他方の物理ブロックもシステムブロックとして予約される。このように仮想ブロック単位でシステムブロックの予約が行われることにより、所定個数を超える個数の物理ブロックがシステムブロックとして予約されることがあっても構わない。
【００４７】
また、システムブロックの予約は、フォーマット（初期化）の際に行われるが、ユーザーデータの書き込み先として使用されていた物理ブロック（良品ブロック）が劣化して後発不良ブロックになったときには、その後発不良ブロックが含まれる不良仮想ブロック内の良品ブロックが、システムブロックとして追加予約される。このような追加予約により、システムブロックの個数が増加した場合には、良品仮想ブロック内の物理ブロックに対するシステムブロックの予約が解除されるようにしてもよい。
【００４８】
つまり、このような追加予約によりシステムブロックの個数が増加し、良品仮想ブロック内の物理ブロックがシステムブロックとして予約されている必要がなくなった場合には、良品仮想ブロック内の物理ブロックに対するシステムブロックの予約が解除されるようにしてもよい。なお、本実施形態では、不良仮想ブロック内の良品ブロックがユーザーデータの書き込み先としては使用されることはないため、不良仮想ブロック内の良品ブロックについては、システムブロックの予約が解除される必要がない。従って、システムブロックとして予約されている物理ブロックの個数が所定個数よりも多くなった場合であっても、システムブロックとして予約されている物理ブロックが全て不良仮想ブロック内の良品ブロックであるときには、システムブロックの予約解除は行われない。
【００４９】
また、本実施形態では、互いに異なるフラッシュメモリ２Ａ，２Ｂに属する２個の物理ブロックで仮想ブロックが形成され、この仮想ブロックに対して、１個の論理ブロックが割り当てられるので、仮想ブロックを形成する２個の物理ブロックのうち、一方の物理ブロックに対するシステムブロックの予約だけが解除されても、その物理ブロックはユーザーデータの書き込み先として使用されない。従って、システムブロックの予約の解除も仮想ブロック単位で行われる。仮想ブロック単位でシステムブロックの予約が解除された場合、予約が解除された良品仮想ブロックはユーザーデータの書き込み先として使用可能な状態になる。
【００５０】
次に、システムデータとしてフラッシュメモリ２に保存される不良ブロックテーブル、アドレス変換テーブル及び空きブロックテーブルの３種類のテーブルについて説明する。
【００５１】
図３は、不良ブロックテーブルを示す。
【００５２】
不良ブロックテーブルは、不良ブロック（初期不良又は後発不良の物理ブロック）を示す情報を保持するテーブルである。不良ブロックテーブルには、不良ブロックを示す情報として、例えば、不良ブロックが属するフラッシュメモリ２Ａ，２Ｂを判別するためのチップ番号と、その不良ブロックのＰＢＡとが書き込まれる。
【００５３】
不良ブロックテーブルは、フォーマット（初期化）の際に作成される。例えば、フォーマット（初期化）の際に不良ブロックの検索が行われ、検出された不良ブロックが属するフラッシュメモリ２Ａ，２Ｂのチップ番号及びその不良ブロックのＰＢＡが、ＳＲＡＭ８上に確保された不良ブロックテーブルの作成領域に書き込まれる。このようにして不良ブロックテーブルが作成された後に、作成された不良ブロックテーブルに基づいて上述のシステムブロックの予約が行われる。そして、ＳＲＡＭ８上に作成された不良ブロックテーブルは、不良ブロックテーブルの書き込み先として予約されているシステムブロックに書き込まれる。その後、後発不良ブロックが新たに検出されたときには、ＳＲＡＭ８上で不良ブロックテーブルが更新され（その新たに検出された後発不良ブロックに対応したチップ番号及びＰＢＡが不良ブロックテーブルに追加され）、更新後の不良ブロックテーブルが、再び、不良ブロックテーブルの書き込み先として予約されているシステムブロックに書き込まれる。
【００５４】
図４は、論理グループとアドレス変換テーブルの対応関係を示す。
【００５５】
論理グループとは、論理ブロックを複数個まとめることで形成されたグループである。以下、論理グループに付けられた通し番号を、「論理グループ番号（ＬＧＮ）」と言う。図４の例では、ＬＢＮが連続する論理ブロックが、異なる論理グループに順次振り分けられるようにして、論理グループが形成されている。例えば、ＬＢＮ＃０の論理ブロックはＬＧＮ＃０の論理グループに、ＬＢＮ＃１の論理ブロックはＬＧＮ＃１の論理グループに、ＬＢＮ＃２の論理ブロックはＬＧＮ＃２の論理グループにという順番で、ＬＢＮ＃０−＃７の論理ブロックがＬＧＮ＃０−＃７の論理グループに順次振り分けられていく。以下、同様に、ＬＢＮ＃８の論理ブロックがＬＧＮ＃０の論理グループに、ＬＢＮ＃９の論理ブロックがＬＧＮ＃１の論理グループに、ＬＢＮ＃１０の論理ブロックがＬＧＮ＃２の論理グループに振り分けられていく。このようにして、８個の論理グループが形成される。
【００５６】
論理グループは、図４に示すように、単なるアドレス変換テーブルの作成単位であり、各論理ブロックが割り当てられる物理ブロックは、その物理ブロックが属する論理グループに依存しない。つまり、どの論理ブロックがどの物理ブロックに割り当てられても良い。このアドレス変換テーブルは、論理ブロックと物理ブロックとの対応関係を記述したテーブルであり、図４に示した例では、各論理グループに対応する８個のテーブルに分割してアドレス変換テーブルの管理（作成、更新及び保存）を行っているが、全ての論理ブロックと物理ブロックとの対応関係を含む１個のテーブル、つまり、８個のテーブルを１個にまとめたアドレス変換テーブルであっても良い。
【００５７】
アドレス変換テーブルの一例として、図５に、ＬＧＮ＃０の論理グループに対応したアドレス変換テーブル＃０を示す。図５から分かるように、アドレス変換テーブル＃０には、ＬＧＮ＃０の論理グループに属する論理ブロックに関して、各論理ブロックに対応する物理ブロックのＰＢＡが書き込まれている。このアドレス変換テーブル＃０がシステムブロックに保存されていない場合は、アドレス変換テーブル＃０はＳＲＡＭ８上で作成された後、そのテーブルの書き込み先として予約されているシステムブロックに保存される。また、アドレス変換テーブル＃０がシステムブロックに保存されている場合は、必要なときにＳＲＡＭ８に読み出される。そして、アドレス変換テーブル＃０に関する論理ブロックと物理ブロックの対応関係が変化したときは、ＳＲＡＭ８上でそのテーブルが更新され、更新後のアドレス変換テーブル＃０が、再び、そのテーブルの書き込み先として予約されているシステムブロックに書き込まれる。
【００５８】
図６は、空きブロックテーブルを示す。
【００５９】
空きブロックテーブルは、各物理ブロックが空きブロックであるか否かを示すテーブルである。空きブロックテーブルは、例えば、各ビットの論理値で、各ビットに割り当てられている物理ブロックが空きブロックであるか否かを示す。つまり、この空きブロックテーブルでは、０”又は“１”のいずれか一方の論理値が空きブロック（データが消去されている物理ブロック又はデータが無効化されている物理ブロック）を示し、他方の論理値が空きブロックではない物理ブロック（例えば、有効なユーザーデータが書き込まれている物理ブロック、システムブロック又は不良ブロック）を示す。この空きブロックテーブルもＳＲＡＭ８上で作成又は更新され、このテーブルの書き込み先として予約されているシステムブロックに保存される。
【００６０】
図６に示した空きブロックテーブルでは、各行（８ビット）の連続した２個のビットが、一つの仮想ブロックを形成する２個の物理ブロックに対応している。つまり、フラッシュメモリ２Ａに属する物理ブロックとフラッシュメモリ２Ｂに属する物理ブロックとが、ＰＢＡの順番で各行（８ビット）のビットに交互に割り当てられている。この物理ブロックの割り当ては、上の行から下の行に向かって、各行においては下位ビット側から上位ビット側に向かって行われる。このように、仮想ブロックを構成する各物理ブロックが空きブロックであるか否かに関する情報は、１つの空きブロックテーブル上で管理されることが好ましい。尚、本実施形態のようにＰＢＡが同一の物理ブロックで仮想ブロックを形成し、この仮想ブロックに対して論理ブロックが割り当てられる場合には、仮想ブロック単位（ＰＢＡが同一の２個の物理ブロック単位）で空きブロックになるので、本実施形態における空きブロックテーブルは仮想ブロック単位で空きブロックであるか否かを示すようなテーブルであっても良い。つまり、本実施形態における空きブロックテーブルでは、各ビットに対して仮想ブロックが割り当てられ、各ビットの論理値がそのビットに割り当てられた仮想ブロック（ＰＢＡが同一の２個の物理ブロック）が空きブロックであるか否かを示すテーブルであっても良い。このように各ビットに対して仮想ブロック（ＰＢＡが同一の２個の物理ブロック）が割り当てられるようにすれば、空きブロックテーブルの容量を小さくすることができる。例えば、本実施形態のように２個の物理ブロックで仮想ブロックが形成されている場合、その仮想ブロックが各ビットに対して割り当てられれば、空きブロックテーブルの容量は１／２になる。
【００６１】
また、不良ブロックテーブル、アドレス変換テーブル及び空きブロックテーブルのそれぞれのテーブルの容量は、１セクタの領域（１個の物理セクタ領域）又は１個の物理ページに保存することができる容量であることが好ましい。つまり、それぞれテーブルは、１セクタ単位又は１ページ単位のテーブルに分割されて管理され、その単位でシステムブロックに保存されることが好ましい。
【００６２】
以上が、不良ブロックテーブル、アドレス変換テーブル及び空きブロックテーブルについての説明である。これらのテーブルの書き込み先として予約されたシステムブロックを示す情報（以下、「システムブロック情報」と言う）は、例えば、フォーマット（初期化）の際に作成され、フラッシュメモリ２Ａ及び／又は２Ｂ内の先頭ブロックに保存される。本実施形態では、図７Ａ乃至図７Ｃに示すように、不良ブロックテーブル、アドレス変換テーブル及び空きブロックテーブルの書き込み先として予約されたシステムブロックを特定するためのチップ番号及びＰＢＡがシステムブロック情報として管理される。図７Ａに示す情報は、不良ブロックテーブルの書き込み先として予約されたシステムブロックを特定するためのチップ番号及びＰＢＡを示す不良ブロックテーブル格納領域情報である。図７Ｂに示す情報は、アドレス変換テーブルの書き込み先として予約されたシステムブロックを特定するためのチップ番号及びＰＢＡを示すアドレス変換テーブル毎のアドレス変換テーブル格納領域情報である。また、図７Ｃに示す情報は、空きブロックテーブルの書き込み先として予約されたシステムブロックを特定するためのチップ番号及びＰＢＡを示す空きブロックテーブル毎の空きブロックテーブル格納領域情報である。このように、本実施形態におけるシステムブロックの予約は、不良ブロックテーブル格納領域情報、アドレス変換テーブル格納領域情報及び空きブロックテーブル格納領域情報を含むシステムブロック情報によって管理されている。
【００６３】
尚、各テーブルが１個の物理ページに保存されるようにすれば、テーブルが更新される毎に、更新されたテーブルが物理ブロック（システムブロック）内の次の物理ページに保存されることになる。従って、最新のテーブルは、物理ブロック（システムブロック）内のデータ（テーブルのデータ）が書き込まれている末尾の物理ページに保存されていることになる。
【００６４】
尚、各物理ページに対して物理セクタ領域単位でデータを書き込んでいくことができるフラッシュメモリの場合には、各テーブルの容量が一個の物理セクタ領域に収まる容量（例えば、物理セクタ領域と同じ容量）であってもよい。このようにすれば、１個の物理セクタ領域に１個のテーブルが保存され、最新のテーブルは、物理ブロック（システムブロック）内のデータ（テーブルのデータ）が書き込まれている末尾の物理セクタ領域に保存されていることになる。
【００６５】
本実施形態では、各テーブルに対して、２個のシステムブロックが予約される。従って、２個のシステムブロックのうち、一方は、テーブルの書き込み先として使用されているシステムブロック（以下、「現行ブロック」と言う）になっており、他方はテーブルの書き込み先として使用されていない控えのシステムブロック（以下、「控えブロック」と言う）になっている。そして、現行ブロック内にテーブルを書き込むための空き領域（データの書き込まれていない物理ページ又は物理セクタ領域）が無くなった場合は、控えブロックが現行ブロックになり、現行ブロックが控えブロックになる。つまり、各テーブルに対して予約された２個のシステムブロックは、交互に現行ブロック（又は、控えブロック）になる。
【００６６】
システムブロック情報は、起動時にフラッシュメモリ２Ａ及び／又は２Ｂの先頭ブロックから読み出され、ＳＲＡＭ８に保持されている。そして、テーブルの書き込み先として予約されているシステムブロックが変更される場合、システムブロック情報は、ＳＲＡＭ８上で更新される。システムブロック情報が更新された場合は、更新後のシステムブロック情報がフラッシュメモリ２Ａ及び／又は２Ｂの先頭ブロックに書き込まれる。なお、本実施形態で、フラッシュメモリ２Ａ及び／又は２Ｂの先頭ブロックがシステムブロック情報の書き込み先として設定されているのは、一般に、先頭ブロックは、不良ブロックではないことが製造メーカによって保証されているためである。このため、通常、先頭ブロックには、属性情報（例えば、フラッシュメモリシステム１がどういうものであって、どういうフラッシュメモリが幾つ搭載されているか等を表す情報）が書き込まれていることが多く、先頭ブロックにユーザーデータ（ホストシステムから与えられるデータ）が書き込まれることは殆ど無い。
【００６７】
本実施形態では、各テーブルに対して、２個のシステムブロックが割り当てられ、それらのシステムブロックが交互に現行ブロックになる。つまり、２個のシステムブロックが交互に各テーブルの保存先として使用される。従って、いずれかのテーブルに対して割り当てられている２個のシステムブロックのうち、少なくとも一方が後発不良ブロックになってしまった場合には、そのテーブルに対して別のシステムブロックが新たに割り当てられる必要がある。
【００６８】
本実施形態では、このようにシステムブロックが新たに割り当てられる必要が生じたときに、システムブロックが追加予約されるのではなく、予め予備のシステムブロック（以下、「予備ブロック」と言う）が確保されている。そして、いずれかのテーブルに対して割り当てられているシステムブロックが後発不良ブロックになってしまった場合には、後発不良ブロックになってしまったシステムブロックに換えて、予め確保されている予備ブロックがそのテーブルに対して新たに割り当てられる。つまり、本実施形態では、フォーマット（初期化）の際に、予備ブロックもシステムブロックとして予約される。
【００６９】
従って、本実施形態では、予備ブロックとして予約されたシステムブロックを特定するための情報（以下、「予備ブロック情報」と言う）もシステムブロック情報として保存される。図８に示す情報は、予備ブロックとして予約されたシステムブロックを特定するためのチップ番号及びＰＢＡを示す予備ブロック情報である。この予備ブロック情報も不良ブロックテーブル格納領域情報、アドレス変換テーブル格納領域情報及び空きブロックテーブル格納領域情報と同様にシステムブロック情報として保存される。また、この予備ブロック情報も他のシステムブロック情報と同様に、ＳＲＡＭ８上で更新され、更新された予備ブロック情報はフラッシュメモリ２Ａ及び／又は２Ｂの先頭ブロックに保存される。
【００７０】
本実施形態では、不良ブロックテーブルについては、２個のシステムブロックが予約され、アドレス変換テーブルについては、８個のアドレス変換テーブル＃０〜＃７があるため（図７Ｂ参照）、８×２＝１６個のシステムブロックが予約され、空きブロックテーブルについては、２個の空きブロックテーブル＃０及び＃１があるため（図７Ｃ参照）、２×２＝４個のシステムブロックが予約される。尚、予備ブロックの個数は適宜設定されるが、予備ブロック用のシステムブロックの個数を３個とした場合、前述したシステムブロックとして予約される物理ブロックの所定個数は、２＋１６＋４＋３＝２５個になる。
【００７１】
次に、不良ブロックテーブル、アドレス変換テーブル又は空きブロックテーブルに対して予約されているシステムブロックのうち、いずれかのシステムブロックが後発不良ブロックになった場合に行われるシステムブロックの新たな割り当てについて説明する。尚、後発不良ブロックであるか否かは、通常、現行ブロックにおいてデータの書き込み又はデータの読み出しが行われたときや、控えブロックにおいて記憶データの消去が行われたときに判断される。従って、後発不良ブロックになったと判断されたときに、そのシステムブロックが現行ブロックである場合と控えブロックである場合とがある。
【００７２】
後発不良ブロックになったと判断されたシステムブロックが現行ブロックであった場合には、そのシステムブロックの代わりに補充されるシステムブロック（予備ブロックとして予約されていたシステムブロック）に最新のテーブルが書き込まれると共に、システムブロック情報の更新が行われる。一方、後発不良ブロックになったと判断されたシステムブロックが控えブロックであった場合には、システムブロック情報の更新だけが行われる。
【００７３】
このシステムブロック情報の更新では、後発不良ブロックになったシステムブロックのチップ番号及びＰＢＡが不良ブロックテーブルに書き込まれる。この不良ブロックテーブルの更新は、ＳＲＡＭ８上で行われ、更新された不良ブロックテーブルは、そのテーブルの書き込み先として予約されているシステムブロックに保存される。
【００７４】
不良ブロックテーブル格納領域情報、アドレス変換テーブル格納領域情報及び空きブロックテーブル格納領域情報に記載されているシステムブロックのチップ番号及びＰＢＡのうち、後発不良ブロックになったと判断されたシステムブロックのチップ番号及びＰＢＡが削除され、そのシステムブロックの代わりに割り当てられるシステムブロック（予備ブロックとして予約されていたシステムブロック）のチップ番号及びＰＢＡが、削除されたチップ番号及びＰＢＡの代わりに新たに書き込まれる。
【００７５】
続いて、予備ブロック情報に記載されているシステムブロックのチップ番号及びＰＢＡから、後発不良ブロックになったと判断されたシステムブロックの代わりに割り当てられるシステムブロック（予備ブロックとして予約されていたシステムブロック）のチップ番号及びＰＢＡが削除される。この更新はＳＲＡＭ８上で行われ、更新されたシステムブロック情報はフラッシュメモリ２Ａ及び／又は２Ｂの先頭ブロックに保存される。
【００７６】
不良ブロックテーブル、アドレス変換テーブル又は空きブロックテーブルに対して予約されているシステムブロックのうちのいずれかのシステムブロックが後発不良ブロックになった場合には、予備ブロックによりその補充が行われるため、予備ブロック用のシステムブロックの個数が減少する。従って、予備ブロック用のシステムブロックの個数が減少したときは、適宜、予備ブロックの補充が行われることが好ましい。例えば、予備ブロックの個数が０個になったときや、予め設定した最低個数以下になったときに、予備ブロック用のシステムブロックの予約（追加予約）を行うことが好ましい。
【００７７】
尚、このように予備ブロック用のシステムブロックの個数が減少した場合でなくても、良品仮想ブロック内の物理ブロックが劣化して後発不良ブロックになったときには、その後発不良ブロックが含まれる仮想ブロック内の良品ブロックが、予備ブロック用のシステムブロックとして追加予約される。この追加予約が行われたときには、その良品ブロックのチップ番号及びＰＢＡは、予備ブロック情報に書き込まれる。
【００７８】
また、このシステムブロックの追加予約により予備ブロックの個数が増加し、良品仮想ブロック内の物理ブロックをシステムブロックとして確保しておく必要がなくなった場合には、良品仮想ブロック内の良品ブロックに対する予約が解除される。予約が解除された物理ブロックのチップ番号及びＰＢＡは、予備ブロック情報から削除される。
【００７９】
ここで、「良品仮想ブロック内の物理ブロックをシステムブロックとして確保しておく必要がなくなった場合」とは、予備ブロックの総数が、予め定められている予備ブロック用のシステムブロックの個数（以下、「所定予備個数」と言う）よりも多いことを意味している。なお、システムブロックの予約の解除は仮想ブロック単位で行われるため、システムブロックの予約の解除は、所定予備個数を超えた予備ブロック用のシステムブロックの個数が仮想ブロックを形成する物理ブロックの個数以上（つまり、本実施形態では２個以上）になった場合に行われる。
【００８０】
以下、システムブロックの予約及びその解除に関するメモリコントローラ３の動作について説明する。
【００８１】
フォーマット（初期化）の際、不良ブロックが検出され、検出された不良ブロックに対応したチップ番号及びＰＢＡが、不良ブロックテーブルに書き込まれる。ここで検出される不良ブロックは、初期不良ブロックであっても後発不良ブロックであっても良い。例えば、このフォーマット（初期化）の処理が、フラッシュメモリシステム１が一旦使用された後に行われる場合には、後発不良ブロックが存在することがある。そのような場合は、初期不良ブロックだけでなく後発不良ブロックも不良ブロックとして検出される。
【００８２】
次に、作成された不良ブロックテーブルに基づいて不良仮想ブロックに含まれる良品ブロックがシステムブロックとして予約される。不良仮想ブロックに含まれる良品ブロックだけでは、所定個数のシステムブロックを確保することができなかった場合は、良品仮想ブロックに含まれる良品ブロックがシステムブロックとして予約される。このシステムブロックの予約は、仮想ブロック単位で行われる。
【００８３】
このシステムブロックの予約では、まず、不良仮想ブロック内の良品ブロックに対応したチップ番号及びＰＢＡが、システムブロック情報に書き込まれる。次に、不良仮想ブロック内の良品ブロックだけでは、所定個数のシステムブロックが確保されない場合には、良品仮想ブロックが適宜選択され、選択された良品仮想ブロックに含まれる物理ブロックのチップ番号及びＰＢＡが、システムブロック情報に書き込まれる。
【００８４】
以上のようにして、フォーマット（初期化）の際に、所定個数以上のシステムブロックが予約される。
【００８５】
不良ブロックテーブル、アドレス変換テーブル及び空きブロックテーブルがシステムブロックに保存されるときは、システムブロック情報に基づいて各テーブルの保存先のシステムブロックが特定される。
【００８６】
その後、後発不良ブロックが検出されたときには、その後発不良ブロックに対応したチップ番号及びＰＢＡが不良ブロックテーブルに追記される。この不良ブロックテーブルの更新はＳＲＡＭ８上で行われ、追記後の不良ブロックテーブルが、そのテーブルに対応するシステムブロック（現行ブロック）に書き込まれる。
【００８７】
続いて、その後発不良ブロックが含まれている仮想ブロック内の良品ブロックが予備ブロック用のシステムブロックとして追加予約される。この追加予約では、その良品ブロックのチップ番号及びＰＢＡが、予備ブロック情報に書き込まれる。この追加予約により予備ブロック用のシステムブロックの個数が所定予備個数より多くなった場合には、予備ブロック用のシステムブロックとして予約されている良品仮想ブロック内の物理ブロックに対するシステムブロックの予約が仮想ブロック単位で解除される。この予約解除では、システムブロックの予約が解除される良品仮想ブロック内の物理ブロックのチップ番号及びＰＢＡが、予備ブロック情報から削除される。
【００８８】
また、不良ブロックテーブル、アドレス変換テーブル又は空きブロックテーブルの保存先のシステムブロックとして良品仮想ブロック内の物理ブロックが割り当てられている場合には、その良品仮想ブロック内の物理ブロックが、予備ブロック用のシステムブロックとして予約されている不良仮想ブロック内の物理ブロックと交換されることが好ましい。上述のようなシステムブロックの予約の解除が円滑に行われるためには、このようなシステムブロックの交換が適宜行われることが好ましい。尚、このようなシステムブロックの交換は、交換対象のシステムブロックが控えブロックになったときに行われることが好ましい。
【００８９】
次に、ホストシステム４から与えられるユーザーデータの書き込み処理について説明する。ユーザーデータの書き込み処理は、ホストシステム４から与えられるアクセス指示に従って実行される。
【００９０】
書き込み処理の場合、ホストシステム４から与えられるアクセス指示には、ユーザーデータの書き込み先の領域を指示する論理アドレスが含まれている。ホストシステム４側のアドレス空間がセクタ（５１２バイト）単位の領域に付けられたＬＢＡで管理されている場合、このＬＢＡでユーザーデータの書き込み先の領域が指示される。例えば、ユーザーデータの書き込み先の先頭領域（先頭の論理セクタ領域）のＬＢＡと書き込み先の領域のセクタ数（容量）で、ユーザーデータの書き込み先の領域が指示される。
【００９１】
メモリコントローラ３は、ホストシステム４から与えられるアクセス指示により、このユーザーデータの書き込み先の領域に対応するＬＢＡ又はＬＢＡの範囲を特定し、更に、そのＬＢＡ又はＬＢＡの範囲が属する論理ブロックを特定する。特定された論理ブロックと対応する物理ブロックにユーザーデータを書き込むことが可能な場合は、その物理ブロックに対してユーザーデータが書き込まれる。
【００９２】
一方、特定された論理ブロックと対応する物理ブロックにユーザーデータを書き込むことができない場合、例えば、そのユーザーデータを書き込むための空き領域が無い場合には、空きブロックテーブルを用いた空きブロックの検索が行われる。この空きブロックの検索で空きブロックが検出された場合には、その空きブロックにユーザーデータが書き込まれる。また、特定された論理ブロックと対応する物理ブロックが存在しない場合にも、同様に、空きブロックテーブルを用いた空きブロックの検索が行われ、検出された空きブロックにユーザーデータが書き込まれる。
【００９３】
この空きブロックの検索で、空きブロックが検出されなかった場合、メモリコントローラ３は、ユーザーデータの書き込みを行わず、ホストシステム４側からアクセス可能なレジスタに、書き込み処理が正常に実行されなかったことを通知するエラーステータスを設定する。
【００９４】
尚、この空きブロックテーブルを用いた空きブロックの検索では、システムブロックは、検索対象から除外されているため、予備ブロックや控えブロックが空きブロックとして検出されることはない。
【００９５】
本実施形態では、予め重要なデータに対応するＬＢＡの範囲（以下、「所定ＬＢＡ範囲」と言う）が予め設定され、そのＬＢＡの範囲が属する論理ブロックについては、空きブロックの検索で空きブロックの検出ができなかった場合に、システムブロック（例えば、予備ブロックや控えブロック）が、ユーザーデータの書き込み先として使用される。つまり、空きブロックの検索で空きブロックを検出することができなかった場合、特定された論理ブロック（書き込み先の領域が属する論理ブロック）が、所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）と一致するか否かが判断される。ここで、双方の論理ブロックが一致した場合には、システムブロック（例えば、予備ブロックや控えブロック）がユーザーデータの書き込み先として使用される。一方、双方の論理ブロックが一致しなかった場合には、システムブロック（例えば、予備ブロックや控えブロック）がユーザーデータの書き込み先として使用されない。
【００９６】
例えば、ＬＢＡ＃５１２−＃１０２３の範囲が所定ＬＢＡ範囲として設定されていた場合、ＬＢＡ＃５１２−＃１０２３の５１２個の論理セクタ領域は、図２に示したようにＬＢＮ＃１の論理ブロックに属している。従って、ＬＢＮ＃１の論理ブロックに新たに割り当てる空きブロックの検索を行ったときに空きブロックを検出することができなかった場合には、ＬＢＮ＃１の論理ブロックに対してシステムブロック（例えば、予備ブロックや控えブロック）が割り当てられる。尚、ＬＢＮ＃１の論理ブロックに割り当てられる２個のシステムブロックのＰＢＡは同じアドレスでなくてもよい。
【００９７】
ここで、ホストシステムから与えられるユーザーデータには、ファイルデータとそのファイルデータを管理するためのファイル管理データが含まれているが、このファイル管理データに対応するＬＢＡの範囲を所定ＬＢＡ範囲として設定しておけば、ファイル管理データの信頼性を向上させることができる。
【００９８】
尚、システムブロックに保存されたユーザーデータについては、空きブロックを確保することができるようになったときに、その空きブロックに転送される。
【００９９】
次に、メモリコントローラ３が、書き込みを指示するアクセス指示により指定される領域のセクタ数に基づいて、ファイル管理データに対応する論理アドレスの範囲が属する論理ブロックを特定し、特定された論理ブロックを所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）に設定する場合について説明する。
【０１００】
メモリコントローラ３のホストインターフェースブロック７は、ホストシステム４からアクセス可能な各種のレジスタ（以下、「ホストインターフェースレジスタ」と言う）を備えている。ホストシステム４からメモリコントローラ３に与えられるアクセス指示は、このホストインターフェースレジスタに書き込まれる。ホストシステム４がメモリコントローラ３に対してデータの書き込みを指示する場合には、「データの書き込みを指示する外部コマンド」、「先頭データの書き込みを指示するＬＢＡ」及び「データを書き込む領域のセクタ数（書き込むデータの容量に対応するセクタ数）」がホストインターフェースレジスタに書き込まれる。
【０１０１】
本実施形態では、ホストインターフェースレジスタに書き込まれる「データを書き込む領域のセクタ数（書き込むデータの容量に対応するセクタ数）」に基づいて、アクセス指示と共に与えられるユーザーデータがファイルデータであるか、又はファイル管理データであるかが判別される。この判別を行うため、ホストインターフェースレジスタに書き込まれる「データを書き込む領域のセクタ数（書き込むデータの容量に対応するセクタ数）」に対して閾値（以下、「セクタ数設定値」と言う）が設定される。メモリコントローラ３は、「データを書き込む領域のセクタ数（書き込むデータの容量に対応するセクタ数）」がセクタ数設定値以上の場合には、ホストシステムから与えられるユーザーデータがファイルデータであると判断し、セクタ数設定値より小さい場合には、アクセス指示と共に与えられるユーザーデータがファイル管理データであると判断する。
【０１０２】
ここで、アクセス指示と共に与えられるユーザーデータがファイルデータであれば、クラスタ単位でデータの書き込みが行われるため、セクタ数設定値はクラスタのセクタ数に合わせて設定されることが好ましい。但し、セクタ数設定値がクラスタのセクタ数よりも小さい値であっても構わない。例えば、クラスタのセクタ数が８セクタの場合に、セクタ数設定値が“４”であっても構わない。
【０１０３】
次に、ファイル管理データに対応する論理アドレスの範囲が属する論理ブロックを特定するために使用されるテーブル（以下、「小容量書き込み管理テーブル」と言う）について図９を参照して説明する。図９に示した小容量書き込み管理テーブルには、それぞれの論理ブロックがファイル管理データに対応する論理アドレスの範囲が属する論理ブロックであるか否かを示す設定フラグと、セクタ数設定値より小さいセクタ数のデータの書き込みが指示された回数（以下、「小容量書き込み指示回数」と言う）とが書き込まれる。小容量書き込み管理テーブルに書き込まれる設定フラグと小容量書き込み指示回数は、各ＬＢＮに関連付けられている。設定フラグの“０”は、その論理ブロックがファイル管理データに対応する論理アドレスの範囲が属する論理ブロックでないことを示し、設定フラグの“１”は、その論理ブロックがファイル管理データに対応する論理アドレスの範囲が属する論理ブロックであることを示している。
【０１０４】
尚、この小容量書き込み管理テーブルもＳＲＡＭ８上で作成又は更新され、他のテーブルと同様に、この小容量書き込み管理テーブルに割り当てられたシステムブロックに保存される。従って、この小容量書き込み管理テーブルがシステムブロックに保存されていないときには、設定フラグが“０”に設定され小容量書き込み指示回数が“０”に設定された小容量書き込み管理テーブル（図９（ａ）参照）が、ＳＲＡＭ８上に作成され、作成された小容量書き込み管理テーブルは、システムブロックに保存される。
【０１０５】
ホストシステム４から書き込みを指示するアクセス指示が与えられたとき、つまり、ホストインターフェースレジスタに「データの書き込みを指示する外部コマンド」が書き込まれたとき、メモリコントローラ３は、その外部コマンドと共にホストインターフェースレジスタに書き込まれた「データを書き込む領域のセクタ数（書き込むデータの容量に対応するセクタ数）」がセクタ数設定値より小さいか否かを判断する。セクタ数設定値より小さいと判断した場合、メモリコントローラ３は、更に、その外部コマンドに対応するデータの書き込み先の領域が属する論理ブロックを特定する。つまり、この処理では、セクタ数設定値より小さいセクタ数のデータの書き込みが指示された領域が属する論理ブロックが特定される。例えば、セクタ数設定値が“４”の場合に、ホストインターフェースレジスタにデータの書き込みを指示する外部コマンドと共に、先頭データの書き込みを指示するＬＢＡとして“５１２”が、データを書き込む領域のセクタ数（書き込むデータの容量に対応するセクタ数）として“１”が書き込まれたときは、ＬＢＮ＃２の論理ブロックがセクタ数設定値より小さいセクタ数のデータの書き込みが指示された領域が属する論理ブロックとして特定される。
【０１０６】
小容量書き込み管理テーブルは、セクタ数設定値より小さいセクタ数のデータの書き込みが指示された領域が属する論理ブロックが特定されたときに更新される。この更新処理では、小容量書き込み管理テーブル上の、セクタ数設定値より小さいセクタ数のデータの書き込みが指示された領域が属する論理ブロックのＬＢＮに関連付けられている小容量書き込み指示回数が１回増やされる。例えば、セクタ数設定値より小さいセクタ数のデータの書き込みが指示された領域が属する論理ブロックがＬＢＮ＃２の論理ブロックである場合、小容量書き込み管理テーブル上のＬＢＮ＃２に関連付けられている小容量書き込み指示回数が“１０”であったとすれば、その小容量書き込み指示回数が“１１”に書き換えられる。
【０１０７】
本実施形態では、小容量書き込み管理テーブル上の小容量書き込み指示回数に対しても閾値（以下、「書き込み回数設定値」と言う）が設けられている。そして、小容量書き込み管理テーブル上のいずれかの小容量書き込み指示回数が書き込み回数設定値以上になったときには、その小容量書き込み指示回数に関連付けられているＬＢＮの論理ブロック
が、所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）に設定される。また、その論理ブロックのＬＢＮに関連付けられている設定フラグが“０”から“１”に書き換えられる。例えば、書き込み回数設定値が“１２８”に設定されている場合に、ＬＢＮ＃２に関連付けられている小容量書き込み指示回数が“１２８”に達したときには、ＬＢＮ＃２の論理ブロックが、所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）に設定される。また、ＬＢＮ＃２に関連付けられている設定フラグが“０”から“１”に書き換えられる（図９（ｂ）参照）。
【０１０８】
次に、ファイル管理データに対応するＬＢＡの範囲が、ホストシステム４側で変更された場合について説明する。このような変更が行われた場合、ファイル管理データに対応するＬＢＡの範囲を含んでいる論理ブロックが、異なる論理ブロックになってしまうことがある。このよう場合、メモリコントローラ３は、所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）を再設定する必要がある。
【０１０９】
従って、メモリコントローラ３は、ファイル管理データに対応するＬＢＡの範囲に対応する論理セクタ領域を含まなくなってしまった論理ブロックを特定し、その論理ブロックに対する設定を解除する（所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）としての設定を解除する）必要がある。
【０１１０】
次に、図９に示したような小容量書き込み管理テーブルを用いて、メモリコントローラ３が、ファイル管理データに対応するＬＢＡの範囲を含まなくなってしまった論理ブロックを特定し、その論理ブロックに対する設定を解除する（所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）としての設定を解除する）動作について説明する。
【０１１１】
この例では、メモリコントローラ３が、所定期間毎（例えば、ホストシステムからデータの書き込み指示を所定回数与えられる毎）に、小容量書き込み管理テーブル上の全ての小容量書き込み指示回数を“０”に戻すリセット処理を実行する（図９（ｃ）参照）。従って、このリセット処理を実行する際に、それぞれＬＢＮに関連付けられている小容量書き込み指示回数は、所定期間中にセクタ数設定値より小さいセクタ数のデータの書き込みが指示され回数に対応する。
【０１１２】
メモリコントローラ３は、このリセット処理を実行する際に、設定フラグが“１”に設定されているＬＢＮに関連付けられている小容量書き込み指示回数を参照し、小容量書き込み指示回数が“０”であった場合は、そのＬＢＮの書き込み設定フラグを“０”に変更する。つまり、そのＬＢＮの論理ブロックについて、所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）としての設定が解除される。
【０１１３】
メモリコントローラ３がこのように動作することにより、所定期間中にセクタ数設定値より小さいセクタ数のデータの書き込みが指示されなかった論理ブロックについては、所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）としての設定が解除される。
【０１１４】
尚、リセット処理を実行する際に、設定フラグが“１”に設定されているＬＢＮに関連付けられている小容量書き込み指示回数が、予め定められていた回数より少なかった場合に、そのＬＢＮの書き込み設定フラグが“０”に変更されるようにしてもよい。このようにした場合には、所定期間中にセクタ数設定値より小さいセクタ数のデータの書き込みが指示された回数が所定回数より少なかった論理ブロックについては、所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）としての設定が解除される。
【０１１５】
尚、いずれかの論理ブロックが割り当てられている物理ブロック内の冗長領域には、その物理ブロックに対応する論理ブロックに関する設定フラグ及び小容量書き込み指示回数が書き込まれることが好ましい。
【０１１６】
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。例えば、システムブロックに保存されるシステムデータは、各種のテーブルやファームウェア以外の情報であってもよい。また、ファイル管理データ以外の重要データに対応するＬＢＡの範囲を含んでいる論理ブロックを、所定ＬＢＡ範囲に対応する論理ブロック（所定ＬＢＡ範囲の論理セクタ領域が属する論理ブロック）に設定してもよい。また、仮想ブロックを構成しない場合であっても本発明を実施することができる。
【図面の簡単な説明】
【０１１７】
【図１】本発明の一実施形態によるフラッシュメモリシステムの概略構成を示すブロック図である。
【図２】論理ブロックと物理ブロック群の対応関係を示す図である。
【図３】不良ブロックテーブルの構成例を示す図である。
【図４】論理グループとアドレス変換テーブルの対応関係を示す図である。
【図５】アドレス変換テーブル＃０の構成例を示す図である。
【図６】空きブロックテーブルの構成例を示す図である。
【図７】図７Ａは、不良ブロックテーブル格納領域情報の構成例を示す図である。図７Ｂは、アドレス変換テーブル格納領域情報の構成例を示す図である。図７Ｃは、空きブロックテーブル格納領域情報の構成例を示す図である。
【図８】予備ブロック情報の構成例を示す図である。
【図９】小容量書き込み管理テーブルを説明するための図である。
【符号の説明】
【０１１８】
１…フラッシュメモリシステム、２Ａ，２Ｂ…フラッシュメモリ、３…メモリコントローラ、６…マイクロプロセッサ
【図１】
2010026878.tif 000003
【図２】
2010026878.tif 000004
【図３】
2010026878.tif 000005
【図４】
2010026878.tif 000006
【図５】
2010026878.tif 000007
【図６】
2010026878.tif 000008
【図７】
2010026878.tif 000009
【図８】
2010026878.tif 000010
【図９】
2010026878.tif 000011