(57)【要約】【課題】従来、フラッシュメモリは、論物変換テーブルを必要とし、論理アドレスと物理アドレスの管理、書き込み回数や消去回数等の複雑な管理が必要であった。【解決手段】フラッシュメモリに対して、データ開始アドレス、データ長、データ種を管理するアドレス管理テーブルを有し、データ種を指定した書込み要求時にそのテーブルを参照して、未使用状態のアドレスをそのデータ種の開始アドレスとして指定し、アドレス管理テーブルを更新し、毎回異なるアドレスに更新データを書き込むことでフラッシュメモリの延命を図るフラッシュメモリ制御システムとその制御方法である。更に、可変長データを次々に書き込んだ後、それらのデータを一定消去ブロック毎に最新データ開始アドレスにまとめて書き直すことも特徴とする。【選択図】      図１
2008065646.tif 000002
【特許請求の範囲】
【請求項１】
一定のデータ長を有する複数のデータ領域に分割された延命対策データ領域、及び、データ書き込みを行うデータ領域に対して少なくともデータ領域の使用有無とデータ開始アドレスとデータ長とを管理するためのアドレス管理テーブルが設けられた延命対策アドレス管理領域、を有するフラッシュメモリと、
フラッシュメモリヘ可変長データ書込む際に、前記延命対策アドレス管理領域の前記アドレス管理テーブルを参照し、書込みデータ開始アドレスを確定後、確定した書込みデータ開始アドレスにデータを書き込み、アドレス管理テーブルを更新し、新たなデータ書込み毎に異なるアドレスへ書き込む制御を行う制御部と、
を具備することを特徴とするフラッシュメモリ制御システム。
【請求項２】
前記制御部は、
データ開始アドレスが予め定めたアドレスと合致する際に、順次異なるアドレスに分散して書き込まれている複数の延命対策データを、データ開始アドレスから連続して書き込むことを特徴とする請求項１に記載のフラッシュメモリ制御システム。
【請求項３】
前記制御部は、
等二分割された第１の延命対策アドレス管理領域と第２の延命対策アドレス管理領域とで構成される前記延命対策アドレス管理領域に対して、データ書込み時に、それぞれの第１及び第２の延命対策アドレス管理領域に、連続的に同じ管理内容となるように記憶更新を指示することを特徴とする請求項１に記載のフラッシュメモリ制御システム。
【請求項４】
フラッシュメモリに対して、データ開始アドレスと長さでデータ種を管理するアドレス管理テーブルを有し、
データの書き込みの際にデータ種を指定した書込み要求時に前記アドレス管理テーブルを参照して、未使用状態のアドレスをそのデータ種の開始アドレスとして指定し、
前記データを記憶した後に前記アドレス管理テーブルを更新することにより、書き込み毎に異なるアドレスに可変長データを順次書き込むことを特徴とするフラッシュメモリ制御方法。
【請求項５】
前記可変長データを順次、異なるデータ領域に書き込むデータ開始アドレスが予め定めたアドレスと合致する際に、順次異なるアドレスに分散して書き込まれている複数の延命対策データを、データ開始アドレスから連続して書き込むことを特徴とする請求項４に記載のフラッシュメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリにおける書き換え回数等の記録動作を延命するフラッシュメモリ制御システムとその制御方法に関する。
【背景技術】
【０００２】
一般的に、フラッシュメモリは、記憶のための電気的な保持動作（保持電源供給）が不要な不揮発性メモリであり、定めた消去ブロック単位で電気的にデータを一括消去できる特徴を有している。
【０００３】
このフラッシュメモリには、構造的にデータの書き換え回数に上限があり、この回数を越えると、フラッシュメモリの製品寿命となる。つまり、情報処理装置等に搭載されたフラッシュメモリであれば、新たなものに交換する必要がある。従って、データ記憶領域において、特定の領域のみにデータの書き込み及び消去を行うのでなく、平均的に記憶消去動作を行わせて、フラッシュメモリの製品寿命を少しでも長引かせる種々の方法が提案されている。
【０００４】
例えば、特許文献１には、消去単位のセクタをページに分割し、ページ単位の有効／無効フラグ及び、使用／未使用マップでデータを管理して、小規模にデータを書き換える場合にはデータを順次格納する、フラッシュメモリの管理方法が提案されている。また、特許文献２においては、半導体記憶システムに搭載され、書き込み回数とそれに対応する書込み領域の開始アドレスと終了アドレスを格納する管理領域を持ち、書き込み動作毎に順次、終了アドレスをインクリメントして、メモリ領域全域に亘って使用するフラッシュメモリの管理方法が提案されている。さらに、特許文献３には、書き込み用とガベージコレクション用のフラッシュメモリを順番に使用して書込み、その書込み回数を平均化させて消去回数計算を簡略化するフラッシュメモリを複数使用した外部記憶装置のデータ記憶制御方法が提案されている。
【特許文献１】特開２００４−６２５５４号公報
【特許文献２】特開平４−３０３９９号公報
【特許文献３】特開平１１−１２６４８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
前述した各特許文献１乃至３に開示された管理技術は、論物変換テーブルを必要とし、いずれも論理アドレスと物理アドレスの管理、書き込み回数管理など非常に複雑な処理が必要であった。つまり、入力されるデータ長やデータ種が異なるデータに対して、消去ブロック単位で区分された全領域に対して、どの程度の書き込み回数や消去回数が行われたかを把握して管理しなければならなかった。
【０００６】
そこで本発明は、簡易に製品寿命を延命するフラッシュメモリ制御システムとその制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、一定のデータ長を有する複数のデータ領域に分割された延命対策データ領域、及び、データ書き込みを行うデータ領域に対して少なくともデータ領域の使用有無とデータ開始アドレスとデータ長とを管理するためのアドレス管理テーブルが設けられた延命対策アドレス管理領域、を有するフラッシュメモリと、フラッシュメモリヘ可変長データ書込む際に、前記延命対策アドレス管理領域の前記アドレス管理テーブルを参照し、書込みデータ開始アドレスを確定後、確定した書込みデータ開始アドレスにデータを書き込み、アドレス管理テーブルを更新し、新たなデータ書込み毎に異なるアドレスへ書き込む制御を行う制御部と、を具備するフラッシュメモリ制御システムを提供する。
【０００８】
また、フラッシュメモリに対して、データ開始アドレスと長さでデータ種を管理するアドレス管理テーブルを有し、データの書き込みの際にデータ種を指定した書込み要求時に前記アドレス管理テーブルを参照して、未使用状態のアドレスをそのデータ種の開始アドレスとして指定し、前記データを記憶した後に前記アドレス管理テーブルを更新することにより、書き込み毎に異なるアドレスに可変長データを順次書き込むフラッシュメモリ制御方法を提供する。更に、データ開始アドレスが予め定めたアドレスと合致する際に、順次異なるアドレスに分散して書き込まれている複数の延命対策データを、データ開始アドレスから連続して書き込むフラッシュメモリ制御方法も提供する。
【発明の効果】
【０００９】
本発明によれば、簡易に製品寿命を延命するフラッシュメモリ制御システムとその制御方法を提供することができる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照して本発明の実施形態について詳細に説明する。    
図１は、本発明のフラッシュメモリ制御システムにおける一実施形態に係るシステム全体構成を示すブロック図である。尚、図示する構成においては、本実施形態の要旨に係わる構成部位のみを示しており、例えば入力装置など通常のシステムに備えられている構成部位は、その説明を省略しているが備えられているものとする。
【００１１】
この制御システムは、後述するデータの書き込み、延命対策処理及びその他の処理を制御するフラッシュ制御装置１と、データや操作に必要な情報を表示する表示装置２と、プログラムやデータを格納する記憶装置３と、システム全体を制御する制御装置４と、各構成部位に電源を供給する電源５とから構成される。
【００１２】
フラッシュ制御装置１は、同期を取るための発振器１１と、外部との情報交換を行う入出カインタフェース１２と、システムメモリやプログラムの実行制御を含めＦＬＡＳＨ制御装置全体を制御するＭＰＵ１３と、ＭＰＵ１３がプログラムを実行するときに使用するＲＡＭ１４，例えば１２８ＫＢの容量を有するフラッシュメモリ１５とから構成され、それぞれが配線又はバスにより接続されている。
【００１３】
図２は、フラッシュメモリ１５の概念的な構成を示す図である。  
このフラッシュメモリ１５のアドレスは、一例として、０ｘ０００００から０ｘ２００００までに割り当てた例を示している。この例では、消去ブロックサイズを１ＫＢとして、計１２８個の消去ブロックから構成されている。割り当ての一例として、０ｘ０００００から０ｘ１９ＦＦＦまでの１０４ＫＢは通常データ領域２０３であり、ホスト側が指定したアドレスに読み出し又は書き込み行う領域である。次の０ｘ１Ａ０００から０ｘ１ＢＦＦＦまでの８ＫＢは、後述する延命対策アドレス管理領域２０２であり、延命対策データの書込みアドレスを管理するための領域である。さらに、０ｘ１Ｃ０００から０ｘ１ＦＦＦＦまでの１６ＫＢは延命対策データ領域２０１であり、書き込みアドレスを毎回変更して延命対策データを書き込む領域に割り当てている。
【００１４】
図３は、延命対策アドレス管理領域２０２における全体構成を示している。この構成において、０ｘ１Ａ０００から０ｘｌＡＦＦＦまでの４ＫＢは延命対策アドレス管理領域Ａ３０２とし、０ｘ１Ｂ０００から０ｘ１ＢＦＦＦまでの４ＫＢは延命対策アドレス管理領域Ｂ３０１とする。これらの延命対策アドレス管理領域Ａ３０２と延命対策アドレス管理領域Ｂ３０１は、同じ大きさの領域に分離され、同じ延命対策アドレス管理情報を二重化して格納している。アドレス管理領域は下位アドレスから昇順に使用する。この二重化は、延命対策アドレス管理領域のバックアップとして補償に用いる。例えば、通常、先に書き込みが行われる延命対策アドレス管理領域Ａ３０２と延命対策アドレス管理領域Ｂ３０１とが不一致であれば、後から書き込まれる延命対策アドレス管理領域Ｂ３０１の方がエラーの原因となる確率が高いため、延命対策アドレス管理領域Ａ３０２の管理情報を延命対策アドレス管理領域Ｂ３０１にコピーすることなどが考えられる。
【００１５】
図４は、延命対策アドレス管理領域２２における１消去ブロック（アドレス０ｘ１Ａ０００−０ｘ１Ａ４００）の構成について示す図である。  
ここでは、アドレス０ｘｌＡ０００からアドレス管理情報（２８Ｂｙｔｅ）を０−３３まで計３４群が連続して格納されている。アドレス管理情報は、０側から昇順に使用する。尚、アドレス管理情報構成の詳細は図５で後述する。続いて、アドレス０ｘ１Ａ３Ｂ８からアドレス管理情報の使用フラグ（２Ｂｙｔｅ）を０−３３まで３４群が連続して格納されている。
【００１６】
これらの使用フラグ（２Ｂ）は、アドレス管理情報が使用中であるか否かを判定するために用いるフラグである。ここでは、１つの使用フラグが１つのアドレス管理情報に対応する。具体的には、使用フラグ“０”は、アドレス管理情報の使用状態を示している。例えば、使用状態のときの値は、０ｘ１１１１であり、未使用状態のときの値は、０ｘＦＦＦＦである。使用フラグも同様に０から昇順に使用する。０ｘ１Ａ３ＦＣ−０ｘ１Ａ３ＦＤは、予約データとして用いて、０ｘＦＦを格納している。０ｘ１Ａ３ＦＥ−０ｘ１Ａ３ＦＦは、確認フラグ（２Ｂ）として用いて、本消去ブロックが延命対策アドレス管理領域２０２として初期化されているときには、固定値０ｘ１１１１が格納されている。
【００１７】
図５は、延命対策アドレス管理領域２０２に格納されているアドレス管理情報（２８Ｂ）の構成を示す図である。  
最下位アドレスから昇順にデータ１開始アドレス（４Ｂｙｔｅ）、データ１長（２Ｂｙｔｅ）、データ２開始アドレス（４Ｂ）、データ２長（２Ｂ）、データ３開始アドレス（４Ｂ）、データ３長（２Ｂ）、データ４開始アドレス（４Ｂ）、データ４長（２Ｂ）、不良ブロック番号（４Ｂｙｔｅ）の順に格納されている。データ開始アドレスは指定されたデータ番号の書き込み開始アドレスを示している。
【００１８】
データ長は、指定されたデータの長さをバイト長で示す。書き込み回数等が既定値を超えた場合や実際に動作不良となったブロック（前述した消去ブロックを示唆する）に対して指定される不良ブロック番号は、最大４群の不良ブロック番号を示している。最下位アドレスから昇順に数えた消去ブロック番号を１Ｂｙｔｅで示した情報であり、０ｘ０００００を含む消去ブロックを０（基準）とし、ここから昇順に１ずつ加算した数値で示している。正常時は０ｘＦＦで示し、不良ブロック発生時は０ｘ００−０ｘ７Ｆのいずれかの１Ｂｙｔｅを最下位アドレスから順に格納する。
【００１９】
図６は、延命対策アドレス管理領域２０２に格納されているアドレス管理情報格納例を示している。この例においては、使用フラグが使用状態である最上位アドレスのうちの使用フラグ（１−ｎ）は、３１である。即ち、アドレス管理情報３１が最新アドレス管理情報となっている。よって、最新データ開始アドレス、データ長は下記のようになる。  
データ１開始アドレス：０ｘ００１Ｃ４００  データ１長：２５６Ｂｙｔｅ  
データ２開始アドレス：０ｘ００１Ｃ７８０  データ２長：１２８Ｂｙｔｅ  
データ３開始アドレス：０ｘ００１Ｃ９Ｃ０  データ３長：  ６４Ｂｙｔｅ  
データ４開始アドレス：０ｘ００１ＣＡ００  データ４長：５１２Ｂｙｔｅ
このような例で、例えば不良ブロック番号が０ｘＦＦＦＦＦＦ７Ｃであれば、アドレス０ｘ１Ｆ０００−０ｘ１Ｆ３ＦＦが不良ブロックであり、それ以外の消去ブロックは正常となる。
【００２０】
図７は、延命対策データ領域２０１の一部である０ｘ１Ｃ０００−０ｘ１ＣＦＦＦの構成を示している。アドレス０ｘ１Ｃ０００には、データ１、データ２、６群のデータ３及び、データ１の順で格納されている。
【００２１】
また、現在有効である開始アドレスは、各データごとの最上位アドレスであり、データ１としては０ｘ１Ｃ４００（７０５）、データ２としては０ｘ１Ｃ７８０（７０８）、データ３としては０ｘ１Ｃ９ＣＯ（７１０）、データ４としては０ｘ１ＣＡ００（７１１）となる。
【００２２】
図８は、データ３における書込み後の延命対策データ領域２０１の一部である０ｘ１Ｃ０００−０ｘ１Ｄ１０００の構成例を示している。  
この構成において、０ｘ１ＣＣ００から連続してデータ１−４（８１２，８１３，８１４，８１５）が格納されている。尚、０ｘ１ＣＦＣＯ−０ｘ１ＣＦＦＦ（８１６）は未使用状態（空き）を示している。
【００２３】
図９は、ホスト側からフラッシュメモリに１５に書き込むデータの一構成例を示している。この構成例では、データ番号項目９０１、データ長項目４０２及びデータ項目９０３から構成される。データ番号項目９０１では、データ種別として１−４のいずれかの数値が指定される。データ長項目９０２では、データ長をバイト長で示し、データ項目９０３では、実データを指定する。この図９においては、データ１のデータ長が６４Ｂｙｔｅである一例を示している。
【００２４】
次に図１０に示すフローチャートを参照して、本実施形態の動作について説明する。  
まず、フラッシュ制御指示を入出カインタフェースから受信する（ステップＳ１）。その受信した指示が通常データ領域における読み書き処理の指示か否かを判定する（ステップＳ２）。この判定において、通常データ領域の読み書き処理であった場合には（ＹＥＳ）、フラッシュ通常データ領域における読み書き処理を行う（ステップＳ３）。具体的には、この指示が読み出し処理であった場合には、フラッシュ通常データ領域において指示されたアドレスから指示されたデータ長分を読み出す。一方、その指示が通常データ領域の書込み処理の場合には、ＦＬＡＳＨ通常データ領域の指示されたアドレスに指示されたデータを指示されたデータ長分書き込む。
【００２５】
前記ステップＳ２の判定で、通常データ領域における読み書き処理の指示ではなかった場合には（ＮＯ）、指示が延命対策データ領域の書込み指示であるか否かを判定する（ステップＳ４）。この判定で、指示が延命対策データ領域の書込み指示であった場合には（ＹＥＳ）、延命対策データ領域の書込み処理を実行する（ステップＳ５）。尚、延命対策データ領域の書込み処理は、図１１に示すサブルーチンにより後に詳細に説明する。
【００２６】
一方、ステップＳ４の判定で、指示が延命対策データ領域の書込み指示でなければ（ＮＯ）、指示が延命対策データ領域の読み出し指示か否かを判定する（ステップＳ６）。この判定で読み出し指示であれば（ＹＥＳ）、延命対策データ領域２３の読み出し処理を行う（ステップＳ７）。この延命対策データ領域２３の読み出し処理は、図１２に示すサブルーチンにより詳細に説明する。
【００２７】
ここで、延命対策データ領域の読み出し指示であるときのサブルーチンを、図１２を参照してフローチャートで説明する。  
ホスト側は読み出しデータとして、データ番号３と読み出しバッファを指定し、延命対策データ領域読み出し指示を行う。まず、延命対策アドレス管理領域に格納されている最新のアドレス管理情報を確認し（ステップＳ２１）、その最新の延命対策データ領域から読み出しを行う（ステップＳ２２）。
【００２８】
図１１に戻り、さらに、ステップＳ３におけるフラッシュ通常データ領域における読み書き処理、ステップＳ５における延命対策データ領域の書込み処理、及びステップＳ７における延命対策データ領域２３の読み出し処理の実行に対してエラーの発生の有無を判定する（ステップＳ８）。これは例えば、各サブルーチンでエラーの戻り値を返しているか、成功の戻り値を返しているかにより判定することができる。このエラー判定でエラーが発生していないと判定されたならば（ＮＯ）、正常に処理が終了したものと判断して、一連のシーケンスを終了する。
【００２９】
一方、ステップＳ８のエラー判定でエラーが発生したと判定されたならば（ＹＥＳ）、又はステップＳ６において、指示が延命対策データ領域２３の読み出し指示でなかった場合には（ＮＯ）、ホスト側にエラーを返して（ステップＳ９）、このシーケンスを終了する。
【００３０】
この時、エラー報告に対して必要な処理やユーザへの告知処理を行ってもよい。
【００３１】
ここで、図１１に示すフローチャートを参照して、ステップＳ５における延命対策データ領域の書込み処理について説明する。尚、ホスト側は書き込みデータとして、図９に示すデータ番号３（９０１）、データ長０ｘ４０（９０２）及びデータ本体（９０３）をそれぞれ指定し、延命対策データ領域２３における書込み指示を行う。また、本実施形態においてフラッシュメモリ１５の消去ブロックサイズは１ＫＢとし、消去ブロック３個毎に延命対策データ領域２３にデータ１−４を昇順に書き込むこととする。
【００３２】
まず、装置の制御部の指示によりＭＰＵ１３が延命対策アドレス管理領域２２に格納されているアドレス管理情報のうちの最新のものを確認する（ステップＳ１１）。尚このＳ１１の処理は、図１３を参照しながら後に詳述する。次に、この確認において、エラーが発生したか否かを判定する（ステップＳ１２）。この判定において、エラーが発生したならば（ＹＥＳ）、エラーの戻り値を返して（ステップＳ２０）リターンし、サブルーチンを終了する。一方、ステップＳ１２の判定でエラーが発生しなければ（ＮＯ）、延命対策データ領域２３のうち未使用状態である最上位アドレスへの書き込みを行う（ステップＳ１３）。この書き込み処理において、エラーが発生したか否かを判定する（ステップＳ１４）。この判定において、エラーが発生したならば（ＹＥＳ）、エラーの戻り値を返して（ステップＳ２０）リターンし、サブルーチンを終了する。
【００３３】
一方、ステップＳ１４の判定でエラーが発生しなければ（ＮＯ）、延命対策アドレス管理領域Ａの更新を行う（ステップＳ１５）。この更新において、エラーが発生したか否かを判定する（ステップＳ１６）。この判定において、エラーが発生したならば（ＹＥＳ）、エラーの戻り値を返して（ステップＳ２０）リターンし、サブルーチンを終了する。一方、このステップＳ１６の判定でエラーが発生しなければ（ＮＯ）、引き続き、同じものを延命対策アドレス管理領域Ｂに更新する（ステップＳ１７）。同様に、この更新においても、エラーが発生したか否かを判定する（ステップＳ１８）。この判定において、エラーが発生したならば（ＹＥＳ）、エラーの戻り値を返して（ステップＳ２０）リターンし、サブルーチンを終了する。一方、このステップＳ１８の判定でエラーが発生しなければ（ＮＯ）、成功の戻り値を返して（ステップＳ１９）リターンし、サブルーチンを終了する。
【００３４】
以下に、延命対策データ領域の書込み処理について詳細に説明する。  
延命対策データ領域（２０１）の書込み指示であるときの処理を図１１のフローチャートで説明する。その指示が延命対策データ領域の読み出しであるときの処理は図１２に示すフローチャートで説明する。
【００３５】
また、図１３に示すフローチャートを参照して、図１１のステップＳ１１におけるアドレス管理情報の確認処理について説明する。
【００３６】
まず、延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３１（０ｘ１ＡＢ６４−０ｘ１ＡＢ７Ｆ）と延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報３１（０ｘ１ＢＢ６４−０ｘ１ＢＢ７Ｆ）とのデータ比較処理を行う（ステップＳ３１）。尚この比較処理は、図１４を参照しながら後に詳述する。この比較処理において、エラーが発生したか否かを判定する（ステップＳ３２）。この判定において、エラーが発生したならば（ＹＥＳ）、エラーの戻り値を返して（ステップＳ３４）リターンし、サブルーチンを終了する。一方、比較処理においてエラーが発生しなければ（ＮＯ）、新アドレス管理情報として確定する（ステップＳ３３）。
【００３７】
次に、不良ブロック番号がアドレス管理情報と一致するか否かを判定する（ステップＳ３５）。この判定で、不良ブロック番号とアドレス管理情報とが一致すれば（ＹＥＳ）、ステップＳ３４に移行し、エラーの戻り値を返してリターンし、サブルーチンを終了する。一方、一致しなければ（ＮＯ）、成功の戻り値を返して（ステップＳ３６）リターンし、サブルーチンを終了する。
【００３８】
尚、現アドレス管理情報、新アドレス管理情報、現データ開始アドレス、新データ開始アドレスのいずれかが不良ブロックに該当する場合には、ホストにエラーを通知して処理を終了する。以降の説明を行うため、不良ブロックに該当しないものとする。
【００３９】
次に、図１４に示すフローチャートを参照して、延命対策アドレス管理領域Ａと延命対策アドレス管理領域Ｂデータ比較処理について説明する。
【００４０】
延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３１（０ｘ１ＡＢ６４−０ｘ１ＡＢ７Ｆ）と、延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報３１（０ｘ１ＢＢ６４−０ｘ１ＢＢ７Ｆ）を比較する（ステップＳ４１）。
【００４１】
次に、この比較において、全ての使用フラグに対して一致を確認したか否かを判定する（ステップＳ４２）、この判定で全ての使用フラグを確認した場合には（ＹＥＳ）、ホストにエラーの戻り値を返し、処理を終了する（ステップＳ４６）。一方、まだ全ての使用フラグを確認していない場合には（ＮＯ）、確認フラグ（２Ｂ）が固定値か否かを判定する（ステップＳ４３）。
【００４２】
このステップＳ４３の判定で確認フラグが固定値でなければ（ＮＯ）、いずれか片方が不一致か否かを判定する（ステップＳ４４）。この判定は、延命対策アドレス管理領域Ａ又はＢのいずれか一方の通常用いている延命対策アドレス管理領域に不具合が発生したか否かを見出すものである。このステップＳ４４の判定で片方が不一致でなければ（ＮＯ）、即ち、両方とも不一致であれば、ステップＳ４６に移行して、エラーの戻り値を返して（ステップＳ４６）リターンし、サブルーチンを終了する。一方、片方が不一致であれば（ＹＥＳ）、有効な使用フラグがあるか否かを判別する（ステップＳ４５）。このステップＳ４５の判定で、有効な使用フラグが無ければ、ステップＳ４６のエラーの戻り値を返してサブルーチンを終了する。一方、有効な使用フラグがある場合には（ＹＥＳ）、誤ったアドレス管理情報を更新して正しいアドレス管理情報に修正し、(ステップＳ５０)、成功の戻り値を返して(ステップＳ５１)、リターンする。
【００４３】
また、ステップＳ４３の判定で確認フラグ（２Ｂ）が固定値であれば（ＹＥＳ）、延命対策アドレス管理領域Ａ（３０２）と延命対策アドレス管理領域Ｂ（３０１）におけるそれぞれのアドレス管理情報３１の使用フラグが使用状態にあるか否かを判定する（ステップＳ４７）。
【００４４】
このステップＳ４７の判定で、共に使用フラグが使用状態であれば（ＹＥＳ）、それぞれのアドレス管理情報３１が一致するか否かを判定する（ステップＳ４８）。一方、ステップＳ４７で使用フラグが使用状態でない場合（ＮＯ）又は、ステップＳ４８でアドレス管理情報３１が一致しなければ（ＮＯ）、１つ前の使用フラグに戻り確認し（ステップＳ４９）、ステップＳ４２に戻る。また、ステップＳ４８の判定でアドレス管理情報３１が一致したならば（ＹＥＳ）、成功の戻り値を返して（ステップＳ５１）、リターンする。
【００４５】
次に、図１５に示すフローチャートを参照して、延命対策データ領域への書き込み処理（Ｓ５）について説明する。  
新データ開始アドレス０ｘ１ＣＣ００と延命対策データ領域の開始アドレス０ｘ１Ｃ０００のオフセットが消去ブロックサイズ１ＫＢの３個分のサイズ（３ＫＢ）の整数倍であり且つ、最新の最下位アドレスへの書き込みか否かを判定する（ステップＳ６１）。この判定で、整数倍であれば（ＹＥＳ）、アドレス管理情報３１（図６）のデータ１−４を順に書き込む（ステップＳ６２）。
【００４６】
まず、アドレス管理情報３１（図６）のデータ１開始アドレス項目、データ１長項目を参照し、該当アドレスからデータ１を読み出し、データ１を延命対策データ領域（２０１）アドレス０ｘ１ＣＣ００から０ｘ１ＣＤ００に書き込む。以下同様に、アドレス管理情報３１のデータ２開始アドレス項目、データ２長項目を参照し、該当アドレスからデータ２を読み出し、データ２を延命対策データ領域（２０１）アドレス０ｘ１ＣＤ００から０ｘ１ＣＤ８０に書き込む。データ３として、ユーザから指定された図９のデータ本体を延命対策データ領域（２０１）アドレス０ｘ１ＣＤ８０から０ｘ１ＣＤＣＯに書き込む。アドレス管理情報３１（図６）のデータ４開始アドレス項目、データ４長項目を参照し、該当アドレスからデータ４を読み出し、データ４を延命対策データ領域（２０１）アドレス０ｘ１ＣＤＣＯから０ｘ１ＣＦＣＯに書き込む。次に、新データ開始アドレス０ｘ１ＣＣ００の直前の消去ブロック３個分として、延命対策データ領域（２０１）アドレス０ｘ１Ｃ０００から消去ブロック３個を消去する（ステップＳ６４）。その後、後述するステップＳ６５に移行する。
【００４７】
一方、ステップＳ６１の判定で、整数倍ではなく且つ／又は最下位アドレスへの書き込みでなかった場合には（ＮＯ）、ユーザから指定されたデータ本体を延命対策データ領域（２０１）アドレス０ｘ１ＣＦＣＯから０ｘ１ＣＦＦＦに書き込む（ステップＳ６３）。
【００４８】
次に、書き込み処理、及び消去処理が正常終了しているか否かを判別する（ステップＳ６５）。この判定で、書き込み処理、及び消去処理が正常終了していたならば（ＹＥＳ）、ホストに成功の戻り値を返して（ステップＳ６７）リターンし、サブルーチンを終了する。一方、書き込み処理、及び消去処理が正常終了していなければ（ＮＯ）、不良ブロック番号を更新し、ホストにエラーの戻り値を返して終了する（ステップＳ６６）。
【００４９】
次に、図１６に示すフローチャートを参照して、図１１のステップＳ１３に示した延命対策アドレス管理領域Ａ更新について説明する。尚、説明を省略するが、図１１のステップＳ１７に示す延命対策アドレス領域Ｂの更新処理も同様の処理を行う。  
まず、消去ブロックの最下位アドレスへの書き込み時のみ、前のブロックの最上位アドレス管理情報をこの消去ブロックの最下位アドレスにコピーし（ステップＳ７１）、そのコピーが正しく行われたかを判定する（ステップＳ７２）。この判定で、正しく行われたならば（ＹＥＳ）、アドレス管理情報の書き込みを行う（ステップＳ７３）。この書き込みは、例えば、延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３２（０ｘ１ＡＢ８０−０ｘ１ＡＢ９Ｂ）のデータ１開始アドレスに０ｘ１ＣＣ００を書き込む。データ１長に０ｘ０１００を書き込む。データ２開始アドレスに０ｘ１ＣＤ００を書き込む。データ２長に０ｘ００８０を書き込む。データ３開始アドレスに０ｘ１ＣＤ８０を書き込む。さらに、データ３長は０ｘ００４０を、データ４開始アドレスに０ｘ１ＣＤＣＯを書き込む。データ４長に０ｘ０２００を書き込む。次に、これらの書き込みが正しく行われたかを判定する（ステップＳ７６）。
【００５０】
一方、ステップＳ７２の判定において、正しくコピーされなかった場合（ＮＯ）及びステップ７６の判定において、正しく書き込みが行われなかった場合（ＮＯ）、不良ブロック番号を更新し（ステップＳ７４）、ホストにエラー値を返して（ステップＳ７５）リターンし、サブルーチンを終了する。
【００５１】
また、ステップＳ７６の判定において、正しく書き込みが行われたならば（ＹＥＳ）、使用フラグ３２を使用状態に更新する（ステップＳ７７）。次に、消去ブロックの最下位アドレスへの書き込み時のみ、前のブロックを消去し、確認フラグの書き込みを行う（ステップＳ７８）。次に、ホストに成功の戻り値を返して（ステップＳ７９）リターンし、サブルーチンを終了する。
【００５２】
次に前述した処理において、データ３を書き込む場合について説明する。  
ホスト側は書き込みデータとして、図９に示すデータ番号３（９０１）とデータ長０ｘ４０（９０２）とデータ本体（９０３）を指定し、延命対策データ領域（２０１）書込み指示を行う（Ｓ５）。  
まず、延命対策アドレス管理領域（２０２）に格納されているアドレス管理情報確認処理（図１１のＳ１１、図１３のＳ３１、図１４のＳ４１）を行う。延命対策アドレス管理領域Ａ（３０２）の最上位アドレスの消去ブロックであるアドレス０ｘ１ＡＣ００−０ｘ１ＡＦＦＦの確認フラグ（０ｘ１ＡＦＦＥ）を確認し（図14 Ｓ４３）、０ｘ１１１１と一致するか否かを判定し、一致する場合は次に移行する。不一致の場合には、次の消去ブロックの確認フラグを確認する。次に使用フラグを上位アドレスから順に確認し、０ｘ１１１１と一致する使用フラグ番号があるか否かを判定する。
【００５３】
この判定で、一致する使用フラグがないことからアドレス０ｘ１Ａ８００−０ｘ１ＡＣ００の使用フラグが消去ブロックである、延命対策アドレス管理領域Ａ（３０２）アドレス０ｘ１Ａ８００−０ｘ１ＡＢＦＦ（図６）の確認フラグ（０ｘ１ＡＢＦＥ）を確認し（図１４  Ｓ４３）、０ｘ１１１１と一致する場合は次に移行する。一方、不一致の場合には、次の消去ブロックの確認フラグを確認する。
【００５４】
次に、使用フラグを上位アドレスから順に確認し、０ｘ１１１１と一致するか否かを判定する。この判定で一致するならば、使用フラグ番号があるか否かを確認する。データ３であるため、一致する使用フラグ番号が３２であることから、アドレス管理情報３２が現在有効な情報であることがわかる。そのアドレス管理情報３２を参照する。
【００５５】
使用フラグ３２（０ｘ１ＡＢＦ８）の延命対策アドレス管理領域Ａ（３０２）の最下位アドレス（０ｘ１Ａ０００）からのオフセットは、０ｘＢＦ８である。これに対応する延命対策アドレス管理領域Ｂ（３０１）の最下位アドレス（０ｘ１Ｂ０００）から同じオフセット０ｘＢＦ８である使用フラグ３２（０ｘ１ＢＢＦ８）を参照する（図１４  Ｓ４７）。この使用フラグが０ｘ１１１１と一致する場合は次に移行する（図１４  Ｓ４８）。一方、不一致の場合は次の使用フラグを確認する。
【００５６】
アドレス管理情報３２（０ｘ１ＡＢ８０−０ｘ１ＡＢ９Ｂ）の延命対策アドレス管理領域Ａ（３０２）の最下位アドレス（０ｘ１Ａ０００）からのオフセットは、０ｘＢ８０である。延命対策アドレス管理領域Ｂ（３０１）の最下位アドレス（０ｘ１Ｂ０００）から同じオフセット０ｘＢ８０であるアドレス管理情報３２（０ｘ１ＢＢ８０−０ｘ１ＢＢ９Ｂ）を参照する。
【００５７】
延命対策アドレス管理領域Ａのアドレス管理情報３２（０ｘ１ＡＢ８０−０ｘ１ＡＢ９Ｂ）と延命対策アドレス管理領域Ｂのアドレス管理情報３２（０ｘ１ＢＢ８０−０ｘ１ＢＢ９Ｂ）を比較する（図１４  Ｓ４８）。一致したならば、次に移行する（図１４  Ｓ５１）。延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３２（０ｘ１ＡＢ８０−０ｘ１ＡＢ９Ｂ）に“１”を加算した、アドレス管理情報３３（０ｘ１ＡＢ９Ｃ−０ｘ１ＡＢＢ７）が延命対策アドレス管理領域Ａ（３０２）の新アドレス管理情報と確定する。同様に、延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報３２（０ｘ１ＢＢ８０−０ｘ１ＢＢ９Ｂ）に“１”加算した、アドレス管理情報３３（０ｘ１ＢＢ９Ｃ−０ｘ１ＢＢＢ７）が延命対策アドレス管理領域Ｂ（３０１）の新アドレス管理情報と確定する（図１３  Ｓ３３）。
【００５８】
次に、アドレス管理情報（図６）の開始アドレス項目１−４を参照して開始アドレスを比較し、最上位アドレスのデータ番号が４であり、開始アドレスは０ｘ１ＣＤＣＯであることがわかる。データ４長を参照し、開始アドレス０ｘ１ＣＤＣＯにデータ４長０ｘ０２００を加算し、新データ開始アドレスが０ｘ１ＣＦＣＯと確定する。
【００５９】
アドレス管理情報（図５）の不良ブロック番号項目を参照し(図１３  Ｓ３５)、不良ブロック番号は０ｘ７Ｃであり、アドレス０ｘ１Ｆ０００−０ｘ１Ｆ３ＦＦが不良ブロックであり、それ以外の消去ブロックは正常であることがわかる。現アドレス管理情報、新アドレス管理情報、現データ開始アドレス、新データ開始アドレスのいずれも不良ブロックに該当しないため次に移行する（図１３  Ｓ３６）。
【００６０】
次に延命対策データ領域（２０１）への書き込みを行う（Ｓ１３）。新データ開始アドレス０ｘ１ＣＦＣＯと延命対策データ領域の開始アドレス０ｘ１Ｃ０００のオフセットが消去ブロックサイズ１ＫＢの３個分のサイズ（３ＫＢ）の整数倍であるか否かを判定する（図１５  Ｓ６１）。
【００６１】
この判定で整数倍でないことを確認する。そこで、データ３として、ユーザから指定されたデータ本体を延命対策データ領域（２０１）アドレス０ｘ１ＣＦＣＯから０ｘ１ＣＦＦＦに書き込む（Ｓ１３，Ｓ６３）。
【００６２】
次に、延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３３（０ｘ１ＡＢ９Ｃ−０ｘ１ＡＢＢ７）のデータ１開始アドレス、データ１長、データ２開始アドレス、データ２長、データ４開始アドレス、データ４長、不良ブロック番号について、アドレス管理情報３２（０ｘ１ＡＢ８０−０ｘ１ＡＢ９Ｂ）と同じデータを書き込む（Ｓ１５）。
【００６３】
データ３開始アドレスは新データ開始アドレスとして、０ｘ１ＣＦＣＯ、データ３長は０ｘ００４０を書き込む（Ｓ７３）。使用フラグ３２を使用状態に更新する（Ｓ１５，Ｓ７７）。
【００６４】
そして、延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報３３（０ｘ１ＢＢ９Ｃ−０ｘ１ＢＢＢ７）のデータ１開始アドレス、データ１長、データ２開始アドレス、データ２長、データ３開始アドレス、データ３長、データ４開始アドレス、データ４長、不良ブロック番号も同様に更新する（Ｓ７３）。そして、使用フラグ３３を使用状態に更新する (Ｓ１７、Ｓ７７)。ユーザに書込み成功結果を通知し、処理を終了する（Ｓ１９）。
【００６５】
次に前述した処理の次に、再度データ３を書き込む場合について説明する。
【００６６】
ホスト側は、書き込みデータとして、図９に示すデータ番号３（９０１）とデータ長０ｘ４０（９０２）とデータ本体（９０３）を指定し、延命対策データ領域（２０１）書込み指示を行う（Ｓ５）。
【００６７】
まず、延命対策アドレス管理領域（２０２）に格納されているアドレス管理情報確認処理（図１１  Ｓ１１、図１３）を行う。延命対策アドレス管理領域Ａ（３０２）の最上位アドレスの消去ブロックである０ｘ１ＡＣ００−０ｘ１ＡＦＦＦの確認フラグ（０ｘ１ＡＦＦＥ）が、０ｘ１１１１と一致するか否かを判定し(Ｓ４３)、次に移行する。この不一致の場合は、次の消去ブロックの確認フラグを確認する。次に、使用フラグを上位アドレスから順に確認し、０ｘ１１１１と一致する使用フラグ番号があるか否かを判定する。この判定において、一致する使用フラグがないことから、次の消去ブロックである、０ｘ１Ａ８００−０ｘ１ＡＢＦＦ（図６）の確認フラグ（０ｘ１ＡＢＦＥ）を確認し、０ｘ１１１１と一致するか否かを判定する。この判定で一致する場合は次に移行する。一方、不一致の場合には、次の消去ブロックの確認フラグを確認する。
【００６８】
次に使用フラグを上位アドレスから順に確認し、０ｘ１１１１と一致する使用フラグ番号があるか否かを判定する。この判定で、一致する使用フラグ番号が３３であれば、アドレス管理情報３３が現在有効な情報であることがわかる。そのアドレス管理情報３３を参照する。使用フラグ３３（０ｘ１ＡＢＦＡ）の延命対策アドレス管理領域Ａ（３０２）の最下位アドレス（０ｘ１Ａ０００）からのオフセットは、０ｘＢＦＡである。これに対応する延命対策アドレス管理領域Ｂ（３０１）の最下位アドレス（０ｘ１Ｂ０００）から同じオフセット０ｘＢＦＡである使用フラグ３３（０ｘ１ＢＢＦＡ）を参照する。この使用フラグが０ｘ１１１１と一致するか否かを判定する（Ｓ４７）。この判定で一致する場合は、次に移行する。一方、不一致であった場合は、次の使用フラグを確認する。
【００６９】
アドレス管理情報３３（０ｘ１ＡＢ９Ｃ−０ｘ１ＡＢＢ７）の延命対策アドレス管理領域Ａ（３０２）の最下位アドレス（０ｘ１Ａ０００）からのオフセットは、０ｘＢ９Ｃである。延命対策アドレス管理領域Ｂの最下位アドレス（０ｘ１Ｂ０００）から同じオフセット０ｘＢ９Ｃであるアドレス管理情報３３（０ｘ１ＢＢ９Ｃ−０ｘ１ＢＢＢ７）を参照する。延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３３（０ｘ１ＡＢ９Ｃ−０ｘ１ＡＢＢ７）と延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報３３（０ｘ１ＢＢ９Ｃ−０ｘ１ＢＢＢ７）を比較する（Ｓ４８）。この比較において、一致するため次に移行する（Ｓ５１）。
【００７０】
延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３３（０ｘ１ＡＢ９Ｃ−０ｘ１ＡＢＢ７）に“１”加算させると、最大管理番号３３を超過する。このため、次の消去ブロックの最下位アドレスを計算し、アドレス管理情報０（０ｘ１ＡＣ００−０ｘ１ＡＣＦＦ）が延命対策アドレス管理領域Ａ（３０２）の新アドレス管理情報と確定する。同様に、延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報３３（０ｘ１ＢＢ９Ｃ−０ｘ１ＢＢＢ７）に“１”加算すると管理番号３３を超過する。このため、次の消去ブロックの最下位アドレスを計算し、アドレス管理情報０（０ｘ１ＢＣ００−０ｘ１ＢＣＦＦ）が延命対策アドレス管理領域Ｂ（３０１）の新アドレス管理情報と確定する（Ｓ３３）。
【００７１】
新しい消去ブロックの最下位アドレスヘの書き込みなので、前のアドレス管理情報３３（０ｘ１ＡＢ９Ｃ−０ｘ１ＡＢＢ７）を参照し、この情報を延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報０（０ｘ１ＡＣ００−０ｘ１ＡＣ１Ｂ）に書き込む。（Ｓ７１）
使用フラグ０を使用状態に更新する。同様に、この情報を延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報０（０ｘ１ＢＣ００−０ｘ１ＢＣ１Ｂ）に書き込む。使用フラグ０を使用状態に更新する。
【００７２】
次にアドレス管理情報３３（０ｘ１ＡＢ９Ｃ−０ｘ１ＡＢＢ７）の開始アドレス項目１−４を参照して大きさを比較する。この比較において、最上位アドレスのデータ番号が３であれば、開始アドレスは０ｘ１ＣＦＣＯであることがわかる。データ３長を参照し、開始アドレス０ｘ１ＣＦＣＯにデータ３長０ｘ０４０を加算し、新データ開始アドレスが０ｘ１Ｄ０００と確定する（Ｓ３３）。
【００７３】
アドレス管理情報（図５）の不良ブロック番号項目を参照する（Ｓ３５）。不良ブロック番号は０ｘ７Ｃであり、アドレス０ｘ１Ｆ０００−０ｘ１Ｆ３ＦＦが不良ブロックであり、それ以外の消去ブロックは正常であることがわかる。現アドレス管理情報、新アドレス管理情報、現データ開始アドレス、新データ開始アドレスのいずれも不良ブロックに該当しないため、次に移行する（Ｓ３６）。
【００７４】
次に、延命対策データ領域（２０１）への書き込みを行う（Ｓ１３）。新データ開始アドレス０ｘ１Ｄ０００と延命対策データ領域（２０１）の開始アドレス０ｘ１Ｃ０００のオフセットが消去ブロックサイズ１ＫＢの３個分のサイズ（３ＫＢ）の整数倍であるか否かを判定する（Ｓ６１）。この判定で、整数倍でないことが確認される。そこで、データ３として、ユーザから指定されたデータ本体を０ｘ１Ｄ０００から０ｘ１Ｄ０３Ｆに書き込む（Ｓ６３）。
【００７５】
次に延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報１（０ｘ１ＡＣ１Ｃ−０ｘ１ＡＣ３７）のデータ１開始アドレス、データ１長、データ２開始アドレス、データ２長、データ４開始アドレス、データ４長、不良ブロック番号について、アドレス管理情報３３（０ｘ１ＡＢ９Ｃ−０ｘ１ＡＢＢ７）と同じデータを書き込む。データ３開始アドレスは新データ開始アドレスとして０ｘ１Ｄ０００、データ３長は０ｘ００４０を書き込む（１６０３）（Ｓ７３）。使用フラグ１を使用状態に更新する（Ｓ７７、Ｓ１５）。
【００７６】
そして、延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報１（０ｘ１ＢＣ１Ｃ−０ｘ１ＢＣ３７）のデータ１開始アドレス、データ１長、データ２開始アドレス、データ２長、データ３開始アドレス、データ３長、データ４開始アドレス、データ４長、不良ブロック番号も同様に更新する(Ｓ７３)。そして、使用フラグ１を使用状態に更新する（Ｓ７７、Ｓ１７）。
【００７７】
次に延命対策アドレス管理領域Ａ（３０２）の古いアドレス管理情報を含む消去ブロック１個（０ｘ１Ａ８００−０ｘ１ＡＢＦＦ）を消去し、確認フラグ（０ｘ１ＡＢＦＥ）を書き込む。続いて延命対策アドレス管理領域Ｂ（３０１）の古いアドレス管理情報を含む消去ブロック１個（０ｘ１Ｂ８００−０ｘ１ＢＢＦＦ）を消去し、確認フラグ（０ｘ１ＢＢＦＥ）を書き込む（Ｓ７８）。ユーザに書込み成功結果を通知し、処理を終了する（Ｓ７９）。
【００７８】
前述した処理の次に、再々度データ３を書き込む場合について説明する。  
ホスト側は書き込みデータとして、図９のデータ番号３（９０１）とデータ長０ｘ４０（９０２）とデータ本体（９０３）を指定し、延命対策データ領域（２０１）書込み指示を行う（Ｓ５）。まず、延命対策アドレス管理領域（２０２）に格納されているアドレス管理情報確認処理（Ｓ１１、図１３）を行う。
【００７９】
延命対策アドレス管理領域Ａ（３０２）の最上位アドレスの消去ブロックである０ｘ１ＡＣ００−０ｘ１ＡＦＦＦの確認フラグ（０ｘ１ＡＦＦＥ）を確認し、０ｘ１１１１と一致するか否かを判定する（Ｓ４３）。この判定で一致する場合には、次に移行する。一方、不一致の場合には、次の消去ブロックの確認フラグを確認する。
【００８０】
次に使用フラグを上位アドレスから順に確認し、０ｘ１１１１と一致する使用フラグ番号があるか否かを判定する。この判定において、一致する使用フラグ番号が“１”であることから、アドレス管理情報１（０ｘ１ＡＣ１Ｃ−０ｘ１ＡＣ３７）が現在有効な情報であることがわかる。そのアドレス管理情報１を参照する。
【００８１】
使用フラグ１（０ｘ１ＡＦＢ８）の延命対策アドレス管理領域Ａの最下位アドレス（０ｘ１Ａ０００）からのオフセットは、０ｘＦＢ８である。これに対応する延命対策アドレス管理領域Ｂの最下位アドレス（０ｘ１Ｂ０００）から同じオフセット０ｘＦＢ８である使用フラグ１（０ｘ１ＢＦＢ８）を参照する。この使用フラグが０ｘ１１１１と一致するか否かを判定する（Ｓ４７）。一致する場合は次に移行する。一方、不一致の場合には、次の使用フラグを確認する（Ｓ４９）。
【００８２】
アドレス管理情報１（０ｘ１ＡＣ１Ｃ−０ｘ１ＡＣ３７）の延命対策アドレス管理領域Ａ（３０２）の最下位アドレス（０ｘ１Ａ０００）からのオフセットは、０ｘＣ１Ｃである。延命対策アドレス管理領域Ｂの最下位アドレス（０ｘ１Ｂ０００）から同じオフセット０ｘＣ１Ｃであるアドレス管理情報１（０ｘ１ＢＣ１Ｃ−０ｘ１ＢＣ３７）を参照する。
【００８３】
延命対策アドレス管理領域（３０２）のアドレス管理情報１（０ｘ１ＡＣ１Ｃ−０ｘ１ＡＣ３７）と延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報１（０ｘ１ＢＣ１Ｃ−０ｘ１ＢＣ３７）を比較する。延命対策アドレス管理領域Ｂ（３０１）の確認フラグが０ｘ１１１１と不一致であり、かつ、延命対策アドレス管理領域Ａ（３０２）の確認フラグが０ｘ１１１１と一致し（Ｓ４４）、使用フラグ１が有効状態である場合（Ｓ４５）は、アドレス管理領域Ａ（３０２）の最新アドレス管理情報であるアドレス管理情報１（０ｘ１ＡＣ１Ｃ−０ｘ１ＡＣ３７）が正しいアドレス管理情報であると決定する。
【００８４】
そこで、延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報１（０ｘ１ＡＣ１Ｃ−０ｘ１ＡＣ３７）を読み出し、アドレス管理情報２（０ｘ１ＡＣ３８−０ｘ１ＡＣ５３）に同じ情報を格納する。
【００８５】
そして使用フラグ２（０ｘ１ＡＦＢＡ）を使用状態に更新する。次に延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報２（０ｘ１ＢＣ３８−０ｘ１ＢＣ５３）に同じ情報を格納し、使用フラグ２（０ｘ１ＢＦＢＡ）を使用状態に更新する（１４１０）（Ｓ５０）。延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報２に“１”加算し、アドレス管理情報３（０ｘ１ＡＣ５４−０ｘ１ＡＣ６Ｆ）が延命対策アドレス管理領域Ａ（３０２）の新アドレス管理情報と確定する（Ｓ３３）。
【００８６】
同様に、延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報２に１加算し、アドレス管理情報３（０ｘ１ＢＣ５４−０ｘ１ＢＣ６Ｆ）が延命対策アドレス管理領域Ｂ（３０１）の新アドレス管理情報と確定する（Ｓ３３）。次に、アドレス管理情報３（０ｘ１ＡＣ５４−０ｘ１ＡＣ６Ｆ）の開始アドレス項目１−４を参照して大きさを比較し、最上位アドレスのデータ番号が３であり、開始アドレスは０ｘ１Ｄ０００であることがわかる。
【００８７】
データ３長を参照し、開始アドレス０ｘ１Ｄ０００にデータ３長０ｘ０４０を加算し、新データ開始アドレスが０ｘ１Ｄ０４０と確定する。アドレス管理情報（図５）の不良ブロック番号項目を参照し、不良ブロック番号は０ｘ７Ｃであり、アドレス０ｘ１Ｆ０００−０ｘ１Ｆ３ＦＦが不良ブロックであり、それ以外の消去ブロックは正常であることがわかる。現アドレス管理情報、新アドレス管理情報、現データ開始アドレス、新データ開始アドレスのいずれも不良ブロックに該当しないため（Ｓ３５）、次に移行する（Ｓ３６）。
【００８８】
次に延命対策データ領域（２０１）への書き込みを行う。新データ開始アドレス０ｘ１Ｄ０４０と延命対策データ領域（２０１）の開始アドレス０ｘ１Ｃ０００のオフセットが消去ブロックサイズ１ＫＢの３個分のサイズ（３ＫＢ）の整数倍であるかどうかを確認し、整数倍でないことを確認する（Ｓ６１）。そこで、データ３として、ユーザから指定されたデータ本体を０ｘ１Ｄ０４０から０ｘ１Ｄ０７Ｆに書き込む（Ｓ６３）。次に延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３（０ｘ１ＡＣ５４−０ｘ１ＡＣ６Ｆ）のデータ１開始アドレス、データ１長、データ２開始アドレス、データ２長、データ４開始アドレス、データ４長、不良ブロック番号について、アドレス管理情報２（０ｘ１ＡＣ３８−０ｘ１ＡＣ５３）と同じデータを書き込む。データ３開始アドレスは新データ開始アドレスとして０ｘ１Ｄ０４０、データ３長は０ｘ００４０を書き込む（Ｓ７３）。使用フラグ３を使用状態に更新する（Ｓ７７）。そして、延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報３（０ｘ１ＢＣ５４−０ｘ１ＢＣ６Ｆ）のデータ１開始アドレス、データ１長、データ２開始アドレス、データ２長、データ３開始アドレス、データ３長、データ４開始アドレス、データ４長、不良ブロック番号も同様に更新する（Ｓ１７）。つまり、延命対策アドレス管理領域Ａ（３０２）と延命対策アドレス管理領域Ｂ（３０１）とは全く同じデータを保持している。延命対策アドレス管理領域Ｂ（３０１）は延命対策アドレス管理領域Ａ（３０２）に対して、バックアップとして機能する。そして、使用フラグ３を使用状態に更新する。ユーザに書込み成功結果を通知し、処理を終了する。
【００８９】
次に、延命対策データ領域の読み出し指示があるとき(Ｓ７)の処理を説明する。
【００９０】
延命対策アドレス管理領域Ａ（３０２）の最上位アドレスの消去ブロックである０ｘ１ＡＣ００−０ｘ１ＡＦＦＦの確認フラグ（０ｘ１ＡＦＦＥ）を確認し、０ｘ１１１１と一致するか否かを判定する（Ｓ４３）。
【００９１】
この判定において、一致する場合には次に移行する。不一致の場合は、次の消去ブロックの確認フラグを確認する。次に使用フラグを上位アドレスから順に確認し、０ｘ１１１１と一致する使用フラグ番号があるか否かを判定する。この判定では、一致する使用フラグ番号が３であることから、アドレス管理情報３（０ｘ１ＡＣ５４−０ｘ１ＡＣ６Ｆ）が現在有効な情報であることがわかる。
【００９２】
そのアドレス管理情報３を参照する。使用フラグ３（０ｘ１ＡＦＢＣ）の延命対策アドレス管理領域Ａの最下位アドレス（０ｘ１Ａ０００）からのオフセットは、０ｘＦＢＣである。これに対応する延命対策アドレス管理領域Ｂの最下位アドレス（０ｘ１Ｂ０００）から同じオフセット０ｘＦＢＣである使用フラグ３（０ｘ１ＢＦＢＣ）を参照する。この使用フラグが０ｘ１１１１と一致するか否かを判定する（Ｓ４７）。この判定で一致する場合は、次に移行する。一方、不一致の場合は、次の使用フラグを確認する。
【００９３】
次に、アドレス管理情報３（０ｘ１ＡＣ５４−０ｘ１ＡＣ６Ｆ）の延命対策アドレス管理領域Ａ（３０２）の最下位アドレス（０ｘ１Ａ０００）からのオフセットは、０ｘＣ５４である。延命対策アドレス管理領域Ｂ（３０１）の最下位アドレス（０ｘ１Ｂ０００）から同じオフセット０ｘＣ５４であるアドレス管理情報３（０ｘ１ＢＣ５４−０ｘ１ＢＣ６Ｆ）を参照する。
【００９４】
延命対策アドレス管理領域Ａ（３０２）のアドレス管理情報３（０ｘ１ＡＣ５４−０ｘ１ＡＣ６Ｆ）と延命対策アドレス管理領域Ｂ（３０１）のアドレス管理情報３（０ｘ１ＢＣ５４−０ｘ１ＢＣ６Ｆ）を比較する（Ｓ４８）。本情報が一致するので、アドレス管理情報３が現アドレス管理情報と確定する。（Ｓ２１）
アドレス管理情報（図５）の不良ブロック番号項目を参照し、不良ブロック番号は０ｘ７Ｃであり、アドレス０ｘ１Ｆ０００−０ｘ１Ｆ３ＦＦが不良ブロックであり、それ以外の消去ブロックは正常であることがわかる。現アドレス管理情報、現データ開始アドレスのいずれも不良ブロックに該当しないため次に移行する。
【００９５】
次にアドレス管理情報３（０ｘ１ＡＣ５４−０ｘ１ＡＣ６Ｆ）のデータ３開始アドレス項目を参照し、０ｘ１Ｄ０４０であることがわかる。データ３長項目を参照し、０ｘ４０であることがわかる。延命対策データ領域（２０１）アドレス０ｘ１Ｄ０４０からデータ長０ｘ４０分のデータを読み出し、指定された読み出しバッファに書き込む（Ｓ２２）。ユーザに読み出し成功結果を通知し、処理を終了する。
【００９６】
本実施形態では、以下のような効果を得ることができる。
【００９７】
（１）フラッシュメモリの書き込みデータ数を固定値にし、書き込む度に前回書込みデータのサイズ分加算したアドレスに書き込むことにより、書込み回数を管理することなく、簡易的に延命対策を行うことができる。論物変換テーブル、書込み回数などを管理しない簡易的な方法であるため、実装が容易であり、開発期間、開発規模を縮小することが可能になる。
【００９８】
（２）一定消去ブロック毎に書き込みデータをまとめて書き込むことにより、延命対策データ読み出し時間を短縮することができる。
【図面の簡単な説明】
【００９９】
【図１】本発明のフラッシュメモリ制御システムにおける一実施形態に係るシステム全体構成を示すブロック図である。
【図２】フラッシュメモリの概念的な構成を示す図である。
【図３】延命対策アドレス管理領域における全体構成を示している。
【図４】延命対策アドレス管理領域における１消去ブロックの構成について示す図である。
【図５】延命対策アドレス管理領域に格納されているアドレス管理情報の構成を示す図である。
【図６】延命対策アドレス管理領域に格納されているアドレス管理情報格納例を示す図である。
【図７】延命対策データ領域の一部の構成を示す図である。
【図８】データ３における書込み後の延命対策データ領域の一部の構成例を示す図である。
【図９】ホスト側からフラッシュメモリに書き込むデータの一構成例を示す図である。
【図１０】本実施形態の動作について説明するためのフローチャートである。
【図１１】延命対策データ領域の書込み処理について説明するためのフローチャートである。
【図１２】延命対策データ領域の読み出し処理のサブルーチンについて説明するためのフローチャートである。
【図１３】アドレス管理情報の確認処理の前半部分について説明するためのフローチャートである。
【図１４】アドレス管理情報リカバリ処理について説明するためのフローチャートである。
【図１５】延命対策データ領域への書き込み処理について説明するためのフローチャートである。
【図１６】延命対策アドレス管理領域Ａ更新について説明するためのフローチャートである。
【符号の説明】
【０１００】
１…フラッシュ制御装置、２…表示装置、３…記憶装置、４…制御装置、５…電源、１１…発振器、１２…入出カインタフェース、１３…ＭＰＵ、１４…ＲＡＭ、１５…フラッシュメモリ。
【図１】
2008065646.tif 000003
【図２】
2008065646.tif 000004
【図３】
2008065646.tif 000005
【図４】
2008065646.tif 000006
【図５】
2008065646.tif 000007
【図６】
2008065646.tif 000008
【図７】
2008065646.tif 000009
【図８】
2008065646.tif 000010
【図９】
2008065646.tif 000011
【図１０】
2008065646.tif 000012
【図１１】
2008065646.tif 000013
【図１２】
2008065646.tif 000014
【図１３】
2008065646.tif 000015
【図１４】
2008065646.tif 000016
【図１５】
2008065646.tif 000017
【図１６】
2008065646.tif 000018