(57)【特許請求の範囲】
【請求項１】
複数の記憶ブロックを備えた電気的にデータ書換可能なフラッシュＲＯＭと、
前記フラッシュＲＯＭに対する書込対象データが生じると、前記書込対象データの前記フラッシュＲＯＭに対する書込頻度の区分を判定する判定手段と、
前記フラッシュＲＯＭが備える前記複数の記憶ブロックを、前記書込頻度の区分数に対応した数のグループに分けることによって、グループ化するグループ化手段と、
前記書込対象データが生じると、前記書込対象のデータを、前記フラッシュＲＯＭが備える前記複数の記憶ブロックの内、前記判定手段により判定された前記書込頻度の区分に対応した前記グループの前記記憶ブロックに書き込む書込制御手段と、
前記フラッシュＲＯＭが備える前記複数の記憶ブロックの夫々に関して、空き領域のなくなった前記記憶ブロック内のデータを、前記グループ毎に、古いデータを記憶する前記記憶ブロックから順に消去する消去手段と、
を備え、
前記グループ化手段は、前記消去手段による前記複数の記憶ブロック夫々のデータ消去回数に応じて、各グループの前記記憶ブロックを入れ替えることによって、前記複数の記憶ブロックを再グループ化する構成にされていること
を特徴とする電子機器。
【請求項２】
複数の記憶ブロックを備えた電気的にデータ書換可能なフラッシュＲＯＭと、
前記フラッシュＲＯＭに対する書込対象データが生じると、前記書込対象データの前記フラッシュＲＯＭに対する書込頻度の高低を判定する判定手段と、
前記フラッシュＲＯＭが備える前記複数の記憶ブロックを、前記書込頻度の低いデータを記憶する記憶ブロックのグループである第一のグループ、及び、前記書込頻度の高いデータを記憶する記憶ブロックのグループである第二のグループに分けることによって、グループ化するグループ化手段と、
前記判定手段の判定結果に従い、前記書込頻度の低い前記書込対象のデータを、前記フラッシュＲＯＭが備える前記複数の記憶ブロックの内、前記第一のグループの前記記憶ブロックに書き込み、前記書込頻度の高い前記書込対象のデータを、前記フラッシュＲＯＭが備える前記複数の記憶ブロックの内、前記第二のグループの前記記憶ブロックに書き込む書込制御手段と、
前記フラッシュＲＯＭが備える前記複数の記憶ブロックの夫々に関して、空き領域のなくなった前記記憶ブロック内のデータを、前記グループ毎に、古いデータを記憶する前記記憶ブロックから順に消去する消去手段と、
を備え、
前記グループ化手段は、前記消去手段による前記複数の記憶ブロック夫々のデータ消去回数に応じて、各グループの前記記憶ブロックを入れ替えることによって、前記複数の記憶ブロックを再グループ化する構成にされていること
を特徴とする電子機器。
【請求項３】
前記第二のグループに属する前記記憶ブロックの数は、前記第一のグループに属する前記記憶ブロックの数よりも大きいことを特徴とする請求項２記載の電子機器。
【請求項４】
前記グループ化手段は、前記書込頻度が最も高い区分に対応するグループに属する記憶ブロック群のデータ消去回数に基づいて、当該データ消去回数が所定基準を超える度に、前記複数の記憶ブロックを再グループ化する構成にされていること
を特徴とする請求項１〜請求項３のいずれか一項記載の電子機器。
【請求項５】
前記グループ化手段は、前記複数の記憶ブロックの夫々がグループ間を循環するように、前記複数の記憶ブロックを再グループ化する構成にされていること
を特徴とする請求項１〜請求項４のいずれか一項記載の電子機器。
【請求項６】
前記電子機器は、車両制御用の電子機器であり、
前記書込対象データには、車両制御用のデータが含まれること
を特徴とする請求項１〜請求項５のいずれか一項記載の電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電気的にデータ書換可能な不揮発性メモリを備え、この不揮発性メモリに対してデータの書込を行う電子機器に関する。
【背景技術】
【０００２】
従来、電気的にデータ書換可能な不揮発性メモリとしては、ＥＥＰＲＯＭやフラッシュＲＯＭが知られている。周知のように、ＥＥＰＲＯＭは、バイト単位でのデータ書込及び消去が可能なメモリである。一方、フラッシュＲＯＭでは、バイト単位でのデータ書込が可能であるものの、ブロック単位での消去が通常必要である。但し、フラッシュＲＯＭについては、記憶容量の大きい製品を安価に入手可能であるため、広く利用されている。
【０００３】
ところで、ＥＥＰＲＯＭやフラッシュＲＯＭのような不揮発性メモリのデータ消去回数には、限界がある。このため、不要なデータ消去を抑えてメモリの長寿命化を図るための技術が、従来から研究されている。
【０００４】
例えば、フラッシュＲＯＭに関する技術としては、書込頻度の低いデータ及び書込頻度の高いデータが混在する環境において、フラッシュＲＯＭを構成する複数の記憶ブロックを、書込頻度の低いデータを記憶するための記憶ブロックである低頻度ブロックの一群と、書込頻度の高いデータを記憶するための記憶ブロックである高頻度ブロックの一群とに分ける技術が知られている（例えば、特許文献１参照）。この技術によれば、高頻度ブロックの数を低頻度ブロックの数よりも大きくする。
【０００５】
書込頻度が高いことを原因として、高頻度ブロックでは、低頻度ブロックの一群よりも群全体でのデータ消去回数が多くなるが、上述のように記憶ブロック数を調整すれば、高頻度ブロックの一群において、個々の記憶ブロックでのデータ消去回数を抑えることができる。即ち、この技術によれば、書込頻度の違いによって各記憶ブロックでのデータ消去回数にばらつきが生じるのを抑え、フラッシュＲＯＭの長寿命化を図ることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１７２４４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術では、フラッシュＲＯＭを構成する複数の記憶ブロックを、低頻度ブロック及び高頻度ブロックのいずれかに予め分類し、その分類を固定的に用いて、データ書込を行う程度であるため、各記憶ブロックにおけるデータ消去回数のばらつきの抑制には限界があった。そして、ばらつきを原因として、高頻度ブロックのデータ消去回数が早く上限に達してしまい、低頻度ブロックのデータ消去回数が上限よりもかなり少ない状態で、フラッシュＲＯＭの寿命が到来してしまうといった問題があった。
【０００８】
本発明は、こうした問題に鑑みなされたものであり、各記憶ブロックのデータ消去回数のばらつきを適切に抑制可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するためになされた本発明の電子機器は、電気的にデータ書換可能な不揮発性メモリと、書込制御手段と、消去手段と、判定手段と、グループ化手段と、を備える。この電子機器には、上記不揮発性メモリとして、複数の記憶ブロックを備えた不揮発性メモリが搭載される。
【００１０】
この電子機器が備える書込制御手段は、不揮発性メモリに対する書込対象データが生じると、この書込対象データを不揮発性メモリが備える上記複数の記憶ブロックのいずれかに書き込む（詳細後述）。また、消去手段は、不揮発性メモリが備える上記複数の記憶ブロックの夫々に関して、これら記憶ブロック内のデータを、所定条件が満足される度に消去する。
【００１１】
一方、グループ化手段は、不揮発性メモリが備える上記複数の記憶ブロックをグループ化する。具体的には、上記複数の記憶ブロックを、不揮発性メモリに書き込まれるデータの書込頻度の区分数に対応した数のグループに分ける。
【００１２】
判定手段は、書込対象データが生じると、この書込対象データの不揮発性メモリに対する書込頻度の区分を判定する。上記書込制御手段は、この書込対象データを、上記複数の記憶ブロックの内、判定手段により判定された書込頻度の区分に対応したグループの記憶ブロックに書き込む。
【００１３】
そして、上記グループ化手段は、上記複数の記憶ブロック夫々のデータ消去回数に応じて、上記グループの再設定を行う。即ち、本発明のグループ化手段は、上記データ消去回数に応じて、各グループの記憶ブロックを入れ替え、上記複数の記憶ブロックを再グループ化する。但し、ここで言う「入れ替え」とは、グループから外す記憶ブロックの数と、このグループに入れる記憶ブロックの数が一致しないような「入れ替え」も含む。即ち、ここで言う「入れ替え」とは、グループ内の記憶ブロック数が変化するような「入れ替え」動作も含む。また、ここで言う「入れ替え」とは、グループ内の記憶ブロックを全て入れ替える動作、及び、グループ内の記憶ブロックの一部を入れ替える動作の両者を含む。
【００１４】
このように構成された本発明の電子機器によれば、不揮発性メモリが備える複数の記憶ブロックが、書込頻度の区分に対応したグループにグループ化されるが、そのグループは、固定のグループではなく、上記データ消去回数に応じて適宜変更される。従って、本発明の電子機器によれば、グループが固定的に用いられる従来技術と比較して、不揮発性メモリが備える各記憶ブロックのデータ消去回数のばらつきを適切に抑えることができ、不揮発性メモリの長寿命化を図ることができる。この発明は、記憶ブロック単位でのデータ消去が必要な不揮発性メモリを搭載した電子機器に適用されると、発明の効果が一層発揮されて好ましい。記憶ブロック単位でのデータ消去が必要なメモリとしては、フラッシュＲＯＭが知られており、上述した発明は、不揮発性メモリとしてフラッシュＲＯＭを搭載した電子機器に適用することができる。上記消去手段は、例えば、フラッシュＲＯＭが備える複数の記憶ブロックの夫々に関して、空き領域のなくなった記憶ブロック内のデータを、グループ毎に、古いデータを記憶する記憶ブロックから順に消去することができる（請求項１）。
【００１５】
上記書込頻度の区分としては、例えば「高」「低」の二区分を挙げることができ、判定手段は、書込頻度の区分として、書込頻度の高低を判定する構成にすることができる（請求項２）。また、これに併せて、グループ化手段は、不揮発性メモリが備える上記複数の記憶ブロックを、書込頻度の低いデータを記憶する記憶ブロックのグループである第一のグループ、及び、書込頻度の高いデータを記憶する記憶ブロックのグループである第二のグループに分けることによって、上記複数の記憶ブロックをグループ化する構成にすることができる。
【００１６】
更に、上記書込制御手段は、判定手段の判定結果に従い、書込頻度の低い書込対象のデータを、不揮発性メモリが備える複数の記憶ブロックの内、第一のグループの記憶ブロックに書き込み、書込頻度の高い書込対象のデータを、不揮発性メモリが備える複数の記憶ブロックの内、第二のグループの記憶ブロックに書き込む構成にすることができる。
【００１７】
また、上記複数の記憶ブロックのグループ化については、第二のグループに属する記憶ブロックの数が、第一のグループに属する記憶ブロックの数よりも大きくなるように、行うことができる（請求項３）。即ち、上記複数の記憶ブロックのグループ化については、書込頻度の高いグループの記憶ブロック数ほど記憶ブロック数が大きくなるように、行うことができる。
【００１８】
このように、書込頻度の高いグループの記憶ブロック数を、書込頻度の低いグループの記憶ブロック数よりも大きくすれば、書込頻度の高いグループ内の各記憶ブロックのデータ消去回数を抑えることができ、その結果として、書込頻度による各記憶ブロックのデータ消去回数のばらつきを抑えることができる。従って、このように記憶ブロック数を調整すれば、グループ化手段によるデータ消去回数に応じた再グループ化の実行頻度を減らすことができる。再グループ化に際しては、グループ間を移動する記憶ブロック内のデータを消去する動作が必要になるケースが考えられるが、再グループ化の頻度を減らすことができれば、このようなケースにおいて、再グループ化に伴うデータ消去回数を減らすことができ、不揮発性メモリの長寿命化を図ることができる。
【００１９】
また、グループ化手段は、書込頻度が最も高い区分に対応するグループに属する記憶ブロック群のデータ消去回数に基づいて、当該データ消去回数が所定基準を超える度に、上記複数の記憶ブロックを再グループ化する構成にすることができる（請求項４）。具体的には、書込頻度が最も高い区分に対応するグループに属する記憶ブロック群の内の特定ブロックのデータ消去回数や、これら記憶ブロック群のデータ消去回数の最大値、中間値、平均値等を指標にして、当該指標とするデータ消去回数が所定基準を超える度に、上記複数の記憶ブロックを再グループ化する構成にすることができる。書込頻度が高いグループの記憶ブロックにおいてはデータ消去回数の増加速度が高い傾向にあるので、このような条件で再グループ化を実行することにより、記憶ブロック間のばらつきが大きく乖離しない適切な時期に記憶ブロックを再グループ化することができる。
【００２０】
この他、上記グループ化手段は、上記複数の記憶ブロックの夫々がグループ間を循環するように、複数の記憶ブロックを再グループ化する構成にされるのが好ましい（請求項５）。このようにグループ化を行えば、不揮発性メモリが備える各記憶ブロックのデータ消去回数を均一にすることができて、不揮発性メモリの長寿命化を図ることができる。具体的に、再グループ化に際しては、各グループに属する記憶ブロックの数を変更せずに、各グループ内の記憶ブロックを入れ替える手法を採用することができる。
【００２２】
また、上述した発明は、車両制御用の電子機器であって、書込対象データに車両制御用のデータが含まれる電子機器に適用されるとよい（請求項６）。車両制御用のデータには、学習更新されるデータや固定的に用いられるデータなど書込頻度の大きく異なるデータが混在することが多く、このような電子機器に、上述した発明を適用されると、不揮発性メモリを効果的に長寿命化することができる。
【００２３】
また、上述の電子機器が備える各手段としての機能は、プログラムにより、コンピュータに実現させることができる。この他、上述の電子機器が備える各手段としての機能をコンピュータに実現させるためのプログラムは、コンピュータ読取可能な記録媒体に記録して、ユーザに提供することができる。記録媒体としては、ハードディスク等の磁気ディスク、ＣＤやＤＶＤ等の光ディスク、及び、光磁気ディスク等の他、メモリカード等の半導体製メモリを挙げることができる。
【図面の簡単な説明】
【００２４】
【図１】電子制御装置１の構成を表すブロック図である。
【図２】フラッシュＲＯＭ１３の構成を表すブロック図である。
【図３】ＭＰＵ１１が実行する書込制御処理を表すフローチャートである。
【図４】フラッシュＲＯＭ１３が有する記憶ブロックの構成を表す図である。
【図５】ＭＰＵ１１が実行する低頻度データ書込処理を表すフローチャートである。
【図６】ＭＰＵ１１が実行する高頻度データ書込処理を表すフローチャートである。
【図７】高頻度ブロックにおけるデータ消去の態様を説明した図である。
【図８】記憶ブロック群の再グループ化の手順を説明した図である。
【図９】記憶ブロック群の再グループ化による低頻度ブロック群の領域変化を示した図である。
【発明を実施するための形態】
【００２５】
以下に本発明の実施例について、図面と共に説明する。
図１に示す本実施例の電子制御装置（ＥＣＵ）１は、車両に搭載されて、車両各部を制御するものである。この電子制御装置１は、車両に搭載されたセンサ類５からの出力信号に基づき、制御対象３としての車両に搭載された各種アクチュエータを制御することによって、車両各部を制御する。この電子制御装置１としては、例えば、エンジン制御を行う電子制御装置を挙げることができる。
【００２６】
具体的に、本実施例の電子制御装置１は、マイクロプロセッサ（ＭＰＵ）１１と、フラッシュＲＯＭ１３と、入出力回路１５と、を備える。ＭＰＵ１１は、各種プログラムに従う処理を実行することによって、車両制御を実現する。このＭＰＵ１１は、上記各種プログラムを記憶するＲＯＭ１１ａと、ＲＯＭ１１ａに記憶されたプログラムに基づく各種処理の実行時に作業領域として使用されるＲＡＭ１１ｂと、を備える。
【００２７】
即ち、ＭＰＵ１１は、ＲＯＭ１１ａに記憶された各種プログラムを実行することにより、入出力回路１５を通じて、センサ類５からの出力信号を取得し、この出力信号に基づき、制御対象３への制御信号を生成し、これを入出力回路１５を通じて、制御対象３に入力する。このような処理によって制御対象３を制御し、車両制御を実現する。
【００２８】
一方、電気的にデータ書換可能な不揮発性メモリとして知られるフラッシュＲＯＭ１３は、車両制御に関わる種々のデータを記憶する。例えば、電子制御装置１がエンジン制御用の電子制御装置である場合、フラッシュＲＯＭ１３には、この車両に固有のコードである車両識別コード（ＶＩＮ）、イモビライザー用のコード、車両の診断結果を表すダイアグコード、フリーズフレームデータ、エンジン制御用の制御パラメータ等が記憶される。尚、この制御パラメータには、学習更新される制御パラメータ（以下、学習パラメータ）が含まれる。
【００２９】
学習パラメータは、その値がＭＰＵ１１による車両制御の結果に従って学習更新されて、フラッシュＲＯＭ１３に書き込まれるものである。即ち、ＭＰＵ１１は、車両制御に際して、制御パラメータをフラッシュＲＯＭ１３からＲＡＭ１１ｂに読み出し、この制御パラメータと、センサ類５からの出力信号とに基づき、制御対象３を制御する。そして、この制御結果に従って、ＲＡＭ１１ｂ内の学習パラメータを更新し、更新後の学習パラメータを適当な時期にＲＡＭ１１ｂからフラッシュＲＯＭ１３に書き込む。これによって、フラッシュＲＯＭ１３には、学習パラメータの最新値が書き込まれる。尚、学習パラメータのフラッシュＲＯＭ１３への書込は、例えば、一定時間毎や一定走行距離毎やイグニッションスイッチのオフ動作毎に実行される。
【００３０】
一方、ダイアグコードは、例えば、イグニッションスイッチがオンされてエンジンが始動されるときや、車両走行中にＭＰＵ１１によって実行される車両診断の結果に従って、フラッシュＲＯＭ１３に書き込まれるものである。但し、ダイアグコードは、基本的に、車両診断の結果、車両の異常が検出されたときに限って、その値が変化し、フラッシュＲＯＭ１３への書込が必要となるものである。そして、車両診断により異常が検出される確率は高くない。このため、フラッシュＲＯＭ１３には、ＭＰＵ１１によって、低い頻度でダイアグコードが書き込まれる。
【００３１】
また、フリーズフレームデータは、エンジン制御等の異常が生じたときに、フラッシュＲＯＭ１３に書き込まれるものであり、異常発生時のエンジン状態を表すデータである。ダイアグコードと同様、フリーズフレームデータの書込が必要な異常の発生確率は高くないため、フラッシュＲＯＭ１３には、ＭＰＵ１１によって、低い頻度でフリーズフレームデータが書き込まれる。この他、ＶＩＮコードや、イモビライザー用のコードについては、通常、車両への電子制御装置１の搭載時に限ってフラッシュＲＯＭ１３に書き込まれる。
【００３２】
ところで、本実施例のフラッシュＲＯＭ１３に記憶されるデータには、上述したように、学習パラメータのような書込頻度の高いデータや、ダイアグコードやフリーズフレームデータのような書込頻度の低いデータが混在する。このため、本実施例では、図２に示すように、フラッシュＲＯＭ１３が備える複数の記憶ブロックを、書込頻度の高いデータ記憶用の記憶ブロックと、書込頻度の低いデータ記憶用の記憶ブロックとに分けることによってグループ化し、フラッシュＲＯＭ１３内の記憶ブロック群におけるデータ消去回数のばらつきを抑えるようにしている。
【００３３】
電子制御装置１が備えるフラッシュＲＯＭ１３は、周知のフラッシュＲＯＭと同様のものであり、図２に示すように、複数の記憶ブロックを備える。このフラッシュＲＯＭ１３は、周知のフラッシュＲＯＭと同様、バイト単位でのデータ書込が可能であるものの、データ消去についてはブロック単位での消去が必要なものである。即ち、データ消去されリセットされた状態の記憶ブロックには、新規データをバイト単位で書き込むことができるものの、データが書き込まれた記憶ブロック内の領域に対しては、記憶ブロック全体に対してデータ消去動作（リセット動作）を行わない限り、新たなデータを上書きすることができない。
【００３４】
このようなデータ消去の制約があり、更に、データ消去回数にハードウェア上の上限がある既存のフラッシュＲＯＭによれば、フラッシュＲＯＭの寿命を考慮して、むやみに記憶ブロックを消去することができない。このため、本実施例では、例えば、学習パラメータの最新値を、フラッシュＲＯＭ１３を書き込む際、この学習パラメータの古い値をフラッシュＲＯＭ１３から消去せずに最新値をフラッシュＲＯＭ１３に追記することによって、学習パラメータの最新値を、古い値を残したままフラッシュＲＯＭ１３に記憶させる。このような追記動作の繰返しによれば、学習パラメータの最新値が更新される度に、記憶ブロック単位でのデータ消去を行わなくて済み、フラッシュＲＯＭ１３の長寿命化を図ることができる。
【００３５】
但し、このような追記動作の繰返しによっては、記憶ブロックの空き領域が徐々に減っていく。このため、空き領域のなくなった記憶ブロックについては、順次、この記憶ブロック内のデータを消去することによって、追記に必要な空き領域を確保する必要がある。
【００３６】
そして、このような手法でフラッシュＲＯＭ１３に対するデータ書込及びデータ消去を行う場合には、書込頻度（更新頻度）の高いデータ及び書込頻度の低いデータを分けずに同一記憶ブロックに書き込んでしまうと、次のような不都合が生じる。即ち、フラッシュＲＯＭ１３内において空き領域を確保するためには、記憶ブロック単位でデータ消去を行う必要があるため、一つの記憶ブロックに、書込頻度（更新頻度）の高いデータ及び書込頻度（更新頻度）の低いデータが混在していると、フラッシュＲＯＭ１３内において空き領域を確保するために、本来消去する必要のない最新データに該当する書込頻度の低いデータ（ダイアグコード等）まで消去し、この記憶ブロックに空き領域を確保しなければならない。このような処理では、本来消去する必要のないデータを一旦フラッシュＲＯＭ１３から消去し、このデータを、再度フラッシュＲＯＭ１３に書き込まなければならないため、データ消去及び書込の無駄が多い。
【００３７】
このような理由から、本実施例では、図２に示すように、フラッシュＲＯＭ１３が備える複数の記憶ブロックを、書込頻度の高いデータ記憶用の記憶ブロックと、書込頻度の低いデータ記憶用の記憶ブロックとにグループ化している。以下では、書込頻度の高いデータ記憶用の記憶ブロックのことを「高頻度ブロック」と表現し、書込頻度の低いデータ記憶用の記憶ブロックのことを「低頻度ブロック」と表現する。
【００３８】
ちなみに、図２には、フラッシュＲＯＭ１３が、第０記憶ブロックから第７記憶ブロックまでの合計８個の記憶ブロックを備える例を示すが、これは説明を簡単にするためのものであり、フラッシュＲＯＭ１３が備える記憶ブロック数が、この例に限定されないのは言うまでもない。
【００３９】
ここで注目すべきは、本実施例によれば高頻度ブロックの数が低頻度ブロックの数よりも大きくなるように、記憶ブロックのグループ化が行われることである。高頻度ブロックの数が低頻度ブロックの数よりも大きくなるようにグループ化を行う理由は、高頻度ブロックでのデータ消去回数を抑えるためである。本実施例では、上述したように追記動作によって学習データ等を書き込み、必要に応じて記憶ブロック単位でのデータ消去を行うが、高頻度ブロックの数を多くすると、空き領域を確保するためのデータ消去回数を記憶ブロック単位で抑えることができる。このような理由から本実施例では、高頻度ブロックの数が低頻度ブロックの数よりも大きくなるようにグループ化を行う。
【００４０】
また、本実施例の電子制御装置１は、このような書込頻度に応じたデータの振り分けを行うために、ＲＯＭ１１ａにおいて振分表を記憶している（図１参照）。振分表は、低頻度ブロックに書き込むべき種類のデータのＩＤコードが列挙された第一のリストと、高頻度ブロックに書き込むべき種類のデータのＩＤコードが列挙された第二のリストと、を備える。本実施例においては、フラッシュＲＯＭ１３に書き込まれるデータについて、その種類毎に、ＩＤコードが割り当てられており、各リストには、このようなＩＤコードを用いて、該当する種類のデータが記述される。
【００４１】
この振分表は、設計段階で、設計者により作成される。この振分表の作成に当っては、フラッシュＲＯＭ１３に書き込まれることが設計上決まっている種類のデータを、書込頻度によって区分化する。ここでは、フラッシュＲＯＭ１３に書き込まれることが決まっている種類のデータを、書込頻度が「高い」種類のデータと、書込頻度が「低い」種類のデータとに、区分する。そして、第一のリストには、書込頻度が「低い」種類のデータのＩＤコードを記述し、第二のリストには、書込頻度が「高い」種類のデータのＩＤコードを記述する。このようにして振分表は、予め設計段階で、電子制御装置１の設計者により作成され、ＲＯＭ１１ａに書き込まれる。
【００４２】
そして、電子制御装置１のＭＰＵ１１は、フラッシュＲＯＭ１３に対する書込対象データが生じると、図３に示す書込制御処理を実行して、ＲＯＭ１１ａに記憶された振分表に基づき、フラッシュＲＯＭ１３へのデータ書込を行う。
【００４３】
電子制御装置１のＭＰＵ１１は、フラッシュＲＯＭ１３に対する書込対象データが生じると、図３に示す書込制御処理を実行し、その書込対象データを生成したタスクから通知される書込対象データのＩＤコードと、ＲＯＭ１１ａが記憶する振分表とに基づいて、書込対象データが低頻度ブロックに書き込むべき種類のデータであるか否かを判断する（Ｓ１００）。即ち、振分表の区分に従って、書込対象データが、書込頻度の低い種類のデータとして区分されたデータであるか否かを判断する（Ｓ１００）。
【００４４】
そして、書込対象データが、書込頻度の低い種類のデータとして区分されたものであり、低頻度ブロックに書き込むべき種類のデータであると判断すると（Ｓ１００でＹｅｓ）、Ｓ２００に移行して、低頻度データ書込処理（詳細後述。図５参照）を実行する。この処理により、フラッシュＲＯＭ１３の低頻度ブロックに、書込対象データを書き込む。
【００４５】
一方、書込対象データが、書込頻度の高い種類のデータとして区分されたものであり、高頻度ブロックに書き込むべき種類のデータであると判断すると（Ｓ１００でＮｏ）、Ｓ３００に移行して、高頻度データ書込処理（詳細後述。図６参照）を実行する。この処理により、フラッシュＲＯＭ１３の高頻度ブロックに、書込対象データを書き込む。その後、当該書込制御処理を終了する。
【００４６】
尚、本実施例のフラッシュＲＯＭ１３には、フラッシュＲＯＭ１３が備える記憶ブロックの内のいずれが低頻度ブロックであり、フラッシュＲＯＭ１３が備える記憶ブロックの内のいずれが高頻度ブロックであるかを表す低頻度ブロック群及び高頻度ブロック群についての設定情報が、グループ情報として記憶されている。ＭＰＵ１１は、このグループ情報に基づいて、フラッシュＲＯＭ１３が備える記憶ブロックの内のいずれが低頻度ブロックであり、フラッシュＲＯＭ１３が備える記憶ブロックの内のいずれが高頻度ブロックであるかを判断する。
【００４７】
尚、このグループ情報は、低頻度ブロックに書き込まれてもよいし、各記憶ブロックに設けられたブロックヘッダに格納されてもよい。例えば、このグループ情報は、低頻度ブロック群の先頭ブロックに書き込むことができ、低頻度ブロック群の先頭ブロックを基準に、低頻度ブロック及び高頻度ブロックの配置を記述した情報とすることができる。
【００４８】
また、図４には、フラッシュＲＯＭ１３が備える記憶ブロックの詳細を示す。各記憶ブロックは、ブロックヘッダを備え、ブロックヘッダには、その記憶ブロックにおけるデータ消去回数（リセット回数）を表す情報、その記憶ブロックが空きブロックであるか否かを表す空きブロック情報、その記憶ブロックが書込対象データの書込先ブロックであるか否かを表す書込先情報が格納される。各記憶ブロックのブロックヘッダには、これらの情報に加えて、その記憶ブロックが低頻度ブロック及び高頻度ブロックのいずれであるかを表すグループ情報を格納することも可能である。その他、電子制御装置１が仮に、フラッシュＲＯＭ１３とは別のデータ書換可能な不揮発性メモリを備える場合には、そのメモリに上記グループ情報を書き込むことも可能である。
【００４９】
ちなみに、フラッシュＲＯＭ１３が備える各記憶ブロックのブロックヘッダ以外の領域には、各データがデータヘッダと対でＭＰＵ１１の処理動作により書き込まれる。データヘッダは、対となるデータの種類を表す上記ＩＤコードと、このデータの格納先を表すデータポインタと、を備える。上記ブロックヘッダは、記憶ブロックの先頭に設けられるが、データヘッダは、ブロックヘッダに続いて記憶ブロックの先頭側から末尾側へと順に格納される。一方、データヘッダと対となって書き込まれる上記データは、記憶ブロックの末尾側から先頭側へと順に格納される。
【００５０】
尚、本実施例において、上記グループ情報がフラッシュＲＯＭ１３に格納されるのは、低頻度ブロック及び高頻度ブロックのグループ分けが適宜変更されるためである。本実施例では、図９に示すように、低頻度ブロック群の領域（図９斜線部分）、及び、高頻度ブロック群の領域（図９斜線のない部分）を、図２に示す状態から、各記憶ブロックのデータ消去回数（リセット回数）に基づき、フラッシュＲＯＭ１３において循環するようにシフトさせる。このようにして、本実施例では、低頻度ブロック及び高頻度ブロックを入れ替えて、記憶ブロック群を再グループ化する。このため、上記グループ情報については、更新可能なようにフラッシュＲＯＭ１３に書き込まれる。本実施例によれば、グループ分けが変更されることから、上記グループ情報については、その最新値を記憶保持できるように管理する必要がある。しかしながら、このような管理ができれば、上述したように、グループ情報は、必ずしもフラッシュＲＯＭ１３に書き込まれる必要はない。以下では、フラッシュＲＯＭ１３に上記グループ情報を記憶保持する例を説明するが、本発明は、このような構成に限定されないことを、念のため、ここで言及しておく。
【００５１】
続いて、上述したＳ２００で実行される低頻度データ書込処理の詳細について、図５を用いて説明する。低頻度データ書込処理を開始すると、ＭＰＵ１１は、フラッシュＲＯＭ１３内の上記グループ情報を参照して、低頻度ブロックに該当する記憶ブロックを特定すると共に、各記憶ブロックのブロックヘッダに記憶された書込先情報を参照し、低頻度ブロック群の内、書込先ブロックに設定されている記憶ブロックを特定する（Ｓ２１０）。尚、書込先ブロックは、低頻度ブロック群及び高頻度ブロック群の夫々に対して一つ設定されるものであり、書込対象データが生じたときに、その書込対象データを書き込むべき記憶ブロックに該当するものである。
【００５２】
以下では、図２に示すように、フラッシュＲＯＭ１３が備える記憶ブロックを、先頭から順に第０記憶ブロック、第１記憶ブロック、…、第７記憶ブロックと表現し、第ｍ（ｍ＝０，１，…７）ブロックに対して記号Ｂ［ｍ］を割り当てる。また、これとは独立して、フラッシュＲＯＭ１３が備える記憶ブロックの内の低頻度ブロックを、先頭から順に第０低頻度ブロック、第１低頻度ブロックと表現し、第ｖ（ｖ＝０，１）低頻度ブロックに対して記号ＬＢ［ｖ］を割り当てる。また、これとは独立して、フラッシュＲＯＭ１３が備える記憶ブロックの内の高頻度ブロックを、先頭から順に第０高頻度ブロック、第１高頻度ブロック、…、第５高頻度ブロックと表現し、第ｗ（ｗ＝０，１，…５）高頻度ブロックに対して記号ＨＢ［ｗ］を割り当てる。
【００５３】
Ｓ２１０において特定された低頻度ブロック群の書込先ブロックが、第ｖ１低頻度ブロックＬＢ［ｖ１］であり、低頻度ブロックの先頭が第ｍ０記憶ブロックＢ［ｍ０］である場合、低頻度ブロックＬＢ［ｖ１］は、第ｍｏｄ（ｍ０＋ｖ１，８）記憶ブロックＢ［ｍｏｄ（ｍ０＋ｖ１，８）］に一致する。但し、関数ｍｏｄ（α，β）は、値αを値βで割ったときの余りを示す。本実施例では、上述したように、低頻度ブロック群の領域及び高頻度ブロック群の領域の夫々を、ひとまとまりの状態でフラッシュＲＯＭ１３内を循環させるようにシフトさせる。このため、低頻度ブロックと、記憶ブロックとの間には、上述のような関係が成立する。
【００５４】
Ｓ２１０で、低頻度ブロック群の書込先ブロックＬＢ［ｖ１］を特定すると、ＭＰＵ１１は、Ｓ２２０に移行し、この書込先ブロックＬＢ［ｖ１］に、空き領域が存在するか否かを判断する。そして、空き領域が存在すると判断すると（Ｓ２２０でＹｅｓ）、書込対象データを、この書込先ブロックＬＢ［ｖ１］の空き領域に、上述した規則でデータヘッダと共に書き込む（Ｓ２３０）。その後、当該低頻度データ書込処理を終了する。
【００５５】
一方、書込先ブロックＬＢ［ｖ１］に空き領域がなく、書込対象データを書込先ブロックＬＢ［ｖ１］に書き込むことができないと判断すると（Ｓ２２０でＮｏ）、ＭＰＵ１１は、Ｓ２４０に移行し、書込対象データを、低頻度ブロック群において、書込先ブロックＬＢ［ｖ１］の次ブロックに該当する第ｍｏｄ（ｖ１＋１，２）低頻度ブロックＬＢ［ｍｏｄ（ｖ１＋１，２）］に書き込む。即ち、書込先ブロックＬＢ［ｖ１］が第０低頻度ブロックである場合には、次ブロックである第１低頻度ブロックに書き込み、書込先ブロックＬＢ［ｖ１］が第１低頻度ブロックである場合には、次ブロックである第０低頻度ブロックに書き込む。
【００５６】
但し、本実施例では、設計上、第１低頻度ブロックが一杯となる前に、上述した低頻度ブロック群及び高頻度ブロック群の入れ替えが行われて、低頻度ブロック群のデータ消去が行われるため（詳細後述）、第１低頻度ブロックに空き領域がないという事態は通常発生しない。
【００５７】
このため、第１低頻度ブロックに空き領域がないことが原因で書込対象データを第０低頻度ブロックに書き込む必要が生じることは通常ないが、仮に、そのような事態が生じた場合には、第０低頻度ブロック内のデータの内、フラッシュＲＯＭ１３で継続して記憶保持すべきデータをＲＡＭ１１ｂに一旦退避させた後、第０低頻度ブロック内のデータをブロック単位で消去し、その後、ＲＡＭ１１ｂに退避させたデータを、第０低頻度ブロックに書き込みつつ、上記書込対象データを第０低頻度ブロックに書き込む。このような動作により、低頻度ブロックでの記憶保持が不要となったデータを破棄して空き領域を確保し、その空き領域に、上記書込対象データを書き込む。
【００５８】
更に付言すると、本実施例では、低頻度ブロックで記憶保持すべきデータの量が、低頻度ブロック群の全記憶容量を超えないものとする。即ち、不要データの削除によっても、低頻度ブロック群の空き領域を確保することができず、新規の書込対象データを、低頻度ブロック群に書き込むことができない事態は、本実施例において想定されていない。尚、本実施例の電子制御装置１は、低頻度ブロック群の内、一つの低頻度ブロックを空きブロックとして確保することができるように、設計されている。このような設計によれば、不要データを削除することで、低頻度ブロックに該当する記憶ブロックの一つを必ず空きブロックとすることが可能である。
【００５９】
Ｓ２４０での処理を終えると、ＭＰＵ１１は、今回書込対象データを書き込んだ低頻度ブロックＬＢ［ｍｏｄ（ｖ１＋１，２）］を、次回書込対象データが生じた場合の書込先ブロックに設定し、この設定情報を、書込先情報として低頻度ブロックＬＢ［ｍｏｄ（ｖ１＋１，２）］のブロックヘッダに書き込んで（Ｓ２５０）、当該低頻度データ書込処理を終了する。
【００６０】
但し、上述したようにブロックヘッダについても、ブロック単位でのデータ消去を行わなければ、データの上書きをすることはできない。このため、書込先情報についても、追記の形式でブロックヘッダに書き込む。例えば、各記憶ブロックにおける書込先情報の領域については、この記憶ブロックが書込先ブロックに選択されるまでリセット時の状態（データ消去時の状態）に維持する。そして、書込先ブロックに選択された場合には、その記憶ブロックにおける書込先情報の領域に、この記憶ブロックが書込先ブロックであることを示す情報を上記書込先情報として書き込む。更に付言すれば、最新の書込先ブロックを書込先情報から特定できるように、上記書込先情報には、例えば、この情報の書込時刻や、書込先ブロックの設定毎にカウントアップされるシーケンシャルな番号を記述する。このような手順で上記書込先情報を書き込めば、最新の書込先ブロックを上記書込先情報から特定することが可能である。
【００６１】
続いて、上述したＳ３００で実行される高頻度データ書込処理の詳細について、図６を用いて説明する。高頻度データ書込処理を開始すると、ＭＰＵ１１は、まず、フラッシュＲＯＭ１３内のグループ情報を参照し、高頻度ブロックに該当する記憶ブロックを特定すると共に、各記憶ブロックのブロックヘッダに記憶された書込先情報を参照し、高頻度ブロック群の内、書込先ブロックに設定されている記憶ブロックを特定する（Ｓ３１０）。ここでは、特定された高頻度ブロックの書込先ブロックを、第ｗ１高頻度ブロックＨＢ［ｗ１］と表現する。本実施例によれば、フラッシュＲＯＭ１３において、低頻度ブロック群に続く記憶ブロック群が高頻度ブロック群に設定されるため、低頻度ブロック群の先頭ブロックが第ｍ０記憶ブロックＢ［ｍ０］である場合、高頻度ブロック群の先頭ブロックは、第ｍｏｄ（ｍ０＋２，８）記憶ブロックＢ［ｍｏｄ（ｍ０＋２，８）］になる。従って、高頻度ブロックＨＢ［ｗ１］は、第ｍｏｄ（ｍ０＋２＋ｗ１，８）記憶ブロックＢ［ｍｏｄ（ｍ０＋２＋ｗ１，８）］に一致する。
【００６２】
Ｓ２１０で、高頻度ブロックの書込先ブロックＨＢ［ｗ１］を特定すると、ＭＰＵ１１は、Ｓ３２０に移行し、書込先ブロックＨＢ［ｗ１］に、書込対象データを格納可能な空き領域が存在するか否かを判断し、空き領域が存在すると判断すると（Ｓ３２０でＹｅｓ）、この書込先ブロックＨＢ［ｗ１］に、書込対象データを、上述した規則でデータヘッダと共に書き込む（Ｓ３３０）。その後、当該高頻度データ書込処理を終了する。
【００６３】
一方、書込先ブロックＨＢ［ｗ１］に、書込対象データを格納可能な空き領域がなく、書込対象データをＨＢ［ｗ１］に書き込むことができないと判断すると（Ｓ３２０でＮｏ）、ＭＰＵ１１は、Ｓ３４０に移行し、書込対象データを、高頻度ブロック群において、書込先ブロックＨＢ［ｗ１］の次ブロックに該当する第ｍｏｄ（ｗ１＋１，６）高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋１，６）］に書き込む。
【００６４】
即ち、書込先ブロックが第０高頻度ブロックである場合には、第１高頻度ブロックに書込対象データを書き込み、書込対象データが第１高頻度ブロックである場合には、第２高頻度ブロックに書込対象データを書き込み、書込先ブロックが第５高頻度ブロックである場合には、第０高頻度ブロックに書込対象データを書き込む。
【００６５】
更に、ＭＰＵ１１は、３つの高頻度ブロックを空きブロックとして保持するために、高頻度ブロック群において、書込対象データを書き込んだ高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋１，６）］よりも３つ先の高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］内のデータをブロック単位で消去し、高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］を空きブロックに設定する（Ｓ３５０）。
【００６６】
即ち、今回書込対象データを書き込んだ記憶ブロックが第０高頻度ブロックである場合には、第３高頻度ブロックのデータを消去し、今回書込対象データを書き込んだ記憶ブロックが第１高頻度ブロックである場合には、第４高頻度ブロックのデータを消去し、今回書込対象データを書き込んだ記憶ブロックが第３高頻度ブロックである場合には、第０高頻度ブロックのデータを消去する。
【００６７】
但し、消去に先駆けては、消去対象の高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］で記憶中のデータの内、フラッシュＲＯＭ１３にて継続して記憶保持すべきデータを、一旦ＲＡＭ１１ｂに退避させる。そして、このＲＡＭ１１ｂに退避させたデータを、上記規則に従ってデータヘッダと共に、書込対象データと同じ高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋１，６）］に書き込む。その後、消去対象の高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］内のデータをブロック単位で消去することで、高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］を空きブロックに設定する（Ｓ３５０）。
【００６８】
図７には、このようなデータ消去の流れを（ａ）〜（ｆ）の順に時系列で示す。（ａ）は、フラッシュＲＯＭ１３の全記憶ブロックがデータ消去された状態（初期状態）において、書込頻度の高い種類の書込対象データ（ＩＤコード＝＊＊＊１）が生じ、Ｓ３３０の処理によって、これが第０高頻度ブロックに書き込まれたときの第０〜第３高頻度ブロックの状態を示す図である。この時の第１〜第５高頻度ブロックは、空きブロックの状態にある。一方、（ｂ）は、（ａ）に示す状態から、新たに書込頻度の高い種類の書込対象データ（ＩＤコード＝＊＊＊２）が生じ、Ｓ３３０の処理によって、第０高頻度ブロックに、このＩＤコード＝＊＊＊＊２の書込対象データが書き込まれたときの第０〜第３高頻度ブロックの状態を示す図である。
【００６９】
また、（ｃ）は、（ａ）で書き込まれたＩＤコード＝＊＊＊１に対応する最新データ（例えば学習データの最新値）が、新たに書込対象データとして生じ、Ｓ３３０の処理によって、これが第０高頻度ブロックに追記されたときの第０〜第３高頻度ブロックの状態を示す図である。この図からも理解できるように、追記によって、高頻度ブロックには、ＩＤコード＝＊＊＊１に対応するデータとして最新データと旧データとが混在した状態にされる。このようにしてＩＤコード＝＊＊＊１に対応する最新データがフラッシュＲＯＭ１３に書き込まれると、ＩＤコード＝＊＊＊１に対応する旧データは、フラッシュＲＯＭ１３において記憶保持が不要となった破棄可能なデータとして扱われる。
【００７０】
また、（ｄ）は、（ｃ）に示す状態から書込対象データの第０高頻度ブロックへの書込が繰返し行われて、第０高頻度ブロックに空き領域がなくなり、新たな書込対象データ（ＩＤコード＝＊＊＊１）が、Ｓ３４０の処理によって、第０高頻度ブロックに続く第１高頻度ブロックに書き込まれたときの第０〜第３高頻度ブロックの状態を示す図である。この時点において、フラッシュＲＯＭ１３には、ＩＤコード＝＊＊＊１のデータが複数記憶されていることになるが、最新データ以外の旧データは、破棄可能な不要なデータとして扱われる。尚、Ｓ３４０の処理後には、通常、Ｓ３５０の処理が行われるが、（ｄ）に示す時点では、第４高頻度ブロックが空きブロックの状態であるので、このケースでは、例外的にＳ３５０の処理がスキップされて、後続の処理が実行される。即ち、本実施例では、消去対象の記憶ブロックが空きブロックである場合、この記憶ブロックに対するデータ消去動作を行わないものとする。
【００７１】
また、（ｅ）は、（ｄ）に示す状態から書込対象データの高頻度ブロック群への書込が繰返し行われて、第２高頻度ブロックに空き領域がなくなり、新たな書込対象データ（ＩＤコード＝＊＊＊３）が、Ｓ３４０の処理によって、第３高頻度ブロックに書き込まれたときの第０〜第３高頻度ブロックの状態を示す図である。この状態では、Ｓ３４０の処理後、Ｓ３５０の処理が行われることで、第０高頻度ブロック内のデータが消去されるが、それに先駆けては、消去対象の高頻度ブロックが記憶するデータの内、フラッシュＲＯＭ１３内で継続して記憶保持すべきデータ（最新データが消去対象の高頻度ブロックにおいて記憶されるＩＤコード＝＊＊＊＊２のデータ）が、書込対象データと同じ第３高頻度ブロックに書き込まれる。
【００７２】
その後、第０高頻度ブロック内のデータは、（ｆ）に示すように消去されて、第０高頻度ブロックは、空きブロックに設定される。（ｆ）は、第０高頻度ブロック内のデータが消去されたときの第０〜第３高頻度ブロックの状態を示す図である。
【００７３】
Ｓ３５０での処理を終えると、ＭＰＵ１１は、Ｓ３６０に移行し、データ消去を行った記憶ブロック（高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］）のデータ消去回数を、該当記憶ブロックのブロックヘッダに書き込む。尚、データ消去回数の情報については、該当記憶ブロックのデータ消去前に、そのブロックヘッダからＲＡＭ１１ｂに読み出し、該当記憶ブロックのデータ消去後に、読み出したデータ消去回数に１加算した値をブロックヘッダに書き込むことにより、これまでのデータ消去回数の累積をブロックヘッダに書き込む。
【００７４】
また、この処理を終えると、ＭＰＵ１１は、Ｓ３７０に移行し、今回書込対象データを書き込んだ高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋１，６）］を、次回書込対象データが生じた場合の書込先ブロックに設定し、この設定情報を、Ｓ２５０と同様の手法で、高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋１，６）］のブロックヘッダに書き込む（Ｓ３７０）。その後、Ｓ３８０に移行する。
【００７５】
Ｓ３８０に移行すると、ＭＰＵ１１は、今回消去対象となった記憶ブロック（高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］）が、第０高頻度ブロックＨＢ［０］であるか否かを判断する。そして、第０高頻度ブロックＨＢ［０］でないと判断すると（Ｓ３８０でＮｏ）、当該高頻度データ書込処理を終了する。一方、今回消去対象となった記憶ブロック（高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］）が、第０高頻度ブロックＨＢ［０］であると判断すると、Ｓ３９０に移行する。
【００７６】
また、Ｓ３９０では、今回消去対象となった記憶ブロック（高頻度ブロックＨＢ［ｍｏｄ（ｗ１＋４，６）］）のデータ消去回数が、１００＊Ｃ回以上であるか否かを判断する。尚、変数Ｃの値については、上記グループ情報と同様、フラッシュＲＯＭ１３（低頻度ブロックやブロックヘッダ等）に記憶保持することができ、初期値は「１」である。
【００７７】
そして、今回消去対象となった記憶ブロックのデータ消去回数が、１００＊Ｃ回未満であると判断すると（Ｓ３９０でＮｏ）、当該高頻度データ書込処理を終了し、データ消去回数が、１００＊Ｃ回以上であると判断すると（Ｓ３９０でＹｅｓ）、Ｓ４００に移行する。
【００７８】
Ｓ４００に移行すると、ＭＰＵ１１は、Ｓ４００を含むその後の処理（具体的にはＳ４００〜Ｓ４４０の処理）によって、低頻度ブロック群の領域を、フラッシュＲＯＭ１３において記憶ブロック一つ分末尾側にシフトさせる。これによって、高頻度ブロック群及び低頻度ブロック群を再グループ化する。
【００７９】
再グループ化に際しては低頻度ブロック群内のデータを消去するため、まずＳ４００では、フラッシュＲＯＭ１３における低頻度ブロック群内のデータであって、現在以降も継続してフラッシュＲＯＭ１３で記憶保持が必要なデータを、ＲＡＭ１１ｂに退避させる。即ち、低頻度ブロック群に記憶される各ＩＤコードに対応するデータ群の内の最新データを、記憶保持が必要なデータとして、ＲＡＭ１１ｂに退避させる。
【００８０】
図８（ａ）には、高頻度ブロックＨＢ［０］に対応する第２記憶ブロックＢ［２］のデータ消去回数が１００回となったときの再グループ化の態様を示す。図８（ａ）に示す例では、第０記憶ブロックＢ［０］及び第１記憶ブロックＢ［１］が夫々順に低頻度ブロックＬＢ［０］，ＬＢ［１］であるため、第０記憶ブロックＢ［０］及び第１記憶ブロックＢ［１］に記憶されているデータの内、現在以降も継続してフラッシュＲＯＭ１３での記憶保持が必要なデータを、ＲＡＭ１１ｂに退避させる。この際、ブロックヘッダにおいて記憶されるデータ消去回数の情報もＲＡＭ１１ｂに退避させる。
【００８１】
その後、ＭＰＵ１１は、Ｓ４１０に移行し、各低頻度ブロックＬＢ［０］，ＬＢ［１］内のデータをブロック単位で消去し（Ｓ４１０）、そのデータ消去が行われた各記憶ブロックの上記ＲＡＭ１１ｂに退避されたデータ消去回数を、データ消去前の値から１加算した値に更新して、この更新後のデータ消去回数の情報を、対応する記憶ブロックのブロックヘッダに書き込む（Ｓ４２０）。図８（ａ）に示す例によれば、第０記憶ブロックＢ［０］及び第１記憶ブロックＢ［１］内のデータを消去し、これら各記憶ブロックＢ［０］，Ｂ［１］のブロックヘッダにおけるデータ消去回数の情報を更新する。
【００８２】
その後、ＭＰＵ１１は、低頻度ブロックＬＢ［０］，ＬＢ［１］の領域をフラッシュＲＯＭ１３において記憶ブロック一つ分末尾側にシフトさせるようにして、低頻度ブロック群及び高頻度ブロック群を再グループ化する（Ｓ４３０）。即ち、現在の低頻度ブロックＬＢ［０］，ＬＢ［１］が記憶ブロックＢ［ｍ０］，Ｂ［ｍ０＋１］に対応する場合には、新たな低頻度ブロックＬＢ［０］，ＬＢ［１］として、記憶ブロックＢ［ｍｏｄ（ｍ０＋１，８）］，Ｂ［ｍｏｄ（ｍ０＋２，８）］を設定する。また、新たな高頻度ブロックＨＢ［０］，ＨＢ［１］，…，ＨＢ［５］として、記憶ブロックＢ［ｍｏｄ（ｍ０＋３，８）］，Ｂ［ｍｏｄ（ｍ０＋４，８）］，…，Ｂ［ｍｏｄ（ｍ０＋８，８）］を設定する。図８（ａ）に示す例によれば、新たな低頻度ブロックＬＢ［０］，ＬＢ［１］として順に、第１記憶ブロックＢ［１］及び第２記憶ブロックＢ［２］を設定し、新たな高頻度ブロックＨＢ［０］，ＨＢ［１］，ＨＢ［２］，ＨＢ［３］，ＨＢ［４］，ＨＢ［５］として、記憶ブロックＢ［３］，Ｂ［４］，Ｂ［５］，Ｂ［６］，Ｂ［７］，Ｂ［０］を設定する。
【００８３】
尚、この設定動作は、例えば、フラッシュＲＯＭ１３における新たな低頻度ブロック群の先頭ブロックＬＢ［０］＝Ｂ［ｍｏｄ（ｍ０＋１，８）］に、この新たな低頻度ブロック群及び高頻度ブロック群の設定内容を表す上記グループ情報を書き込むことにより、実現することができる。
【００８４】
また、このような設定動作に伴って、ＭＰＵ１１は、新たな低頻度ブロック群の先頭ブロックを書込先ブロックに設定して、該当する記憶ブロックのブロックヘッダに、この設定情報を上記書込先情報として書き込む。
【００８５】
その後、ＭＰＵ１１は、新たな低頻度ブロック群の先頭ブロックＬＢ［１］に、上記ＲＡＭ１１ｂに退避させた「現在以降も継続してフラッシュＲＯＭ１３での記憶保持が必要なデータ」を書き込んで、これらのデータを低頻度ブロックに復帰させる（Ｓ４４０）。即ち、図８（ａ）に示す例によれば、第１記憶ブロックＢ［１］に対して退避データを書き込む。
【００８６】
Ｓ４４０の処理後、ＭＰＵ１１は、変数Ｃの値を更新し、更新後の変数Ｃの値を、フラッシュＲＯＭ１３（低頻度ブロック）に書き込む（Ｓ４５０）。具体的には、変数Ｃの現在値に値δを加算し、この加算後の変数Ｃの値を、フラッシュＲＯＭ１３（低頻度ブロック）に書き込む。ここで、値δとしては次の値を用いる。即ち、再グループ化後の低頻度ブロック群の先頭ブロックが第ｍ０記憶ブロックＢ［ｍ０］であるものとすると、ｍｏｄ（ｍ０，８）が値６又は値７である場合には、値δ＝０を用いて、変数Ｃの値を更新し、ｍｏｄ（ｍ０，８）が値６及び値７のいずれでもない場合には、値δ＝１を用いて、変数Ｃの値を更新する。
【００８７】
変数Ｃの値については、Ｓ４１０における低頻度ブロック群のデータ消去前に、予めＳ４００で低頻度ブロックから読み出して、ＲＡＭ１１ｂに退避させておく。そして、変数Ｃの値について、Ｓ４４０の処理とは別に、Ｓ４５０の処理で、上述したように更新した後、フラッシュＲＯＭ１３に書き込む。尚、Ｓ４４０の処理及びＳ４５０の処理については、その実行順序を逆にされてもよい。
【００８８】
ＭＰＵ１１は、このようにしてＳ４５０での処理を終えると、当該高頻度データ書込処理を終了する。
以上に高頻度データ書込処理の内容について説明したが、この処理に従う再グループ化の具体例について、図８（ａ）（ｂ）及び図９を用いて説明する。
【００８９】
本実施例においては、図８（ａ）の処理により低頻度ブロック群及び高頻度ブロック群の再グループ化が行われると、変数Ｃは、値１から値２に更新される。このため、その後には、第０高頻度ブロック（第３記憶ブロックＢ［３］）のデータ消去回数が２００回となるまで、低頻度ブロック群及び高頻度ブロック群の再グループ化は行われない。
【００９０】
そして、図８（ｂ）に示すように、第０高頻度ブロックＨＢ［０］（第３記憶ブロックＢ［３］）のデータ消去回数が２００回となると、２回目の再グループ化の条件が満足されて、低頻度ブロックである第１記憶ブロックＢ［１］及び第２記憶ブロックＢ［２］に記憶されたデータの退避動作（Ｓ４００）、並びに、第１記憶ブロックＢ［１］及び第２記憶ブロックＢ［２］のデータ消去動作及びデータ消去回数の更新動作（Ｓ４１０，Ｓ４２０）が行われる。更に、低頻度ブロック群及び高頻度ブロック群の再グループ化動作及び退避データの低頻度ブロック群の先頭ブロックへの書込動作（Ｓ４３０，Ｓ４４０）が実行される。これにより、低頻度ブロックは、第１記憶ブロックＢ［１］及び第２記憶ブロックＢ［２］から第２記憶ブロックＢ［２］及び第２記憶ブロックＢ［３］に変更される（図８（ｂ）斜線部分）。また、このとき、変数Ｃは、値２から値３に更新される。
【００９１】
このような変数Ｃの更新によって、図９に示すように、３回目の再グループ化は、第０高頻度ブロックＨＢ［０］である第４記憶ブロックＢ［４］のデータ消去回数が３００回となると実行され、低頻度ブロックは、第２記憶ブロックＢ［２］及び第３記憶ブロックＢ［３］から第３記憶ブロックＢ［３］及び第４記憶ブロックＢ［４］に変更される。また、変数Ｃは、値３から値４に更新される。尚、図９においては、低頻度ブロック群及び高頻度ブロック群の設定（再グループ化）直後の低頻度ブロック群を斜線で示す。
【００９２】
同様にして、４回目の再グループ化は、第０高頻度ブロックＨＢ［０］である第５記憶ブロックＢ［５］）のデータ消去回数が４００回となると実行され、低頻度ブロックは、第３記憶ブロックＢ［３］及び第４記憶ブロックＢ［４］から第４記憶ブロックＢ［４］及び第５記憶ブロックＢ［５］に変更される。また、変数Ｃは、値４から値５に更新される。
【００９３】
また、５回目の再グループ化は、第６記憶ブロックＢ［６］のデータ消去回数が５００回となると実行され、低頻度ブロックは、第４記憶ブロックＢ［４］及び第５記憶ブロックＢ［５］から第５記憶ブロックＢ［５］及び第６記憶ブロックＢ［６］に変更される。また、変数Ｃは、値５から値６に更新される。
【００９４】
また、６回目の再グループ化は、第７記憶ブロックＢ［７］のデータ消去回数が６００回となると実行され、低頻度ブロックは、第５記憶ブロックＢ［５］及び第６記憶ブロックＢ［６］から第６記憶ブロックＢ［６］及び第７記憶ブロックＢ［７］に変更される。
【００９５】
但し、６回目の再グループ化については、その再グループ化後の低頻度ブロックの先頭ブロックが、第ｍ０＝６記憶ブロックであるため、上述したようにδ＝０が用いられて、変数Ｃは、値６に維持される。このような変数Ｃの値設定は、記憶ブロック群全体でのデータ消去回数のばらつきを抑える目的で行われる。
【００９６】
このようにして、変数Ｃが値６に維持されるため、７回目の再グループ化は、第０高頻度ブロックＨＢ［０］である第０記憶ブロックＢ［０］のデータ消去回数が６００回となると実行され、低頻度ブロックは、第６記憶ブロックＢ［６］及び第７記憶ブロックＢ［７］から第７記憶ブロックＢ［７］及び第０記憶ブロックＢ［０］に変更される。また、７回目の再グループ化については、その再グループ化後の低頻度ブロックの先頭ブロックが、第ｍ０＝７記憶ブロックであるため、上述したようにδ＝０が用いられて、変数Ｃは、値６に維持される。
【００９７】
また、８回目の再グループ化は、第０高頻度ブロックＨＢ［０］である第１記憶ブロックＢ［１］のデータ消去回数が６００回となると実行され、低頻度ブロックは、第７記憶ブロックＢ［７］及び第０記憶ブロックＢ［０］から第０記憶ブロックＢ［０］及び第１記憶ブロックＢ［１］に変更される。８回目の再グループ化については、その再グループ化後の低頻度ブロックの先頭ブロックが、第ｍ０＝０記憶ブロックであるため、上述したようにδ＝１が用いられて、変数Ｃは、値７に更新される。
【００９８】
このように変数Ｃを更新すると、各記憶ブロックのデータ消去回数は、図９に示すように概ね均一となる。よって、本実施例にように低頻度ブロック群及び高頻度ブロック群をデータ消去回数に応じて適宜入れ替えてフラッシュＲＯＭ１３を管理すると、各記憶ブロックのデータ消去回数のばらつきを適切に抑えることができて、フラッシュＲＯＭ１３の長寿命化を図ることができる。
【００９９】
最後に、本実施例においてアプリケーションプログラム（タスク）からの読出指示に従って、フラッシュＲＯＭ１３からデータを読み出す際の処理動作について、簡単に説明する。このような読出指示が入力されると、ＭＰＵ１１は、読出指示と共に通知された読出対象のデータ種類を表すＩＤコードの情報に基づき、読出対象データが低頻度ブロックで記憶されるデータであるか、それとも高頻度ブロックで記憶されるデータであるかを判断する。
【０１００】
そして、低頻度ブロックで記憶されるデータである場合には、低頻度ブロック群を参照して、データヘッダに記述されたＩＤコードの情報に基づき、読出対象データに対応するＩＤコードに対応付けられたデータを、低頻度ブロックから読み出す。この際には、当然のことながら読出対象データに対応するＩＤコードに対応付けられたデータ群の内、最新データに対応するデータを、低頻度ブロックから読み出して、これを読出指示元に渡す。
【０１０１】
一方、読出対象のデータが高頻度ブロックで記憶されるデータである場合には、高頻度ブロック群を参照して、データヘッダに記述されたＩＤコードの情報に基づき、読出対象データに対応するＩＤコードに対応付けられたデータを、高頻度ブロックから読み出す。この際には、当然のことながら読出対象データに対応するＩＤコードに対応付けられたデータ群の内、最新データに対応するデータを、高頻度ブロックから読み出して、これを読出指示元に渡す。
【０１０２】
以上、本発明の実施例について説明したが、用語間の対応関係については、次の通りである。即ち、ＭＰＵ１１が実行するＳ１００の処理は、判定手段によって実現される処理の一例に対応し、ＭＰＵ１１が実行するＳ４３０の処理は、グループ化手段によって実現される処理の一例に対応する。また、ＭＰＵ１１が実行するＳ２３０，Ｓ２４０，Ｓ３３０，Ｓ３４０の処理は、書込制御手段によって実現される処理の一例に対応する。その他、ＭＰＵ１１が実行するＳ３５０，４１０の処理は、消去手段によって実現される処理の一例に対応する。
【０１０３】
また、本発明は、上記実施例に限定されるものではなく、種々の態様を採ることができる。例えば、上記実施例では、書込頻度を高低の二段階で区分して、フラッシュＲＯＭ１３が記憶する記憶ブロック群を、低頻度ブロックのグループと、高頻度ブロックのグループとにグループ化するようにしたが、書込頻度については高中低などの三段階以上の区分数で区分して、フラッシュＲＯＭ１３が記憶する記憶ブロック群を、その区分数に対応した数のグループでグループ分けするようにしてもよい。例えば、書込頻度を高中低の三段階に区分する場合には、フラッシュＲＯＭ１３が記憶する記憶ブロック群を、低頻度ブロックのグループと、中頻度ブロックのグループと、高頻度ブロックのグループと、にグループ化することができる。
【０１０４】
グループを３つ以上とした場合であっても、上記実施例のように、これらのグループの領域をフラッシュＲＯＭ１３内で循環させるようにシフトして、記憶ブロック群の再グループ化を行えば、各記憶ブロックでのデータ消去回数のばらつきを抑えることができて、フラッシュＲＯＭ１３の長寿命化を図ることができる。
【０１０５】
尚、グループを３つ以上とする場合でも、書込頻度が最も高いグループに属する記憶ブロック群のデータ消去回数（例えば先頭ブロックのデータ消去回数）に注目して、このデータ消去回数に応じて、記憶ブロック群の再グループ化を行うことで、記憶ブロック間のデータ消去回数が大きく乖離しない適切な時期に再グループ化を行うことができて、フラッシュＲＯＭ１３の長寿命化を図ることができる。
【０１０６】
また、本実施例では、低頻度ブロック群及び高頻度ブロック群の領域を、再グループ化の度に、記憶ブロック一つ分ずつシフトことにより、記憶ブロックのグループ間の入れ替えを行い、各記憶ブロックが、適切な割合で低頻度ブロック及び高頻度ブロックに設定されるようにしたが、グループを３つ以上とする場合でも、これら各グループの領域を記憶ブロック一つ分ずつ移動させることにより、記憶ブロック群の再グループ化を行うことができる。このように再グループ化を行えば、各記憶ブロックが、適切な割合で各グループに設定されてグループ間を循環するように、再グループ化を行うことができ、データ消去回数のばらつきを適切に抑えることができる。
【０１０７】
また、本発明は、車両制御用の電子制御装置１に限定されるものではなく、その他の種々の電子機器に適用することができる。
【符号の説明】
【０１０８】
１…電子制御装置、３…制御対象、５…センサ類、１１…ＭＰＵ、１１ａ…ＲＯＭ、１１ｂ…ＲＡＭ、１３…フラッシュＲＯＭ、１５…入出力回路
【図１】
0005569469.tif 000002
【図３】
0005569469.tif 000003
【図４】
0005569469.tif 000004
【図５】
0005569469.tif 000005
【図６】
0005569469.tif 000006
【図７】
0005569469.tif 000007
【図２】
0005569469.tif 000008
【図８】
0005569469.tif 000009
【図９】
0005569469.tif 000010