(57)【要約】【課題】フラッシュメモリのデータ管理において、正しくデータを管理すること。【解決手段】フラッシュメモリのプログラム動作中に電源遮断が発生し、電源の再投入後に、その前に電源の遮断によりプログラム動作の処理が中断されたことを検出した時点で、その中断された処理を判定する（ステップＳ１）。その中断されたと判定された処理の一つ前の処理からプログラム動作を開始し、書き込みが不十分であるメモリセルにデータを上書きすることによって、不安定な状態のメモリセルを安定したメモリセルに戻す（ステップＳ２）。【選択図】図１
2010097386.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリのプログラム動作中に電源遮断が発生した後、電源が再投入されたときのフラッシュメモリのデータ管理方法において、
前記フラッシュメモリに格納されている、書き換え前の旧データのアドレスに関する第１情報、該第１情報が有効であるか無効であるかを示す第２情報、書き換え後の新データのアドレスに関する第３情報および該第３情報が有効であるか無効であるかを示す第４情報に基づいて、処理部により、前記電源遮断により中断された処理を判定する判定ステップと、
前記処理部により、前記判定ステップにより判定された処理の一つ前の処理から前記プログラム動作をやり直す回復ステップと、
を含むことを特徴とするデータ管理方法。
【請求項２】
フラッシュメモリのプログラム動作中に電源遮断が発生した後、電源が再投入されたときのフラッシュメモリのデータ管理方法において、
前記フラッシュメモリに格納されている、消去単位ブロックの識別に関する第５情報および該第５情報が有効であるか無効であるかを示す第６情報に基づいて、処理部により、前記電源遮断により中断された処理を判定する判定ステップと、
前記処理部により、前記判定ステップにより判定された処理の一つ前の処理から前記プログラム動作をやり直す回復ステップと、
を含むことを特徴とするデータ管理方法。
【請求項３】
前記回復ステップでは、不安定なメモリセルにデータを上書きすることを特徴とする請求項１または２に記載のデータ管理方法。
【請求項４】
前記回復ステップでは、前記プログラム動作のやり直しが開始されたか否かを示す第１フラグに、前記プログラム動作のやり直しが開始されたことを示す値を書き込むことを特徴とする請求項１または２に記載のデータ管理方法。
【請求項５】
前記回復ステップでは、不安定なメモリセルの、データの読み出しを行うか否かを示す第２フラグに、データの読み出しを行わないことを示す値を書き込むことを特徴とする請求項１または２に記載のデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、フラッシュメモリのデータ管理方法に関する。
【背景技術】
【０００２】
従来、フラッシュメモリをアクセスするファイル管理装置が提案されている。このファイル管理装置では、書き込み処理等の処理内容を示す識別コードを動作履歴記録領域に記録し、その書き込み処理等が正常終了すると、その識別コードを消去する。その後、動作履歴記録領域に識別コードの記録が残されている場合、その識別コードを解析して、そのデータ領域等に格納されているデータを復旧する（例えば、特許文献１参照。）。
【０００３】
また、不揮発性メモリを用いた半導体メモリ装置が提案されている。この半導体メモリ装置では、メモリコントローラに読み書きメモリを設け、アドレス管理情報を一時記憶する。不揮発性メモリアクセス部は書き込み命令に応じて、ユーザデータを不揮発性メモリに書き込む。アドレス管理情報制御部は、ユーザデータを書き換える時に、アドレス管理情報の書き換え対象である物理ブロックを無効予定ブロックとする。一連の書き込み処理後に、無効予定を無効ブロックとして読み書きメモリのアドレス管理情報を不揮発性メモリに書き戻す（例えば、特許文献２参照。）。
【０００４】
また、不揮発性記憶装置の制御方法が提案されている。この制御方法は、複数の物理ブロックで構成される不揮発性メモリにデータを書き込むときに、物理ブロックの先頭ページの冗長領域にあり、その先頭ページにデータが書き込まれているか否かを示す第１のフラグに、データが書き込まれていることを示す固定値を書き込む第１のフラグ書き込みステップと、その物理ブロックにデータを書き込むデータ書き込みステップと、を有する（例えば、特許文献３参照。）。
【０００５】
【特許文献１】特開２００１−８４１８０号公報
【特許文献２】特開２００５−２４３０００号公報
【特許文献３】国際公開第２００４／０３１９６６号パンフレット
【発明の開示】
【発明が解決しようとする課題】
【０００６】
フラッシュメモリにデータを書き込んだ後、メモリセル内のデータが確定する前に電源が遮断された場合、データの書き込みが不十分なセル、すなわち電荷量の不十分なセルが発生することがある。このような書き込みが十分でないセルでは、データの読み出し時に１と０を正しく判別できないため、読み出しのたびに１と０が不確定に読み出されることになる。上述した従来の装置や方法では、このような書き込みが十分でないセルを判別することができないため、書き込みが不十分なセルに対してデータの読み出しを行ってしまうので、正しくデータを管理することができない、という問題点がある。
【０００７】
このデータ管理方法は、フラッシュメモリのデータを正しく管理することができるデータ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
このデータ管理方法は、フラッシュメモリのプログラム動作中に電源遮断が発生した場合、電源が再投入された後に、電源遮断により中断された処理を判定する。そして、その中断されたと判定された処理の一つ前の処理から回復処理を行う。
【０００９】
このデータ管理方法によれば、実際に電源遮断時に中断された処理が、電源の再投入後に、電源遮断により中断されたと判定された処理の一つ前の処理である場合でも、回復処理によってデータを正しく回復することができる。例えば、電源遮断により中断されたと判定された処理の一つ前の処理でデータの書き込みが不十分なセルが発生した場合、回復処理によってそのセルにデータが上書きされる。
【発明の効果】
【００１０】
このデータ管理方法によれば、フラッシュメモリのデータを正しく管理することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１１】
以下に添付図面を参照して、このデータ管理方法の好適な実施の形態を詳細に説明する。
【００１２】
（概略）
図１は、実施の形態にかかるデータ管理方法の概略を示すフローチャートである。図１に示すように、フラッシュメモリのプログラム動作中に電源遮断が発生して処理が中断され、電源の再投入時点、または電源の再投入後にプログラム動作の処理が中断されたことを検出した時点で、どの処理でプログラム動作が中断されたかということを判定する（ステップＳ１）。そして、その中断されたと判定された処理の一つ前の処理からプログラム動作を開始し、データを回復をする（ステップＳ２）。
【００１３】
（フラッシュメモリを備えたシステムの例）
フラッシュメモリを備えたシステムとして、マイクロコントローラなどのＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）にフラッシュメモリが内蔵されたシステム（フラッシュ内蔵マイコン）がある。また、単体のフラッシュメモリを備えたコンピュータシステムがある。前記データ管理方法は、これらのシステムのフラッシュメモリに対するプログラム動作中に処理が中断された場合のデータ管理に適している。データ管理方法の詳細については、データ書き換え時の中断による回復動作およびガーベッジ・コレクション時の中断による回復動作として、後述する。
【００１４】
図２は、実施の形態におけるフラッシュ内蔵マイコンの概略を示すブロック図である。図２に示すように、フラッシュ内蔵マイコン１は、内蔵フラッシュメモリ２、ＣＰＵコア３および内蔵ＲＡＭ４を備えている。内蔵フラッシュメモリ２、ＣＰＵコア３および内蔵ＲＡＭ４は、メモリバス５を介して相互に接続されている。内蔵フラッシュメモリ２には、例えばシステムデータもしくはユーザデータ、および内蔵フラッシュメモリ２のドライバソフトウェアを含むソフトウェアが格納されている。内蔵フラッシュメモリ２が複数のバンクを備えた同時実行可能なメモリである場合、ＣＰＵコア３は、内蔵フラッシュメモリ２内のソフトウェアを読み出しながら、内蔵フラッシュメモリ２内のシステムデータまたはユーザデータを書き換えることができる。内蔵フラッシュメモリ２、ＣＰＵコア３および内蔵ＲＡＭ４には、外部のバッテリー６から電源が供給される。
【００１５】
図３は、実施の形態におけるコンピュータシステムの概略を示すブロック図である。図３に示すように、コンピュータシステム１１は、フラッシュメモリ１２、ＣＰＵ１３、ＲＡＭ１４およびＲＯＭ１７を備えている。フラッシュメモリ１２、ＣＰＵ１３、ＲＡＭ１４およびＲＯＭ１７は、メモリバス１５を介して相互に接続されている。フラッシュメモリ１２には、例えばシステムデータまたはユーザデータが格納されている。フラッシュメモリ１２のドライバソフトウェアを含むソフトウェアは、例えばＲＯＭ１７に格納されている。フラッシュメモリ１２、ＣＰＵ１３、ＲＡＭ１４およびＲＯＭ１７には、外部のバッテリー１６から電源が供給される。
【００１６】
（フラッシュメモリの構成）
図４は、実施の形態におけるフラッシュメモリの概略を示す説明図である。図４に示すように、フラッシュメモリ２１は、複数の消去単位ブロック２２，２３，２４を備えている。消去単位ブロックは、一括してデータが消去される単位である。つまり、消去単位ブロック内の一部のデータを消去する際には、その消去単位ブロック内の全てのデータが消去される。各消去単位ブロック２２，２３，２４には、識別情報、割り当て情報、データおよびアドレス情報が格納される。これらの管理情報を、識別情報Ａ、割り当て情報Ｂおよびアドレス情報Ｃとする。識別情報Ａは、消去単位ブロックを識別するための情報である。割り当て情報Ｂは、データの格納状態を表す情報であり、データの書き込みまたは読み出しの単位毎に設けられる。割り当て情報Ｂには、アドレスに関する情報も含まれる。アドレス情報Ｃは、物理アドレスと論理アドレスの変換のための情報であり、データの書き込みまたは読み出しの単位毎に設けられる。
【００１７】
図５は、実施の形態における消去単位ブロックの構成例を示す説明図である。図５に示すように、識別情報Ａ、割り当て情報Ｂおよびアドレス情報Ｃには、それぞれ、それらの管理情報が有効であるか否かを示す情報（以下、有効／無効情報とする）が付加されている。識別情報Ａの有効／無効情報、割り当て情報Ｂの有効／無効情報およびアドレス情報Ｃの有効／無効情報を、それぞれ、有効／無効情報Ａ、有効／無効情報Ｂおよび有効／無効情報Ｃとする。
【００１８】
（通常時の動作：データ読み出し手順）
図６は、実施の形態におけるデータ読み出し手順を示すフローチャートである。図６に示すように、データの読み出し処理が開始されると、まず、読み出し対象データの論理アドレス情報に対応する有効／無効情報Ｃを参照し、読み出し対象データの論理アドレス情報に対応するアドレス情報Ｃの「有効」情報を確認する（ステップＳ１１）。次いで、ステップＳ１１で確認されたアドレス情報Ｃを参照して読み出し対象データの格納先を特定する（ステップＳ１２）。次いで、ステップＳ１２で特定されたデータ格納先からデータを読み出し（ステップＳ１３）、データの読み出し処理を終了する。
【００１９】
（通常時の動作：データ書き込み手順）
図７は、実施の形態におけるデータ書き込み手順を示すフローチャートである。図７に示すように、データの書き込み処理が開始されると、まず、割り当て情報Ｂを読み出し、「未使用」領域を検索する（ステップＳ２１）。次いで、ステップＳ２１での検索により見つかった未使用領域の割り当て情報Ｂの一つに「使用中」情報を書き込み（ステップＳ２２）、その割り当て情報Ｂの有効／無効情報Ｂに「有効」情報を書き込む（ステップＳ２３）。次いで、ステップＳ２３で「有効」情報が書き込まれた割り当て情報Ｂに対応するデータ領域にデータを書き込む（ステップＳ２４）。次いで、ステップＳ２４でデータが書き込まれた領域のアドレス情報Ｃを書き込み（ステップＳ２５）、そのアドレス情報Ｃの有効／無効情報Ｃに「有効」情報を書き込む（ステップＳ２６）。次いで、ステップＳ２４でデータが格納された領域の割り当て情報Ｂを「確定」に変更し（ステップＳ２７）、その割り当て情報Ｂの有効／無効情報Ｂに「有効」情報を書き込み（ステップＳ２８）、データの書き込み処理を終了する。
【００２０】
（通常時の動作：データ書き換え手順）
図８は、実施の形態におけるデータ書き換え手順を示すフローチャートである。図８に示すように、データの書き換え処理が開始されると、まず、上述したデータ書き込み処理のステップＳ２１〜ステップＳ２４と同様の処理を行う（ステップＳ３１〜ステップＳ３４）。ステップＳ３４で未使用領域に書き込まれるデータが、書き換え後の新データとなる。書き換え前のデータを旧データとする。新データを書き込んだ後、旧データが格納されている領域の割り当て情報Ｂを「確定」から「書き換え中」情報に変更する（ステップＳ３５）。次いで、新データが書き込まれた領域のアドレス情報Ｃを書き込み（ステップＳ３６）、そのアドレス情報Ｃの有効／無効情報Ｃに「有効」情報を書き込む（ステップＳ３７）。次いで、旧データが格納されている領域のアドレス情報Ｃの有効／無効情報Ｃに「無効」情報を書き込み（ステップＳ３８）、そのアドレス情報Ｃに「削除」情報を書き込む（ステップＳ３９）。次いで、新データが書き込まれた領域の割り当て情報Ｂを「確定」に変更する（ステップＳ４０）。次いで、旧データが格納されている領域の割り当て情報Ｂの有効／無効情報Ｂを「無効」に変更し（ステップＳ４１）、その割り当て情報Ｂに「削除」情報を書き込み（ステップＳ４２）、データの書き換え処理を終了する。
【００２１】
データ書き換え処理の途中、ステップＳ３８の処理で電源遮断が起きた場合、次の２つのケースが考えられる。第１のケースは、ステップＳ３８の「無効」情報の書き込み開始後早い段階で中断された場合である。第２のケースは、ステップＳ３８の「無効」情報の書き込みが進んだ段階で中断された場合である。第１のケースでは、ステップＳ３８は未処理の状態となり、書き込まれた「無効」情報は不安定な状態となる。第２のケースでは、ステップＳ３８は処理済みの状態となり、書き込まれた「無効」情報は不安定な状態となる。いずれのケースでも、ステップＳ３７は処理済みの状態となり、ステップＳ３９は未処理の状態となる。従って、電源の再投入後、ステップＳ３８で中断されたと判定される。
【００２２】
一方、ステップＳ３７の「有効」情報の書き込みが進んだ段階で電源遮断により処理が中断された場合を第３のケースとする。第３のケースでは、ステップＳ３７は処理済みの状態となり、書き込まれた「有効」情報は不安定な状態となる。ステップＳ３８は、未処理の状態である。従って、第１のケースと第３のケースは、ステップＳ３７まで終了したことで一致するため、両ケースを区別することができない。同様に、ステップＳ３９の「削除」情報の書き込み開始後早い段階で電源遮断により処理が中断された場合を第４のケースとする。第４のケースでは、ステップＳ３８は、処理済みの状態である。ステップＳ３９は未処理の状態となり、書き込まれた「削除」情報は不安定な状態となる。従って、第２のケースと第４のケースは、ステップＳ３８まで終了したことで一致するため、両ケースを区別することができない。本実施の形態にかかるデータ管理方法によれば、このような事態に対しても適切に対処することができる（後述の（データ書き換え時の中断による回復動作）を参照）。
【００２３】
（通常時の動作：ガーベッジ・コレクション手順）
図９は、実施の形態におけるガーベッジ・コレクション手順を示すフローチャートである。図９に示すように、ガーベッジ・コレクション処理が開始されると、まず、対象となる消去単位ブロックを選択する（ステップＳ５１）。選択された消去単位ブロックを対象ブロックとする。次いで、現在のガーベッジ・コレクション用の消去単位ブロックの識別情報Ａを、対象ブロックの識別情報Ａと同じ値に変更する（ステップＳ５２）。現在のガーベッジ・コレクション用の消去単位ブロックをガーベッジ・コレクション・ブロックとする。次いで、対象ブロックの割り当て情報Ｂの有効／無効情報Ｂを確認し、「有効」となっている全ての割り当て情報Ｂを対象ブロックから読み出す（ステップＳ５３）。次いで、ステップＳ５３で読み出された割り当て情報Ｂのうち「確定」を示す割り当て情報Ｂのみを、ガーベッジ・コレクション・ブロックの対応する位置にコピーする（ステップＳ５４）。次いで、ステップＳ５４でコピーされた割り当て情報Ｂに対応するデータを対象ブロックから読み出し、ガーベッジ・コレクション・ブロックの対応する位置にコピーする（ステップＳ５５）。次いで、ガーベッジ・コレクション・ブロックの識別情報Ａの有効／無効情報Ａに「有効」情報を書き込む（ステップＳ５６）。次いで、対象ブロックの識別情報Ａの有効／無効情報Ａに「無効」情報を書き込む（ステップＳ５７）。次いで、対象ブロックを消去し（ステップＳ５８）、対象ブロックの識別情報Ａにガーベッジ・コレクション用を示す情報を書き込み（ステップＳ５９）、ガーベッジ・コレクション処理を終了する。
【００２４】
ガーベッジ・コレクション処理の途中、ステップＳ５７の処理で電源遮断が起きた場合、次の２つのケースが考えられる。第５のケースは、ステップＳ５７の「無効」情報の書き込み開始後早い段階で中断された場合である。第６のケースは、ステップＳ５７の「無効」情報の書き込みが進んだ段階で中断された場合である。第５のケースでは、ステップＳ５７は未処理の状態となり、書き込まれた「無効」情報は不安定な状態となる。第６のケースでは、ステップＳ５７は処理済みの状態となり、書き込まれた「無効」情報は不安定な状態となる。いずれのケースでも、ステップＳ５６は処理済みの状態となり、ステップＳ５８は未処理の状態となる。従って、電源の再投入後、ステップＳ５７で中断されたと判定される。
【００２５】
一方、ステップＳ５６の「有効」情報の書き込みが進んだ段階で電源遮断により処理が中断された場合を第７のケースとする。第７のケースでは、ステップＳ５６は処理済みの状態となり、書き込まれた「有効」情報は不安定な状態となる。ステップＳ５７は、未処理の状態である。従って、第５のケースと第７のケースは、ステップＳ５６まで終了したことで一致するため、両ケースを区別することができない。同様に、ステップＳ５８の消去開始後早い段階で電源遮断により処理が中断された場合を第８のケースとする。第８のケースでは、ステップＳ５７は、処理済みの状態である。ステップＳ５８は未処理の状態となり、不安定な消去状態となる。従って、第６のケースと第８のケースは、ステップＳ５７まで終了したことで一致するため、両ケースを区別することができない。本実施の形態にかかるデータ管理方法によれば、このような事態に対しても適切に対処することができる（後述の（ガーベッジ・コレクション時の中断による回復動作）を参照）。
【００２６】
（データ書き換え時の中断による回復動作）
図１０は、実施の形態にかかる第１の判定処理の概略を示すフローチャートである。第１の判定処理は、システムの電源投入後、フラッシュメモリにアクセスする際、すなわちシステムの起動時か、またはシステムの起動後にフラッシュメモリに対してデータの読み出し処理もしくは書き込み処理を行う前またはその処理中に実施される。データの読み出し処理または書き込み処理の際に第１の判定処理を実施する場合には、第１の判定処理のアルゴリズムは、データの読み出し処理または書き込み処理のアルゴリズムに組み込まれる。
【００２７】
図１０に示すように、第１の判定処理が開始されると、まず、論理アドレス情報に対応する旧データのアドレス情報Ｃの有効／無効情報Ｃを読み出す（ステップＳ６１）。ステップＳ６１で読み出された有効／無効情報Ｃが「有効」情報である場合（ステップＳ６１：有効）、新データのアドレス情報Ｃの有効／無効情報Ｃを読み出す（ステップＳ６２）。ステップＳ６２で読み出された有効／無効情報Ｃが「有効」情報である場合（ステップＳ６２：有効）、後述する回復処理Ｐを実施する。回復処理Ｐは、上述した第１のケースと第３のケースを区別できない場合に実施される。新データのアドレス情報Ｃの有効／無効情報Ｃが書き込まれていないが（ステップＳ６２：書込なし）、新データのアドレス情報Ｃが書き込まれている場合には（ステップＳ６３：書込あり）、後述する回復処理Ｒを実施する。回復処理Ｒは、電源遮断により前記ステップＳ３７の処理が中断され、ステップＳ３７が未処理の状態となる場合に実施される。新データのアドレス情報Ｃが書き込まれていない場合には（ステップＳ６３：書込なし）、データの書き換え処理中に電源の遮断が発生していないか、またはデータを正しく読み出すことができる状態にあるので、第１の判定処理を終了する。
【００２８】
また、ステップＳ６１で読み出された有効／無効情報Ｃが「無効」情報である場合（ステップＳ６１：無効）、新データのアドレス情報Ｃの有効／無効情報Ｃを読み出す（ステップＳ６４）。ステップＳ６４で読み出された有効／無効情報Ｃが「有効」情報であり（ステップＳ６４：有効）、かつ旧データのアドレス情報Ｃが削除されている場合（ステップＳ６５：削除）、データの書き換え処理中に電源の遮断が発生していないか、またはデータを正しく読み出すことができる状態にあるので、第１の判定処理を終了する。旧データのアドレス情報Ｃが残っている場合（ステップＳ６５：あり）、後述する回復処理Ｑを実施する。回復処理Ｑは、上述した第２のケースと第４のケースを区別できない場合に実施される。一方、ステップＳ６４で新データのアドレス情報Ｃの有効／無効情報Ｃが書き込まれていない場合には（ステップＳ６４：書込なし）、データの書き換えアルゴリズム上、起こり得ない状態であるので、例えば所定のエラー処理などを実施する。
【００２９】
図１１は、実施の形態にかかる第１の回復処理Ｐの概略を示すフローチャートである。図１１に示すように、回復処理Ｐが開始されると、まず、上述したデータ書き換え処理のステップＳ３７と同様に、新データが書き込まれた領域のアドレス情報Ｃの有効／無効情報Ｃに「有効」情報を書き込む（ステップＳ７１）。次いで、旧データのアドレス情報Ｃに付加されている回復処理フラグ（第１フラグ）を「開始状態」に設定する（ステップＳ７２）。次いで、上述したデータ書き換え処理のステップＳ３８〜ステップＳ４２と同様の処理を行い（ステップＳ７３〜ステップＳ７７）、回復処理Ｐを終了する。
【００３０】
ステップＳ７１を行うことによって、前記第３のケースの場合に、新データのアドレス情報Ｃの有効／無効情報Ｃに書き込まれた「有効」情報が上書きされて安定化する。また、前記ステップＳ３８に相当するステップＳ７３を行うことによって、前記第１のケースの場合に、旧データのアドレス情報Ｃの有効／無効情報Ｃに書き込まれた「無効」情報が上書きされて安定化する。従って、第１のケースと第３のケースを区別できない場合でも、回復処理Ｐを実施することによって、不安定なセルデータがなくなり、これ以降、不安定なデータの読み出しが発生しなくなる。
【００３１】
回復処理Ｐにおいて回復処理フラグを設定する理由は、回復処理が開始されたことを記録することができるからである。回復処理の開始を記録することによって、回復処理中に電源の遮断が発生し、再度、電源を投入した場合に、回復処理中に処理が中断されたことを検知することができる。また、回復処理の最初の書き込み（ステップＳ７１）が完了した後に回復処理フラグを設定する理由は、電源遮断によって処理が中断されたことを発見した後、不安定なメモリセルの状態をできるだけ早く安定化させることができるからである。なお、回復処理の最初の書き込み（ステップＳ７１）を行う前、すなわち回復処理の開始後、直ちに回復処理フラグを設定してもよい。また、回復処理フラグを設定する処理を省略してもよい。回復処理フラグの設定については、後述する他の回復処理Ｑ、ＳおよびＴにおいても同様である。
【００３２】
図１２は、実施の形態にかかる第２の回復処理Ｑの概略を示すフローチャートである。図１２に示すように、回復処理Ｑが開始されると、まず、上述したデータ書き換え処理のステップＳ３８と同様に、旧データが書き込まれた領域のアドレス情報Ｃの有効／無効情報Ｃに「無効」情報を書き込む（ステップＳ８１）。次いで、旧データのアドレス情報Ｃに付加されている回復処理フラグを「開始状態」に設定する（ステップＳ８２）。次いで、上述したデータ書き換え処理のステップＳ３９〜ステップＳ４２と同様の処理を行い（ステップＳ８３〜ステップＳ８６）、回復処理Ｑを終了する。
【００３３】
ステップＳ８１を行うことによって、前記第２のケースの場合に、旧データのアドレス情報Ｃの有効／無効情報Ｃに書き込まれた「無効」情報が上書きされて安定化する。また、前記ステップＳ３９に相当するステップＳ８３を行うことによって、前記第４のケースの場合に、旧データのアドレス情報Ｃに書き込まれた「削除」情報が上書きされて安定化する。従って、第２のケースと第４のケースを区別できない場合でも、回復処理Ｑを実施することによって、不安定なセルデータがなくなり、これ以降、不安定なデータの読み出しが発生しなくなる。
【００３４】
図１３は、実施の形態にかかる第３の回復処理Ｒの概略を示すフローチャートである。図１３に示すように、回復処理Ｒでは、新データのアドレス情報Ｃの無効化フラグ領域に「無効」情報を書き込む（ステップＳ９１）。無効化フラグ領域は、各アドレス情報Ｃに確保されている。これ以降、無効化フラグ（第２フラグ）が「無効」となっているアドレス情報Ｃおよび有効／無効情報Ｃを読み出さないようにするとよい。また、上述した第１の判定処理において、アドレス情報Ｃを読み出す際に、各アドレス情報Ｃの無効化フラグを確認することによって、すでに回復処理が済んでいる箇所を第１の判定処理から容易に除外することができる。また、回復処理に限らず、書き込みが不十分であることによって読み出しデータが不安定となる可能性のある領域の読み出しを禁止する場合にも、そのデータのアドレス情報Ｃの無効化フラグを「無効」に設定してもよい。
【００３５】
（ガーベッジ・コレクション時の中断による回復動作）
図１４は、実施の形態にかかる第２の判定処理の概略を示すフローチャートである。第２の判定処理は、システムの電源投入後、フラッシュメモリにアクセスする際（システムの起動時）に実施される。
【００３６】
図１４に示すように、第２の判定処理が開始されると、まず、全ての消去単位ブロックの識別情報Ａを確認し、ガーベッジ・コレクション用の識別情報Ａがあるか否かを判断する（ステップＳ１０１）。ガーベッジ・コレクション用の識別情報Ａがある場合（ステップＳ１０１：Ｙｅｓ）、ガーベッジ・コレクション処理中に電源の遮断が発生していないので、第２の判定処理を終了する。ガーベッジ・コレクション用の識別情報Ａがない場合には（ステップＳ１０１：Ｎｏ）、識別情報Ａが同じで、かつその識別情報Ａの有効／無効情報Ａがともに「有効」である消去単位ブロックが２つあるか否かを判断する（ステップＳ１０２）。そのような消去単位ブロックが２つある場合（ステップＳ１０２：Ｙｅｓ）、後述する回復処理Ｓを実施する。回復処理Ｓは、上述した第５のケースと第７のケースを区別できない場合に実施される。
【００３７】
「有効」で同一の識別情報Ａが２つない場合（ステップＳ１０２：Ｎｏ）、識別情報Ａが別の消去単位ブロックの識別情報Ａと同じであるが、識別情報Ａの有効／無効情報Ａが書き込まれていない消去単位ブロックがあるか否かを判断する（ステップＳ１０３）。そのような消去単位ブロックがある場合（ステップＳ１０３：Ｙｅｓ）、後述する回復処理Ｕを実施する。回復処理Ｕは、電源遮断により前記ステップＳ５６以前の処理が中断された場合に実施される。識別情報Ａが他と同じで、かつ有効／無効情報Ａが書き込まれていない消去単位ブロックがない場合（ステップＳ１０３：Ｎｏ）、後述する回復処理Ｔを実施する。回復処理Ｔは、上述した第６のケースと第８のケースを区別できない場合に実施される。
【００３８】
図１５は、実施の形態にかかる第４の回復処理Ｓの概略を示すフローチャートである。図１５に示すように、回復処理Ｓが開始されると、まず、上述したガーベッジ・コレクション処理のステップＳ５６と同様に、ガーベッジ・コレクション・ブロックの識別情報Ａの有効／無効情報Ａに「有効」情報を書き込む（ステップＳ１１１）。次いで、ガーベッジ・コレクション・ブロック識別情報Ａに付加されている回復処理フラグ（第１フラグ）を「開始状態」に設定する（ステップＳ１１２）。次いで、上述したガーベッジ・コレクション処理のステップＳ５７〜ステップＳ５９と同様の処理を行い（ステップＳ１１３〜ステップＳ１１５）、回復処理Ｓを終了する。
【００３９】
ステップＳ１１１を行うことによって、前記第７のケースの場合に、ガーベッジ・コレクション・ブロックの識別情報Ａの有効／無効情報Ａに書き込まれた「有効」情報が上書きされて安定化する。また、前記ステップＳ５７に相当するステップＳ１１３を行うことによって、前記第５のケースの場合に、対象ブロックの識別情報Ａの有効／無効情報Ａに書き込まれた「無効」情報が上書きされて安定化する。従って、第５のケースと第７のケースを区別できない場合でも、回復処理Ｓを実施することによって、ガーベッジ・コレクション・ブロックと対象ブロックを正しく区別することができる。
【００４０】
図１６は、実施の形態にかかる第５の回復処理Ｔの概略を示すフローチャートである。図１６に示すように、回復処理Ｔが開始されると、まず、上述したガーベッジ・コレクション処理のステップＳ５７と同様に、対象ブロックの識別情報Ａの有効／無効情報Ａに「無効」情報を書き込む（ステップＳ１２１）。次いで、ガーベッジ・コレクション・ブロック識別情報Ａに付加されている回復処理フラグを「開始状態」に設定する（ステップＳ１２２）。次いで、上述したガーベッジ・コレクション処理のステップＳ５８〜ステップＳ５９と同様の処理を行い（ステップＳ１２３〜ステップＳ１２４）、回復処理Ｔを終了する。
【００４１】
ステップＳ１２１を行うことによって、前記第６のケースの場合に、対象ブロックの識別情報Ａの有効／無効情報Ａに書き込まれた「無効」情報が上書きされて安定化する。また、前記ステップＳ５８に相当するステップＳ１２３を行うことによって、前記第８のケースの場合に、対象ブロックが完全に消去される。従って、第６のケースと第８のケースを区別できない場合でも、ガーベッジ・コレクション処理を正しく継続して実施することができる。
【００４２】
図１７は、実施の形態にかかる第６の回復処理Ｕの概略を示すフローチャートである。図１７に示すように、回復処理Ｕでは、有効／無効情報Ａが書き込まれていない識別情報Ａの無効化フラグ領域に「無効」情報を書き込む（ステップＳ１３１）。無効化フラグ領域は、各消去単位ブロックの識別情報Ａに確保されている。これ以降、無効化フラグ（第２フラグ）が「無効」となっている識別情報Ａおよび有効／無効情報Ａを読み出さないようにするとよい。また、上述した第２の判定処理において、識別情報Ａを読み出す際に、各識別情報Ａの無効化フラグを確認することによって、すでに回復処理が済んでいる箇所を第２の判定処理から容易に除外することができる。
【００４３】
上述した各種の処理は、例えば、図２に示すフラッシュ内蔵マイコン１においては、ＣＰＵコア３が内蔵フラッシュメモリ２のドライバソフトウェアを実行することにより実現される。また、図３に示すコンピュータシステム１１においては、ＣＰＵ１３がフラッシュメモリ１２のドライバソフトウェアを実行することにより実現される。
【００４４】
以上説明したように、本実施の形態によれば、実際に電源遮断時に中断された処理が、電源の再投入後に、電源遮断により中断されたと判定された処理の一つ前の処理である場合でも、回復処理によって、書き込みが不十分であるメモリセルにデータを上書きするので、不安定な状態のメモリセルを安定したメモリセルに戻すことができる。従って、データを正しく回復することができるので、フラッシュメモリのデータを正しく管理することができる。
【００４５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００４６】
（付記１）フラッシュメモリのプログラム動作中に電源遮断が発生した後、電源が再投入されたときのフラッシュメモリのデータ管理方法において、前記フラッシュメモリに格納されている、書き換え前の旧データのアドレスに関する第１情報、該第１情報が有効であるか無効であるかを示す第２情報、書き換え後の新データのアドレスに関する第３情報および該第３情報が有効であるか無効であるかを示す第４情報に基づいて、処理部により、前記電源遮断により中断された処理を判定する判定ステップと、前記処理部により、前記判定ステップにより判定された処理の一つ前の処理から前記プログラム動作をやり直す回復ステップと、を含むことを特徴とするデータ管理方法。
【００４７】
（付記２）フラッシュメモリのプログラム動作中に電源遮断が発生した後、電源が再投入されたときのフラッシュメモリのデータ管理方法において、前記フラッシュメモリに格納されている、消去単位ブロックの識別に関する第５情報および該第５情報が有効であるか無効であるかを示す第６情報に基づいて、処理部により、前記電源遮断により中断された処理を判定する判定ステップと、前記処理部により、前記判定ステップにより判定された処理の一つ前の処理から前記プログラム動作をやり直す回復ステップと、を含むことを特徴とするデータ管理方法。
【００４８】
（付記３）前記回復ステップでは、不安定なメモリセルにデータを上書きすることを特徴とする付記１または２に記載のデータ管理方法。
【００４９】
（付記４）前記回復ステップでは、前記プログラム動作のやり直しが開始されたか否かを示す第１フラグに、前記プログラム動作のやり直しが開始されたことを示す値を書き込むことを特徴とする付記１または２に記載のデータ管理方法。
【００５０】
（付記５）前記回復ステップでは、不安定なメモリセルの、データの読み出しを行うか否かを示す第２フラグに、データの読み出しを行わないことを示す値を書き込むことを特徴とする付記１または２に記載のデータ管理方法。
【００５１】
（付記６）前記判定ステップで、前記第２情報が有効であり、かつ前記第４情報が有効である場合、前記回復ステップでは、前記第４情報を有効とし、前記第２情報を無効とし、前記第１情報を削除することを特徴とする付記１に記載のデータ管理方法。
【００５２】
（付記７）前記判定ステップで、前記第２情報が無効であり、かつ前記第４情報が有効であり、さらに前記第１情報が残っている場合、前記回復ステップでは、前記第２情報を無効とし、前記第１情報を削除することを特徴とする付記１に記載のデータ管理方法。
【００５３】
（付記８）前記第１情報を削除した後、前記フラッシュメモリに格納されている、前記新データの格納状態に関する第７情報を確定とし、前記旧データの格納状態に関する第８情報が有効であるか無効であるかを示す第９情報を無効とし、前記第８情報を削除することを特徴とする付記６または７に記載のデータ管理方法。
【００５４】
（付記９）前記判定ステップで、複数の消去単位ブロックの前記第５情報にガーベッジ・コレクション用の情報がなく、かつ第１消去単位ブロックの前記第５情報と第２消去単位ブロックの前記第５情報が同じであり、さらに前記第１消去単位ブロックの前記第６情報と前記第２消去単位ブロックの前記第６情報がともに有効である場合、前記回復ステップでは、前記第１消去単位ブロックの前記第６情報を有効とし、前記第２消去単位ブロックの前記第６情報を無効とし、前記第２消去単位ブロックを消去し、前記第２消去単位ブロックの前記第５情報にガーベッジ・コレクション用を示す情報を書き込むことを特徴とする付記２に記載のデータ管理方法。
【００５５】
（付記１０）前記判定ステップで、複数の消去単位ブロックの前記第５情報にガーベッジ・コレクション用の情報がなく、かつ第１消去単位ブロックの前記第５情報と第２消去単位ブロックの前記第５情報が同じであるが、前記第２消去単位ブロックの前記第６情報が書き込まれていない場合、前記回復ステップでは、前記第２消去単位ブロックの前記第６情報を無効とし、前記第２消去単位ブロックを消去し、前記第２消去単位ブロックの前記第５情報にガーベッジ・コレクション用を示す情報を書き込むことを特徴とする付記２に記載のデータ管理方法。
【図面の簡単な説明】
【００５６】
【図１】実施の形態にかかるデータ管理方法の概略を示すフローチャートである。
【図２】実施の形態におけるフラッシュ内蔵マイコンの概略を示すブロック図である。
【図３】実施の形態におけるコンピュータシステムの概略を示すブロック図である。
【図４】実施の形態におけるフラッシュメモリの概略を示す説明図である。
【図５】実施の形態における消去単位ブロックの構成例を示す説明図である。
【図６】実施の形態におけるデータ読み出し手順を示すフローチャートである。
【図７】実施の形態におけるデータ書き込み手順を示すフローチャートである。
【図８】実施の形態におけるデータ書き換え手順を示すフローチャートである。
【図９】実施の形態におけるガーベッジ・コレクション手順を示すフローチャートである。
【図１０】実施の形態にかかる第１の判定処理の概略を示すフローチャートである。
【図１１】実施の形態にかかる第１の回復処理の概略を示すフローチャートである。
【図１２】実施の形態にかかる第２の回復処理の概略を示すフローチャートである。
【図１３】実施の形態にかかる第３の回復処理の概略を示すフローチャートである。
【図１４】実施の形態にかかる第２の判定処理の概略を示すフローチャートである。
【図１５】実施の形態にかかる第４の回復処理の概略を示すフローチャートである。
【図１６】実施の形態にかかる第５の回復処理の概略を示すフローチャートである。
【図１７】実施の形態にかかる第６の回復処理の概略を示すフローチャートである。
【符号の説明】
【００５７】
２，１２，２１  フラッシュメモリ
２２，２３，２４  消去単位ブロック
【図１】
2010097386.tif 000003
【図２】
2010097386.tif 000004
【図３】
2010097386.tif 000005
【図４】
2010097386.tif 000006
【図５】
2010097386.tif 000007
【図６】
2010097386.tif 000008
【図７】
2010097386.tif 000009
【図８】
2010097386.tif 000010
【図９】
2010097386.tif 000011
【図１０】
2010097386.tif 000012
【図１１】
2010097386.tif 000013
【図１２】
2010097386.tif 000014
【図１３】
2010097386.tif 000015
【図１４】
2010097386.tif 000016
【図１５】
2010097386.tif 000017
【図１６】
2010097386.tif 000018
【図１７】
2010097386.tif 000019