(57)【要約】【課題】メモリの実装面積を小さくすること。メモリに３つのセクタがある場合に、いずれか１つのセクタが壊れてもメモリを継続して使用できるようにすること。【解決手段】メモリ管理装置１は、一括して消去可能なセクタを複数個有するメモリを管理する。メモリ管理装置１は、設定部２、判断部３及び制御部４を備えている。設定部２は、複数のセクタのうち、有効なデータが書き込まれる一のセクタに、消去対象のセクタの状態を示すステータスを設定する。判断部３は、起動時にステータスが消去中になっているか否かを判断する。制御部４は、起動時にステータスが消去中になっているセクタに対する消去を制御する。【選択図】図１
2014071535.tif 000002
【特許請求の範囲】
【請求項１】
一括して消去可能なセクタを複数個有するメモリの複数の前記セクタのうち、有効なデータが書き込まれる第１のセクタに、消去対象のセクタの状態を示すステータスを設定する設定部と、
起動時に前記ステータスが消去中になっているか否かを判断する判断部と、
起動時に前記ステータスが消去中になっているセクタに対する消去を制御する制御部と、
を備えることを特徴とするメモリ管理装置。
【請求項２】
前記設定部は、消去に失敗したセクタに対応する前記ステータスに、使用不能であることを示すステータスを設定することを特徴とする請求項１に記載のメモリ管理装置。
【請求項３】
前記設定部は、前記第１のセクタとは別の第２のセクタに新たに有効なデータが書き込まれるときに、前記第１のセクタから前記第２のセクタに前記ステータスを移行することを特徴とする請求項１または２に記載のメモリ管理装置。
【請求項４】
一括して消去可能なセクタを複数個有するメモリと、
前記メモリを管理するメモリ管理装置と、
を備え、前記メモリ管理装置は、
複数の前記セクタのうち、有効なデータが書き込まれる第１のセクタに、消去対象のセクタの状態を示すステータスを設定する設定部と、
起動時に前記ステータスが消去中になっているか否かを判断する判断部と、
起動時に前記ステータスが消去中になっているセクタに対する消去を制御する制御部と、
を備えることを特徴とするマイクロコントローラ。
【請求項５】
一括して消去可能なセクタを複数個有するメモリの複数の前記セクタのうち、有効なデータが書き込まれる一のセクタに、消去対象のセクタの状態を示すステータスを設定し、
起動時に前記ステータスが消去中になっているか否かを判断し、
起動時に前記ステータスが消去中になっているセクタに対する消去を制御することを特徴とするメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、メモリ管理装置、マイクロコントローラ及びメモリ管理方法に関する。
【背景技術】
【０００２】
従来、データを記憶するデータ用のセクタと、データ用のセクタに記憶されているデータの管理情報を記憶する管理用のセクタと、予備のセクタと、を有するフラッシュメモリがある。データ用のセクタまたは管理用のセクタのコピー中に中断が発生すると、次回の起動時に、データ用のセクタのヘッダ情報または管理用のセクタの管理情報に基づいて、コピーの中断位置からコピーを継続する方法がある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１２６９１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のメモリ管理技術では、データ用のセクタの他に管理用のセクタを設ける必要がある。そのため、セクタ数が増えてしまい、フラッシュメモリの実装面積が大きくなってしまうという問題点がある。また、データ用のセクタまたは管理用のセクタに空き領域がなくなると、データ用のセクタに記憶されているデータまたは管理用のセクタに記憶されている管理情報は、予備のセクタへ移行される。そのため、データ用のセクタ、管理用のセクタ及び予備のセクタの３つのセクタがあっても、いずれか１つのセクタが壊れてしまうと、メモリを継続して使用することができなくなってしまうという問題点がある。
【０００５】
メモリの実装面積を小さくすることができるメモリ管理装置、マイクロコントローラ及びメモリ管理方法を提供することを目的とする。メモリに３つのセクタがある場合に、いずれか１つのセクタが壊れてもメモリを継続して使用することができるメモリ管理装置、マイクロコントローラ及びメモリ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
メモリ管理装置は、一括して消去可能なセクタを複数個有するメモリを管理する。メモリ管理装置は、設定部、判断部及び制御部を備えている。設定部は、複数のセクタのうち、有効なデータが書き込まれる一のセクタに、消去対象のセクタの状態を示すステータスを設定する。判断部は、起動時にステータスが消去中になっているか否かを判断する。制御部は、起動時にステータスが消去中になっているセクタに対する消去を制御する。
【発明の効果】
【０００７】
このメモリ管理装置、マイクロコントローラ及びメモリ管理方法によれば、メモリの実装面積を小さくすることができる。また、メモリに３つのセクタがある場合に、いずれか１つのセクタが壊れてもメモリを継続して使用することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施の形態にかかるメモリ管理装置の一例を示す図である。
【図２】図２は、実施の形態にかかるメモリ管理方法の一例を示す図である。
【図３】図３は、実施の形態にかかるマイクロコントローラの一例を示す図である。
【図４】図４は、ステータスの設定位置及び設定値の一例を示す図である。
【図５】図５は、有効セクタが複数ある場合のステータスの設定位置の一例を示す図である。
【図６】図６は、有効セクタが複数ある場合のステータスの設定位置の他の例を示す図である。
【図７】図７は、実施の形態にかかるメモリ管理方法におけるステータス変更方法の一例を示す図である。
【図８】図８は、図７に示すステータス変更方法における消去成功時のステータスの遷移を示す図である。
【図９】図９は、図７に示すステータス変更方法における消去失敗時のステータスの遷移を示す図である。
【図１０】図１０は、実施の形態にかかるメモリ管理方法における復元方法の一例を示す図である。
【図１１】図１１は、図１０に示す復元方法におけるステータスの遷移を示す図である。
【図１２】図１２は、実施の形態にかかるメモリ管理方法におけるデータ移行方法の一例を示す図である。
【図１３】図１３は、図１２に示すデータ移行方法におけるステータスの遷移を示す図である。
【図１４】図１４は、実施の形態にかかるメモリ管理装置の別の例を示す図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、このメモリ管理装置、マイクロコントローラ及びメモリ管理方法の好適な実施の形態を詳細に説明する。以下の各実施例の説明においては、同様の構成要素には同一の符号を付して、重複する説明を省略する。
【００１０】
・メモリ管理装置の一例
図１は、実施の形態にかかるメモリ管理装置の一例を示す図である。図１に示すように、メモリ管理装置１は、一括して消去可能なセクタを複数個有するメモリ５を管理する。セクタ単位でデータが消去されるメモリ５の一例として、例えばフラッシュメモリが挙げられる。セクタは、複数のデータを格納することができる。メモリ管理装置１は、複数のデータを、例えばセクタの前方から後方に向かって順に書き込むようにしてもよい。
【００１１】
メモリ管理装置１は、セクタに書き込まれているデータを更新する場合、更新後のデータを同じセクタの空き領域に書き込み、更新前のデータを無効にする。セクタ内に有効なデータ、すなわち消去または無効にされていないデータがあるか否かは、例えばセクタの先頭に配置されるフラグによって示されてもよい。メモリ管理装置１は、このフラグを管理する。
【００１２】
セクタが有効なデータ、更新後のデータ及び更新前の無効なデータで一杯になると、メモリ管理装置１は、有効なデータ及び更新後のデータを消去済みの別のセクタへ移行する。移行先のセクタへのデータの移行が終了すると、移行元のセクタは消去可能となる。メモリ管理装置１は、フラグの値を、消去可能であることを示す値にする。メモリ管理装置１は、消去可能なセクタに対して、次に使用するまでに消去する。
【００１３】
また、メモリ管理装置１は、設定部２、判断部３及び制御部４を有する。設定部２は、複数のセクタのうち、有効なデータが書き込まれるいずれかのセクタに、消去対象のセクタの状態を示すステータスを設定する。判断部３は、起動時にステータスが消去中になっているか否かを判断する。制御部４は、起動時に、判断部３の判断結果に基づいて、ステータスが消去中になっているセクタに対する消去を制御する。
【００１４】
・メモリ管理方法の一例
図２は、実施の形態にかかるメモリ管理方法の一例を示す図である。図２に示すメモリ管理方法は、図１に示すメモリ管理装置１によってメモリ５に対して実施されてもよい。本実施例では、図１に示すメモリ管理装置１がメモリ５に対して、図２に示すメモリ管理方法を実施するとして説明する。
【００１５】
メモリ管理装置１は、メモリ５に対する管理を開始すると、設定部２により、複数のセクタのうちの有効なデータが書き込まれるいずれかのセクタに、消去対象のセクタの状態を示すステータスを設定する（ステップＳ１）。メモリ管理装置１は、メモリ管理装置１及びメモリ５を有する装置の電源が遮断されるか、またはリセットされるまで（ステップＳ２：Ｎｏ）、メモリ５に対するデータの書き込み、更新、読み出し及び消去などのアクセスを制御し、必要に応じて、設定部２によりステータスを設定する（ステップＳ１）。
【００１６】
メモリ管理装置１は、メモリ管理装置１及びメモリ５を有する装置が電源投入またはリセットによって再び起動すると（ステップＳ２：Ｙｅｓ）、判断部３により、セクタごとにステータスを参照し、ステータスが消去中になっているか否かを判断する（ステップＳ３）。セクタの消去中に電源遮断またはリセットが起こり、消去が中断されると、消去中のセクタの内容が不定になってしまうことがある。あるいは、消去中のセクタのフラグが消去済みを示しているが、フラグ以外のデータの消去が完了していない場合や、フラグに付随するＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔ）用のパリティビットの格納領域が消去されていないため、以後、フラグの書き込みができなくなってしまう場合がある。
【００１７】
このように、フラグがセクタの消去状態を正確に反映していない場合には、電源遮断またはリセット後の起動時にフラグを参照するだけでは、消去が完了しているか否かを判断することができない。そこで、電源遮断またはリセット後の起動時にステータスを参照し、ステータスが消去中になっている場合（ステップＳ３：Ｙｅｓ）、メモリ管理装置１は、例えば電源遮断またはリセットによってそのセクタに対する消去が中断されていると判断して、制御部４により、そのセクタに対して消去を行う（ステップＳ４）。
【００１８】
ステータスが消去中になっていない場合（ステップＳ３：Ｎｏ）、メモリ管理装置１は、例えば電源遮断またはリセットの前にそのセクタに対する消去が完了していると判断して、そのセクタに対して消去を行わない。次いで、メモリ管理装置１は、メモリ５の全セクタに対してステータスの参照が終了したか否かを判断する（ステップＳ５）。
【００１９】
終了していない場合（ステップＳ５：Ｎｏ）、ステップＳ３に戻り、未参照のセクタのステータスを参照し、ステップＳ３〜ステップＳ５を繰り返す。全セクタに対してステータスの参照が終了すると（ステップＳ５：Ｙｅｓ）、メモリ管理装置１は、一連の処理を終了する。
【００２０】
図１に示すメモリ管理装置１及び図２に示すメモリ管理方法によれば、有効なデータが書き込まれるセクタにステータスが設定される。それによって、ステータス用のセクタを設けずに済む。従って、セクタ数を減らすことができ、メモリの実装面積を小さくすることができる。また、メモリに３つのセクタがある場合、いずれか１つのセクタが壊れても、残りの２つのセクタ間でデータ及びステータスの移行を行うことができる。従って、メモリを継続して使用することができる。
【００２１】
・マイクロコントローラの一例
図３は、実施の形態にかかるマイクロコントローラの一例を示す図である。図３に示すように、マイクロコントローラ１１は、メモリ管理装置１２、及びメモリの一例として例えばフラッシュメモリ１８を有する。メモリ管理装置１２は、フラッシュメモリ１８を管理する。
【００２２】
メモリ管理装置１２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置）１３、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ、リードオンリーメモリ）１４、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ、ランダムアクセスメモリ）１５及び制御回路１６を有する。ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５及び制御回路１６は、バス１７に接続されている。
【００２３】
ＣＰＵ１３は、ＲＯＭ１４から、後述するステータス変更方法、復元方法及びデータ移行方法を実現するメモリ管理プログラムを読み出してＲＡＭ１５に格納する。ＣＰＵ１３は、ＲＡＭ１５に格納されるメモリ管理プログラムを実行することによって、あるいは、ＣＰＵ１３はＲＯＭ１４に格納されるメモリ管理プログラムを直接読み出して実行することによって、例えば図１に示す設定部２、判断部３及び制御部４を実現し、ステータス変更処理、復元処理及びデータ移行処理を行う。ＣＰＵ１３は、ＲＯＭ１４から種々のアプリケーションプログラムを読み出してＲＡＭ１５に格納する。ＣＰＵ１３は、ＲＡＭ１５に格納されるアプリケーションプログラムを実行する。あるいは、ＣＰＵ１３はＲＯＭ１４に格納されるアプリケーションプログラムを直接読み出して実行する。
【００２４】
ＲＯＭ１４は、メモリ管理プログラム、及びメモリ管理プログラムが使用する固定データを格納する。ＲＯＭ１４は、アプリケーションプログラム、及びアプリケーションプログラムが使用する固定データを格納する。ＲＡＭ１５は、ＣＰＵ１３の作業領域として用いられる。ＲＡＭ１５は、メモリ管理プログラムの実行中に使用される一時的なデータを格納する。ＲＡＭ１５は、アプリケーションプログラムの実行中に使用される一時的なデータを格納する。
【００２５】
制御回路１６は、ＣＰＵ１３から、フラッシュメモリ１８に対するフラグまたはステータスの書き込み、読み出しまたは消去の指示を受け取り、その指示に基づいてフラッシュメモリ１８へのアクセスを制御する。制御回路１６は、ＣＰＵ１３から、フラッシュメモリ１８に対するデータの書き込み、読み出しまたは消去の指示を受け取り、その指示に基づいてフラッシュメモリ１８へのアクセスを制御する。
【００２６】
フラッシュメモリ１８は、制御回路１６に接続されている。フラッシュメモリ１８は、ＣＰＵ１３の指示によって制御回路１６により書き込まれるフラグ、ステータスまたはデータを記憶する。
【００２７】
・ステータスの設定位置及び設定値の一例
図４は、ステータスの設定位置及び設定値の一例を示す図である。図４に示すように、フラッシュメモリ１８の各セクタの先頭には、例えばフラグが設定されてもよい。フラグには、例えば「有効」を示す値、「使用済」を示す値または初期値が格納されてもよい。
【００２８】
「有効」フラグは、セクタに有効なデータが書き込まれている場合に設定される。これ以降、「有効」フラグが設定されているセクタを有効セクタと称することがある。メモリ管理装置１の例えば設定部２（図１参照）は、各セクタのフラグを参照することによって、有効セクタを特定することができる。
【００２９】
「使用済」フラグは、セクタが消去可能である場合に設定される。「使用済」フラグが設定されるセクタは、データが使用済みで以後使用されないため消去可能（消去対象）である。データの消去が完了するまで、「使用済」フラグが設定されるセクタにはデータを書き込むことができない。
【００３０】
フラグが初期値であるセクタは、例えばデータの消去が完了しているセクタである。データの消去が完了しているセクタには再びデータを書き込むことができる。また、セクタが壊れるなどしてセクタが使用できない状態にある場合、例えばフラグの値が不定になることがある。
【００３１】
図４に示す例では、例えば４つのセクタがあり、セクタ＃１＿２１は有効セクタである。図４では、各セクタのデータを格納する領域において、網掛けされた領域は有効なデータを格納している領域であり、網掛けされていない領域は有効なデータを格納していない領域である。セクタ＃２＿２２は使用済みのセクタである。セクタ＃３＿２３は、消去済みで、データの書き込みが可能な状態にある。セクタ＃４＿２４は、使用できない状態にある。
【００３２】
また、フラッシュメモリ１８の各セクタの固定位置には、ステータスが設定されてもよい。各セクタにおいてステータスが設定される位置は、例えばフラグの次の位置であってもよい。ステータスは、いずれかの有効セクタに設定される。つまり、メモリ管理装置１の設定部２（図１参照）は、有効セクタの例えばフラグの次の位置にステータスを設定してもよい。なお、ステータスの位置は、フラグの次の位置以外の位置であってもよい。
【００３３】
有効セクタにおいてステータスの位置が固定されることによって、メモリ管理装置１の設定部２（図１参照）はステータスを設定することができ、また、判断部３（図１参照）はステータスを読み出すことができる。有効セクタ内のステータスを格納する領域には、フラッシュメモリ１８の例えば複数のセクタのステータスを示す値が格納される。
【００３４】
ステータスには、例えば「初期値」、「消去中」を示す値、「消去済」を示す値または「不使用」を示す値が格納されてもよい。「初期値」ステータスは、前回のセクタのデータの消去が完了したときに設定される。以後、再びデータの書き込みによってセクタが有効なデータを格納している場合も初期値が維持される。「初期値」ステータスの値は、例えばセクタの消去後の値である「０ｘＦＦＦＦＦＦＦＦ」であってもよい。
【００３５】
「消去中」ステータスは、セクタのデータを消去する直前に設定される。以後、消去中も「消去中」ステータスが維持される。「消去中」ステータスの値は、例えば「０ｘＡＡ５５ＦＦＦＦ」であってもよい。「消去済」ステータスは、セクタのデータの消去が成功し、消去が完了する場合に設定される。「消去済」ステータスの値は、例えば「０ｘＡＡ５５ＡＡ５５」であってもよい。
【００３６】
フラッシュメモリの特性上、ビットの「０」を「１」に書き換えることができない。そのため、「初期値」、「消去中」及び「消去済」の各ステータスの値がそれぞれ上述した値である場合、「消去中」のステータスを「初期値」のステータスに上書きしたり、「消去済」のステータスを「消去中」のステータスに上書きすることはできない。
【００３７】
「不使用」ステータスは、セクタのデータの消去が失敗して不良セクタとなる場合に設定される。「不使用」ステータスの値は、例えば「０ｘ００００００００」であってもよい。
【００３８】
図４に示す例では、セクタ＃１＿２１が有効セクタである。従って、セクタ＃１＿２１内のステータスを格納する領域２５には、セクタ＃１、セクタ＃２、セクタ＃３及びセクタ＃４の各ステータス２６，２７，２８，２９を示す値が格納される。図４では、各セクタのステータスを格納する領域において、斜線のある領域は、（有効な）ステータスの値を格納している領域であり、網掛けされていない領域は、ステータスの値を格納していない領域である。
【００３９】
・有効セクタが複数ある場合のステータスの設定位置
有効セクタが複数ある場合、ステータスは、複数の有効セクタのうちの１つのセクタに設定される。有効セクタが複数ある場合のステータスの設定位置については、例えば次に説明する２通りの例が挙げられる。
【００４０】
図５は、有効セクタが複数ある場合のステータスの設定位置の一例を示す図である。図５に示すように、全セクタが均等個数ずつ複数のグループ３１，３２，３３，３４に分けられており、全グループのうちの１つのグループが有効セクタとなる。有効セクタに含まれる複数のセクタの中で例えば前方の一つのセクタに設けたヘッダなどの１箇所の固定位置にステータス３５が設定される。
【００４１】
図５に示す例では、例えば８つのセクタが、セクタ＃１及びセクタ＃２を含むグループ３１、セクタ＃３及びセクタ＃４を含むグループ３２、セクタ＃５及びセクタ＃６を含むグループ３３、並びにセクタ＃７及びセクタ＃８を含むグループ３４に分けられている。そして、セクタ＃１及びセクタ＃２を含むグループ３１が有効セクタとなっている。
【００４２】
図６は、有効セクタが複数ある場合のステータスの設定位置の他の例を示す図である。図６には、有効セクタ及びステータスの変化の一例が時系列的に示されている。図６に示すように、今までの有効セクタが有効セクタであり続けるか、有効セクタでなくなって消去可能となるか、によらず、新たに有効セクタとなるセクタにステータスが移行する。
【００４３】
例えば、図６の１段目の状態４１に示すように、最初のセクタ＃１が有効セクタとなるときに、セクタ＃１にステータス４７が設定される。図６の２段目の状態４２に示すように、新たにセクタ＃２が有効セクタとなるときに、セクタ＃１が有効セクタであり続けても、セクタ＃２にステータス４８が移行する。
【００４４】
同様に、図６の３段目の状態４３に示すように、新たにセクタ＃３が有効セクタとなるときに、セクタ＃１及びセクタ＃２が有効セクタであり続けるか、消去可能となるか、によらず、セクタ＃３にステータス４９が移行する。図６の３段目の状態４３では、例えばセクタ＃１は有効セクタのままであるが、セクタ＃２は消去可能となっている。
【００４５】
図６の４段目の状態４４では、３段目の状態４３において消去可能であるセクタ＃２のデータが消去されている。図６では省略されているが、残りのセクタについても順に有効セクタとなり、新たに有効セクタとなるときにステータスも移行する。
【００４６】
そして、図６の５段目の状態４５に示すように、新たにセクタ＃２が有効セクタとなるときに、他のセクタが有効セクタであり続けるか、消去可能となるか、によらず、セクタ＃２にステータス５０が移行する。図６の６段目の状態４６では、新たにセクタ＃３が有効セクタとなり、セクタ＃３にステータス５１が移行し、セクタ＃２が再び消去可能となっている。
【００４７】
このように、今までの有効セクタが有効セクタであり続けても、新たに有効セクタとなるセクタにステータスが移行する。このようにステータスを移行させないで、今までの有効セクタ、例えば図６の例でセクタ＃１にステータスを設定し続けると、例えば図６の５段目の状態４５から図６の６段目の状態４６へ変化するときに不具合が生じる。
【００４８】
例えば新たに他のセクタが有効セクタになっても、セクタ＃１にステータスが設定され続けるとする。図６の５段目の状態４５では、セクタ＃１に設定されているステータスのうち、セクタ＃２のステータスは「消去済」となる。この状態でセクタ＃２がデータで一杯になると、セクタ＃２のデータがセクタ＃３へ移行される。
【００４９】
そして、セクタ＃２が消去可能となる。しかし、フラッシュメモリでは「０」を「１」に書き換えることができないため、セクタ＃１に設定されているステータスのうち、セクタ＃２のステータスを「消去済」から「消去中」に変更することができなくなってしまう。本実施例のように、新たに有効セクタとなるセクタにステータスが移行することによって、この不具合を回避することができる。
【００５０】
有効セクタが複数ある場合には、例えばフラグの値によって最新の有効セクタと最新でない有効セクタとが識別されてもよい。例えば、最新の有効セクタのフラグの値が「０ｘＡＡ５５ＡＡ５５ＦＦＦＦＦＦＦＦ」であり、最新でない有効セクタのフラグの値が「０ｘＡＡ５５ＡＡ５５ＡＡ５５ＡＡ５５」であってもよい。
【００５１】
・ステータス変更方法の一例
図７は、実施の形態にかかるメモリ管理方法におけるステータス変更方法の一例を示す図である。図８は、図７に示すステータス変更方法における消去成功時のステータスの遷移を示す図である。図９は、図７に示すステータス変更方法における消去失敗時のステータスの遷移を示す図である。図８及び図９に示す例では、消去対象のセクタがセクタ＃１＿２１であり、有効セクタであるセクタ＃２＿２２内のステータスを格納する領域６１に格納されているセクタ＃１のステータス２６が遷移する様子が示されている。
【００５２】
図７に示すように、消去対象のセクタに対する消去処理が開始されると、メモリ管理装置１の例えば設定部２（図１参照）は、各セクタのフラグを参照する。それによって、例えば設定部２は、「有効」フラグが設定されているセクタ、すなわち有効セクタを特定することができる（ステップＳ１１）。本実施例では、有効セクタはセクタ＃２＿２２であるとする。
【００５３】
次いで、例えば設定部２は、セクタ＃２＿２２内のステータスを格納する領域６１に格納されているセクタ＃１のステータス２６を「初期値」から「消去中」に変更する（ステップＳ１２）。本実施例では、セクタ＃１＿２１は消去対象のセクタであるとする。そして、メモリ管理装置１の例えば制御部４（図１参照）は、セクタ＃１＿２１を消去する（ステップＳ１３）。
【００５４】
次いで、例えば設定部２は、セクタ＃１＿２１の消去結果が成功であるか否かを判断する（ステップＳ１４）。消去結果は、例えば制御回路１６からＣＰＵ１３（図３参照）へ通知される。例えば設定部２は、制御回路１６からＣＰＵ１３へ通知される消去結果に基づいて、消去の成功または失敗を判断することができる。
【００５５】
消去成功である場合（ステップＳ１４：Ｙｅｓ）、例えば設定部２は、セクタ＃２＿２２内のステータスを格納する領域６１に格納されているセクタ＃１のステータス２６を「消去中」から「消去済」に変更する（ステップＳ１５）。一方、消去失敗である場合（ステップＳ１４：Ｎｏ）、例えば設定部２は、セクタ＃２＿２２内のステータスを格納する領域６１に格納されているセクタ＃１のステータス２６を「消去中」から「不使用」に変更する（ステップＳ１６）。
【００５６】
消去に失敗するセクタは、劣化が激しいと推測される。従って、以後、消去に失敗するセクタは使用されないのが望ましい。ステータスが「不使用」に変更されることによって、消去に失敗するセクタが使用されなくなる。そして、セクタ＃１＿２１に対する消去処理が終了する。複数のセクタが消去対象である場合、すべての消去対象のセクタに対して、図７に示す一連の消去処理が行われる。
【００５７】
・復元方法の一例
図１０は、実施の形態にかかるメモリ管理方法における復元方法の一例を示す図である。図１１は、図１０に示す復元方法におけるステータスの遷移を示す図である。図１１に示す例では、有効セクタはセクタ＃１＿２１であるとする。そして、例えば電源遮断またはリセットによってセクタ＃２＿２２に対する消去が中断されている場合の復元処理において、セクタ＃１＿２１内のステータスを格納する領域２５に格納されているセクタ＃２のステータス２７が遷移する様子が示されている。
【００５８】
図１０に示すように、電源の再投入やリセットによって例えばＣＰＵ１３（図３参照）がメモリ管理プログラムの実行を開始すると、復元処理が開始される。復元処理が開始されると、メモリ管理装置１の例えば設定部２（図１参照）は、各セクタのフラグを参照し、有効セクタを特定する（ステップＳ２１）。次いで、メモリ管理装置１の例えば判断部３（図１参照）は、セクタ＃１＿２１内のステータスを格納する領域２５に格納されている全てのセクタに対するステータスの参照が終了するまで（ステップＳ２２：Ｎｏ）、各セクタに対するステータスを一セクタずつ参照していく（ステップＳ２３）。
【００５９】
そして、例えば判断部３は、ステップＳ２３で参照するステータスが「初期値」または「消去済」であるか否かを判断する（ステップＳ２４）。ステータスが「初期値」または「消去済」である場合（ステップＳ２４：Ｙｅｓ）、ステップＳ２２へ戻る。その際、ステータスが「初期値」または「消去済」であるセクタに対して、何も処理がなされなくてもよい。
【００６０】
ステップＳ２３で参照するステータスが「初期値」でもなく「消去済」でもない場合（ステップＳ２４：Ｎｏ）、例えば判断部３は、ステップＳ２３で参照するステータスが「消去中」であるか否かを判断する（ステップＳ２５）。ステータスが「消去中」であるセクタは、消去が中断されている状態にある。そこで、ステータスが「消去中」である場合（ステップＳ２５：Ｙｅｓ）、メモリ管理装置１の例えば制御部４（図１参照）は、ステータスが「消去中」であるセクタ＃２＿２２を消去する（ステップＳ２７）。
【００６１】
ステップＳ２３で参照するステータスが「初期値」でもなく「消去済」でもなく（ステップＳ２４：Ｎｏ）、「消去中」でもない場合（ステップＳ２５：Ｎｏ）、例えば判断部３は、ステップＳ２３で参照するステータスが「不使用」であるか否かを判断する（ステップＳ２６）。ステータスが「不使用」である場合（ステップＳ２６：Ｙｅｓ）、ステップＳ２２へ戻る。
【００６２】
ステータスが「不使用」であるセクタに対して、劣化しているため使用しないこととして、何も処理しなくてもよいし、再消去を試みてもよい。そして、再消去に成功するセクタを、再び使用するようにしてもよい。再消去に失敗する場合には、今後、そのセクタを使用しないことにしてもよい。また、再消去を所定回数、試みてもよいし、起動時に毎回、再消去を試みてもよい。再消去を所定回数、試みる場合には、消去の回数によってステータスの値を変えてもよい。
【００６３】
ステータスが「初期値」、「消去済」、「消去中」及び「不使用」のいずれでもないセクタのステータスは、不定になっている。ステータスが不定であるということは、そのセクタに対して消去などの処理が行われている途中で処理が中断されていると判断することができる。そこで、ステータスが「初期値」、「消去済」、「消去中」及び「不使用」のいずれでもない場合（ステップＳ２６：Ｎｏ）、例えば制御部４（図１参照）は、ステータスが「初期値」、「消去済」、「消去中」及び「不使用」のいずれでもないセクタを消去する（ステップＳ２７）。
【００６４】
ステップＳ２７でセクタの消去を行う場合、例えば設定部２は、消去結果が成功であるか否かを判断する（ステップＳ２８）。本実施例では、ステータスが「消去中」であるセクタ＃２＿２２の消去が成功するとする。消去成功である場合（ステップＳ２８：Ｙｅｓ）、例えば設定部２は、セクタ＃１＿２１内のステータスを格納する領域２５に格納されているセクタ＃２のステータス２７を「消去中」から「消去済」に変更する（ステップＳ２９）。そして、ステップＳ２２へ戻る。
【００６５】
消去失敗である場合（ステップＳ２８：Ｎｏ）、例えば設定部２は、セクタ＃１＿２１内のステータスを格納する領域２５に格納されているセクタ＃２のステータス２７を「消去中」から「不使用」に変更する（ステップＳ３０）。そして、ステップＳ２２へ戻る。
【００６６】
ステップＳ２２では、例えば判断部３は、全てのセクタに対するステータスの参照が終了するか否かを判断する。参照していないステータスが残っている場合には（ステップＳ２２：Ｎｏ）、参照していないステータスがなくなるまで、上述したようにステータスの参照及びステータスに対応する処理を繰り返し行う（ステップＳ２２〜ステップＳ３０）。全てのセクタに対するステータスの参照が終了する場合（ステップＳ２２：Ｙｅｓ）、一連の復元処理が終了する。
【００６７】
・データ移行方法の一例
図１２は、実施の形態にかかるメモリ管理方法におけるデータ移行方法の一例を示す図である。図１３は、図１２に示すデータ移行方法におけるステータスの遷移を示す図である。図１３に示す例では、データの移行前の有効セクタがセクタ＃１＿２１であり、データの移行後の有効セクタがセクタ＃２＿２２であるとする。そして、セクタ＃１＿２１のデータがセクタ＃２＿２２へ移行されるとする。
【００６８】
図１２に示すように、データの移行処理が開始されると、メモリ管理装置１の例えば設定部２（図１参照）は、各セクタのフラグを参照し、有効セクタを特定する（ステップＳ４１）。次いで、メモリ管理装置１の例えば判断部３（図１参照）は、セクタ＃１＿２１内のステータスを格納する領域２５に格納されているステータスのうち、データの移行先の候補となるセクタのステータスを参照する（ステップＳ４２）。
【００６９】
そして、例えば判断部３は、ステップＳ４２で参照するステータスが「不使用」であるか否かを判断する（ステップＳ４３）。ステータスが「不使用」である場合（ステップＳ４３：Ｙｅｓ）、データの移行先の候補となるセクタを別のセクタに変更する（ステップＳ４４）。そして、ステップＳ４２へ戻り、例えば判断部３（図１参照）は、セクタ＃１＿２１内のステータスを格納する領域２５に格納されているステータスのうち、新たにデータの移行先の候補となるセクタのステータスを参照する（ステップＳ４２）。
【００７０】
ステータスが「不使用」でないセクタが見つかるまで、データの移行先の候補となるセクタのステータスの参照及びデータの移行先の候補となるセクタの変更を繰り返す（ステップＳ４２〜ステップＳ４４）。ステップＳ４２で参照するステータスが「不使用」でない場合（ステップＳ４３：Ｎｏ）、データの移行が行われる（ステップＳ４５）。
【００７１】
本実施例では、セクタ＃１＿２１内のステータスを格納する領域２５に格納されているセクタ＃２のステータス２７が「消去済」である。従って、ステータスが「不使用」でないセクタとしてセクタ＃２＿２２が見つかり、セクタ＃２＿２２がデータの移行先のセクタとなる。それによって、ステップＳ４５では、セクタ＃１＿２１からセクタ＃２＿２２へデータが移行される。
【００７２】
データの移行後にセクタ＃１＿２１内のステータスを格納する領域２５に格納されている全てのステータスが、セクタ＃２＿２２内のステータスを格納する領域６１に移行されるまで（ステップＳ４６：Ｎｏ）、ステータスの移行処理が続けられる。移行されるステータスが「初期値」または「消去済」である場合（ステップＳ４７：Ｙｅｓ）、例えば設定部２は、セクタ＃２＿２２内のステータスを格納する領域６１に対して何もしなくてよい。セクタ＃２＿２２内のステータスを格納する領域６１において、ステータスの移行前にステータスが「初期値」または「消去済」であるセクタに対応する領域は、既に「初期値」になっている。
【００７３】
一方、移行されるステータスが「初期値」でも「消去済」でもない場合（ステップＳ４７：Ｎｏ）、例えば設定部２は、ステータスの移行によって、セクタ＃２＿２２内のステータスを格納する領域６１に、ステータスの移行前と同じ値のステータスを設定する（ステップＳ４８）。そして、データの移行後にセクタ＃１＿２１内のステータスを格納する領域２５に格納されている全てのステータスが、セクタ＃２＿２２内のステータスを格納する領域６１に移行されると（ステップＳ４６：Ｙｅｓ）、一連のデータの移行処理が終了する。
【００７４】
図３に示すマイクロコントローラ１１及び図７〜図１３に示すメモリ管理方法によれば、有効セクタにステータスが設定される。それによって、ステータス用のセクタを設けずに済む。従って、セクタ数を減らすことができ、フラッシュメモリ１８の実装面積を小さくすることができる。例えば、少なくともセクタが２つあれば、フラッシュメモリ１８の継続的な使用が実現される。フラッシュメモリ１８の実装面積が小さくなると、マイクロコントローラ１１を小型化することができる。
【００７５】
また、フラッシュメモリ１８に３つのセクタがある場合、いずれか１つのセクタが壊れても、残りの２つのセクタ間でデータ及びステータスの移行を行うことができる。従って、フラッシュメモリ１８を継続して使用することができる。
【００７６】
また、電源遮断またはリセットによってセクタの消去が中断されている場合、起動時にステータスを参照することによって、メモリ管理装置１２は、消去が中断されていることを認識することができる。従って、起動時に、消去が中断されているセクタに対して再度消去を行うことができる。それによって、消去が中断されているセクタを適切に復元することができる。
【００７７】
また、「不使用」のステータスを設定することによって、使用不能なセクタを除外し、残りの正常なセクタを用いてフラッシュメモリ１８を使い続けることができる。それに対して、本実施例のような消去状態を反映するステータスを設定しないで、全てのセクタの消去回数が均等になるように、セクタ＃１、セクタ＃２、セクタ＃３、・・・というようにセクタを順番に使用するようにすることができる。
【００７８】
しかし、消去状態を反映するステータスが設定されていない場合、あるセクタが壊れて使用不能になると、その壊れたセクタの後に続くセクタは、正常であっても使用不能になってしまうため、フラッシュメモリ１８の寿命が短くなってしまう。本実施例によれば、正常なセクタが２つになるまでフラッシュメモリ１８を使い続けることができる。つまり、より長期間にわたってフラッシュメモリ１８を使用することができる。
【００７９】
・メモリ管理装置の別の例
図１４は、実施の形態にかかるメモリ管理装置の別の例を示す図である。図１４に示すように、メモリ管理装置７１を有するチップに対してフラッシュメモリ７２が外付けされていてもよい。フラッシュメモリ７２がチップに外付けされる場合でも、メモリ管理方法は、図３に示すマイクロコントローラ１１のように、メモリ管理装置１２とフラッシュメモリ１８とが同一のチップ内に設けられている場合と同様である。
【００８０】
なお、上述した各実施例において、メモリはフラッシュメモリに限らず、フラッシュメモリと同様に、セクタ単位で一括して消去可能なメモリであればよい。
【００８１】
実施の形態にかかるメモリ管理装置１，７１またはマイクロコントローラ１１を、例えばセクタのサイズより小さいデータを随時更新するためにデータの書き換えを行うことのある装置やシステムに利用することができる。このような装置やシステムの一例として、例えば車載機器、民生機器または産業機器などの諸分野の機器において、データ格納用にフラッシュメモリを使用する機器が挙げられる。
【００８２】
上述した各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００８３】
（付記１）一括して消去可能なセクタを複数個有するメモリの複数の前記セクタのうち、有効なデータが書き込まれる第１のセクタに、消去対象のセクタの状態を示すステータスを設定する設定部と、
起動時に前記ステータスが消去中になっているか否かを判断する判断部と、
起動時に前記ステータスが消去中になっているセクタに対する消去を制御する制御部と、
を備えることを特徴とするメモリ管理装置。
【００８４】
（付記２）前記設定部は、消去に失敗したセクタに対応する前記ステータスに、使用不能であることを示すステータスを設定することを特徴とする付記１に記載のメモリ管理装置。
【００８５】
（付記３）前記設定部は、前記第１のセクタとは別の第２のセクタに新たに有効なデータが書き込まれるときに、前記第１のセクタから前記第２のセクタに前記ステータスを移行することを特徴とする付記１または２に記載のメモリ管理装置。
【００８６】
（付記４）一括して消去可能なセクタを複数個有するメモリと、
前記メモリを管理するメモリ管理装置と、
を備え、前記メモリ管理装置は、
複数の前記セクタのうち、有効なデータが書き込まれる第１のセクタに、消去対象のセクタの状態を示すステータスを設定する設定部と、
起動時に前記ステータスが消去中になっているか否かを判断する判断部と、
起動時に前記ステータスが消去中になっているセクタに対する消去を制御する制御部と、
を備えることを特徴とするマイクロコントローラ。
【００８７】
（付記５）前記設定部は、消去に失敗したセクタに対応する前記ステータスに、使用不能であることを示すステータスを設定することを特徴とする付記４に記載のマイクロコントローラ。
【００８８】
（付記６）前記設定部は、前記第１のセクタとは別の第２のセクタに新たに有効なデータが書き込まれるときに、前記第１のセクタから前記第２のセクタに前記ステータスを移行することを特徴とする付記４または５に記載のマイクロコントローラ。
【００８９】
（付記７）一括して消去可能なセクタを複数個有するメモリの複数の前記セクタのうち、有効なデータが書き込まれる一のセクタに、消去対象のセクタの状態を示すステータスを設定し、
起動時に前記ステータスが消去中になっているか否かを判断し、
起動時に前記ステータスが消去中になっているセクタに対する消去を制御することを特徴とするメモリ管理方法。
【符号の説明】
【００９０】
１  メモリ管理装置
２  設定部
３  判断部
４  制御部
【図１】
2014071535.tif 000003
【図２】
2014071535.tif 000004
【図３】
2014071535.tif 000005
【図４】
2014071535.tif 000006
【図５】
2014071535.tif 000007
【図６】
2014071535.tif 000008
【図７】
2014071535.tif 000009
【図８】
2014071535.tif 000010
【図９】
2014071535.tif 000011
【図１０】
2014071535.tif 000012
【図１１】
2014071535.tif 000013
【図１２】
2014071535.tif 000014
【図１３】
2014071535.tif 000015
【図１４】
2014071535.tif 000016