以下、添付された図面を参照し、本発明を実施するための実施形態について詳述する。
[第1実施形態]
第1実施形態に係る自動車用電子制御装置について説明する。図1は、自動車用電子制御装置の適用例を示す。自動車用電子制御装置(以下、「ECU」という)10は、例えばマイクロコントローラであり、車両に搭載されたアクチュエータ20を制御するものである。車両に搭載されたアクチュエータ20は、変速機構、内燃機関の可変バルブタイミング機構、圧縮比可変機構、制動機構、操舵補助機構等、様々な車載機構の駆動源として用いられ得る。
ECU10は、イグニッションスイッチ30及び電源回路40を介して車載バッテリ50と接続され、イグニッションスイッチ30がオン状態であるときに、電源回路40により車載バッテリ50からの電力が調整されてECU10に電源電圧Vccが供給される。
また、ECU10は、外部制御可能な電源リレー60の制御端子と接続されている。電源リレー60は、車載バッテリ50と電源回路40との間を、イグニッションスイッチ30を迂回して接続している。ECU10が、電源リレー60に制御信号SRを出力することで電源リレー60がオン状態となり、イグニッションスイッチ30がオフ状態でも車載バッテリ50と電源回路40との間が電気的に接続され、ECU10へ電源電圧Vccが供給される。
さらに、ECU10は、イグニッションスイッチ30とECU10との間の電源供給線からイグニッションスイッチ30の下流における電圧VIGNが入力されて、これをA/D(Analog/Digital)変換等によって検出できるように構成されている。
ECU10は、CPU(Central Processing Unit)またはMPU(Micro Processing Unit)等のプロセッサ11を備えている。また、ECU10は、電気的に書換え可能であって電源遮断時にも記憶された情報を保持する不揮発性メモリとしてフラッシュメモリ12を備えている。さらに、ECU10は、例えばSRAM(Static Random Access Memory)またはDRAM(Dynamic Random Access Memory)等の揮発性メモリであるRAM13と、外部との間で信号の入出力を行う入出力インタフェース(I/F)14と、を備えている。ECU10において、プロセッサ11、フラッシュメモリ12、RAM13及び入出力インタフェース14は、通信バス15によって相互に通信可能に接続されている。
プロセッサ11は、フラッシュメモリ12に格納されたアプリケーションプログラムをRAM13に読み出して実行することで、各種処理を行うように構成されている。各種処理としては、アクチュエータ20の制御処理、OBD(On Board Diagnosis)による故障診断処理、バックアップ処理等がある。
バックアップ処理は、RAM13に一時的に記憶されている各種データをバックアップデータとしてフラッシュメモリ12へ書き込んで格納する処理である。バックアップデータとしては、イグニッションスイッチ30のオン期間や積算距離等の車両情報に加え、アクチュエータ20の制御処理により得られた学習値・補正値、故障診断処理により得られた診断情報等のデータがある。
バックアップ処理はセルフシャット期間中に行われる。セルフシャット期間は、イグニッションスイッチ30がオフ操作されてから、電源リレー60を介してECU10への電源供給が継続される期間である。セルフシャット期間は、プロセッサ11が入出力インタフェース14を介して検出した電圧VIGNに基づいてイグニッションスイッチ30のオフ操作を検知したときに、入出力インタフェース14を介して電源リレー60に制御信号SRを出力することで開始する。また、セルフシャット期間は、プロセッサ11が、バックアップ処理を終了したときに、入出力インタフェース14を介して電源リレー60に出力している制御信号SRを停止することで終了する。
図2は、フラッシュメモリ12の内部構造を模式的に示す。フラッシュメモリ12は、イレーズ(消去)単位であるブロックを複数備え、このブロックによって記憶領域が複数に区分されている。
図中では、説明の便宜上、フラッシュメモリ12は5つのブロックB1,B2,B3,B4,B5を備えているものとする。例えば、5つのブロックB1,B2,B3,B4,B5がそれぞれ5kB(5000バイト)の記憶領域を有しているものとし、1つのアドレスについて1バイトを識別できるものとする。したがって、ブロックB1の開始アドレスから終了アドレスまでが0〜4999番地となり、ブロックB2の開始アドレスから終了アドレスまでが5000〜9999番地となる。以降のブロックB3〜B5についても同様である。
ブロックB1〜B3は、バックアップ処理によってデータを書き込むために用いられる。ブロックB1,B2は、バックアップ処理の書き込みによりバックアップデータを格納するバックアップデータ格納領域である。ブロックB3は、バックアップ処理により変化するメモリ管理情報を格納する管理情報格納領域である。
ブロックB4〜B5は、リプログラミング等を除いてデータ等の書き込みがなされず、格納されたデータ等を専ら読み出すために用いられる。ブロックB4は、アクチュエータ20の制御処理やバックアップ処理等に必要な定数データを格納する定数データ格納領域である。ブロックB5は、アプリケーションプログラムを格納するアプリケーションプログラム格納領域である。アプリケーションプログラムは、アクチュエータ20の制御処理、OBDによる故障診断処理、バックアップ処理等を行うためのソフトウェアである。
図3は、バックアップデータの初期値が設定された初期値テーブルの一例を示す。初期値テーブルでは、バックアップデータの複数のデータ項目が、ECU10におけるデータ更新頻度の降順で順位付けされている(データ更新頻度が高い方が上位)。データ項目の順位(以下、データ項目順位という)は、後述のように、バックアップ処理においてバックアップデータを書き込む際のアドレス順を示す。データ更新頻度は、バックアップデータが前回のバックアップ処理でフラッシュメモリ12に書き込んだ値(前回値)あるいは初期値から変化する確率であり、経験的に推定され得る。各データ項目についての初期値は、車両の出荷前(すなわちバックアップ処理を初めて行う前)に予め設定され、それぞれフラッシュメモリ12の定数格納領域であるブロックB4の所定アドレスに格納されている。
図中の初期値テーブルでは、バックアップデータのデータ項目を、例えば、キーオン時間、積算距離、学習値1、学習値2、補正値1、補正値2、軽度異常1、軽度異常2、深刻異常1及び深刻異常2の10種類としている。そして、バックアップデータの10種類のデータ項目が、データ更新頻度の降順で順位付けされている。例えばイグニッションスイッチ30のオン状態の積算時間を示す「キーオン時間」は、前回値から毎回変化するので、「キーオン時間」のデータ項目順位は最も上位に設定されている。一方、例えば車両衝突数秒前からの主要走行状態を示す「深刻異常」は、その数値が変化するときには車両が衝突してECU10が交換されるので、「深刻異常」のデータ項目順位は最も下位に設定されている。そして、学習値1及び学習値2の初期値が「5」と設定される他、他のデータ項目の初期値については「0」に設定されるものとする。
なお、データ項目の中には、「1」及び「2」という数詞を除いて名称が共通のものがあるが、「2」よりも「1」が付されたデータ項目の方がデータ更新頻度の高いバックアップデータであることを示している。例えば、学習値1及び学習値2では、学習値1がデータ更新頻度の比較的高いデータを意味するのに対し、学習値2がデータ更新頻度の比較的低いデータを意味している。
次に、図4〜7を参照して、第1実施形態に係るバックアップ処理におけるバックアップデータの書き込み規則を説明する。図4〜7の各図における(a)は、バックアップデータの初期値に対する変化状態を示し、図4〜7の各図における(b)は、フラッシュメモリ12におけるバックアップデータの格納状態を示す。なお、説明の便宜上、各データ項目のバックアップデータ並びに後述のSUM値及び有効印は、それぞれ1バイトの情報量で表現されるものとし、フラッシュメモリ12の各アドレスに1つずつ格納されるものとする。以下、同様である。
図4は、第1回のバックアップ処理における書き込み態様の一例を示す。図4(a)に示すように、第1回のバックアップ処理の前に、プロセッサ11は、フラッシュメモリ12の初期値テーブルから各データ項目について初期値をRAM13に読み出す。そして、プロセッサ11は、イグニッションスイッチ30がオン状態のときに(例えばアクチュエータ20の制御処理等により)初期値から変化したデータ項目について変化後のデータに書き換える。このように、RAM13内において初期値から書き換えられたデータ項目のデータに加え、初期値から書き換えられなかったデータ項目のデータを含めて、一時格納データというものとする。図中の一時格納データでは、キーオン時間及び積算距離がそれぞれ初期値「0」から「1」に書き換えられて変化しているが、その他のデータ項目については初期値から変化していない。
プロセッサ11がフラッシュメモリ12に対して書き込むバックアップデータの書き込み対象は、一時格納データのうち、データ項目順位で1番目のデータ項目から、初期値を書き換えたデータ項目の中で最も下位のデータ項目までのバックアップデータである。なお、バックアップデータのうち書き込み対象となるデータ項目を書き込み対象データ項目というものとする。図示の例では、一時格納データのうち、データ項目順位で1番目及び2番目のデータ項目が初期値から変化しているので、1番目から2番目までのデータ項目のバックアップデータが書き込み対象となる。仮に初期値から変化しているのが1番目のデータ項目のみである場合には、当該データ項目のバックアップデータが書き込み対象となる。なお、いずれのデータ項目も初期値から変化していない場合には、書き込み対象のバックアップデータはなくなるので、メモリ資源節約の観点から、フラッシュメモリ12に対する書き込みを省略することが望ましい。
図4(b)に示すように、プロセッサ11は、書き込み対象のバックアップデータに対して、データ項目順位に従ってフラッシュメモリ12におけるアドレスを付与する。すなわち、キーオン時間のバックアップデータを格納するアドレスを0番地に設定し、積算距離のバックアップデータを格納するアドレスを1番地に設定する。また、プロセッサ11は、書き込み対象となるバックアップデータのアドレスに続けて、SUM値及び有効印の2つのデータにアドレスを付与する。すなわち、SUM値のデータを格納するアドレスを2番地に設定し、有効印のデータを格納するアドレスを3番地に設定する。SUM値は、書き込み対象となるバックアップデータから算出されたチェックサムであり、有効印は、例えば「A5A5h」等、対象データ列の終端を示す所定のコードである。
第1回のバックアップ処理において、プロセッサ11は、キーオン時間、積算距離、SUM値及び有効印の4つのデータをこの順番で、ブロックB1の0〜3番地にそれぞれ書き込んで格納する。このように、各回のバックアップ処理において、データ項目順位に従ってアドレスが設定された書き込み対象のバックアップデータとこれに続くアドレスが設定されたSUM値及び有効印のデータとを、対象データ列というものとする。
また、プロセッサ11は、書き込まれる対象データ列の終端アドレスをフラッシュメモリ12のブロックB1,B2における格納データの最終アドレスとして、管理情報格納領域であるブロックB3の所定アドレスに書き込んで格納する。最終アドレスは、例えば対象データ列のサイズと前回のバックアップ処理によりブロックB3に格納された最終アドレスとに基づいて特定可能である。図4(b)では、第1回のバックアップ処理であるので、前回の最終アドレスを(−1)番地として、これに対象データ列のサイズ(4バイト)を加えることで、現在の最終アドレスすなわち有効印のアドレス(3番地)を特定できる。以下の書き込み態様において同様である。
図5は、第2回のバックアップ処理における書き込み態様の一例を示す。図5(a)に示すように、RAM13の一時格納データでは、キーオン時間が初期値「0」から「2」に変化し、積算距離が初期値「0」から「4」に変化している。その他のデータ項目については初期値から変化していない。したがって、図示の例では、一時格納データのうち、データ項目順位で1番目から2番目までのデータ項目のバックアップデータが書き込み対象となる。
また、図5(b)に示すように、第1回のバックアップ処理で書き込まれた対象データ列(網掛け部参照、以下同様)の終端アドレス(3番地)が最終アドレスであり、この最終アドレスは上記のようにブロックB3に格納されている。したがって、第2回のバックアップ処理では、プロセッサ11は、ブロックB3から読み出した最終アドレスの次のアドレス(4番地)を書き込み先頭アドレスとして、対象データ列をブロックB1の4〜7番地に書き込んで格納する。
図6は、第3回のバックアップ処理における書き込み態様の一例を示す。図6(a)に示すように、RAM13の一時格納データでは、キーオン時間が初期値「0」から「9」に変化し、積算距離が初期値「0」から「11」に変化し、学習値2が初期値「5」から「6」に変化している。その他のデータ項目については初期値から変化していない。したがって、図示の例では、一時格納データのうち、データ項目順位で1番目から4番目までのデータ項目のバックアップデータが書き込み対象となる。なお、データ項目順位で3番目の学習値1のバックアップデータは初期値から変化していないが、書き込み対象に含まれる。対象データ列におけるバックアップデータのアドレス順がデータ項目順位を示しているので、仮に、学習値1のバックアップデータが書き込まれないと、プロセッサ11が、学習値1のバックアップデータを省略している旨のメモリ管理情報が必要となる。このため、プロセッサ11がバックアップデータを読み出す際の制御が複雑化するおそれがある。これを考慮して、初期値から変化していない学習値1についても書き込み対象としている。
また、図6(b)に示すように、第2回のバックアップ処理で書き込まれた対象データ列の終端アドレス(7番地)が最終アドレスであり、この最終アドレスは上記のようにブロックB3に格納されている。したがって、第3回のバックアップ処理では、プロセッサ11は、ブロックB3から読み出した最終アドレスの次のアドレス(8番地)を書き込み先頭アドレスとして、対象データ列をブロックB1の8〜13番地に書き込んで格納する。
図7は、第4回のバックアップ処理における書き込み態様の一例を示す。図7(a)に示すように、RAM13の一時格納データでは、キーオン時間が初期値「0」から「10」に変化し、積算距離が初期値「0」から「11」に変化している。その他のデータ項目については初期値テーブルの初期値から変化していない。しかし、第4回のバックアップ処理では、データ項目順位で1番目から2番目までの2つのデータ項目ではなく、1番目から4番目までの4つのデータ項目のバックアップデータが書き込み対象となる。仮に、書き込み対象のバックアップデータを1番目及び2番目の2つのデータ項目とすると、第3回のバックアップ処理で4番目のデータ項目に初期値からの変化が発生したことを最新の対象データ列から認識することが困難となる。このため、図示の例では、書き込み対象のバックアップデータを、1番目から4番目までの4つのデータ項目としている。
また、図7(b)に示すように、第3回のバックアップ処理で書き込まれた対象データ列の終端アドレス(13番地)が最終アドレスであり、この最終アドレスは上記のようにブロックB3に格納されている。したがって、第4回のバックアップ処理では、プロセッサ11は、ブロックB3から読み出した最終アドレスの次のアドレス(14番地)を書き込み先頭アドレスとして、対象データ列をブロックB1の14〜19番地に書き込んで格納する。
図示を省略するが、プロセッサ11は、最終アドレスを含むブロックに対象データ列を書き込める記憶領域(空き領域)がなくなったと判断した場合には、最も古い対象データ列が書き込まれたブロックをイレーズする。イレーズするブロックの順番は、ブロックの書き込み順に従って設定してもよい。そして、プロセッサ11は、イレーズしたブロックの開始アドレスから対象データ列を書き込んでいく。すなわち、対象データ列の書き込みを行うブロック(書き込みブロック)を移行する。図2の例では、ブロックB1に対象データ列を書き込める空き領域がなくなった場合には、次のブロックB2をイレーズして、ブロックB2の開始アドレス(5000番地)から、図4〜7と同様に対象データ列の書き込みを行う。なお、最終アドレスを含むブロックに対象データ列を書き込める記憶領域(空き領域)がなくなっても、全体が空き領域であるブロックがある場合が想定される。この場合には、ブロックのイレーズを省略して、全体が空き領域であるブロックを書き込みブロックとする。
ここで、本実施形態のバックアップ処理における書き込み規則の意義について理解を深めるため、図17を参照して、従来のバックアップ処理における書き込み規則について説明する。図17は、従来のバックアップ処理による書き込み態様の一例を示す。
図17に示すように、従来のバックアップ処理では、全てのデータ項目のバックアップデータを含む一定サイズの対象データ列をフラッシュメモリ12に毎回書き込んでいた。図示の例では、各回のバックアップ処理でブロックB1(B2)に書き込まれる対象データ列には、軽度異常1、軽度異常2、深刻異常1及び深刻異常2、キーオン時間、積算距離、補正値1、補正値2、学習値1、学習値2の全てのデータ項目が含まれている。一方、本実施形態では、データ更新頻度の降順に順位付けされた各データ項目の初期値に対して変化したデータ項目のうち最も下位のデータ項目順位までのバックアップデータがフラッシュメモリ12のブロックB1(B2)に書き込まれる。このため、最初のバックアップ処理から全てのデータ項目についてバックアップデータを書き込む必要性がなくなるので、バックアップ処理1回あたりに書き込む対象データ列のサイズは、従来のバックアップ処理よりも小さくなる。これは、各ブロックの空き領域がなくなるまでに書き込める回数すなわち書き込み可能回数が、従来のバックアップ処理よりも増大することを意味する。したがって、本実施形態のバックアップ処理によれば、書き込みブロックの移行時におけるイレーズの頻度(書き込み可能回数の逆数)が従来のバックアップ処理と比較すると少なくなる。
次に、図8〜10を参照して、図4〜7の書き込み規則を反映したバックアップ処理の具体例について説明する。
図8では、バックアップ処理を行う直前のフラッシュメモリ12及びRAM13におけるデータの格納状態が設定されている。ここで、バックアップ処理回数を正の整数mで示し、バックアップデータの総データ項目数を2以上の整数nで示し、データ項目順位を1からnの整数kで示す。そして、第m回のバックアップ処理における一時格納データのデータ項目順位kのバックアップデータをD(m,k)で示す。
フラッシュメモリ12のブロックB1又はB2には、前回である第(m−1)回のバックアップ処理によって書き込まれたバックアップデータとして、D(m−1,1),D(m−1,2),…,D(m−1,k),…,D(m−1,kw(m−1))が格納されている。変数kw(m−1)は、1からnまでの整数であり、前回のバックアップ処理によって書き込まれたバックアップデータのうち最も下位のデータ項目順位を示す前回書き込み順位である。ただし、バックアップ処理回数mの値が1である場合には、前回のバックアップデータが存在しないので、前回書き込み順位kw(0)を0とする。
また、フラッシュメモリ12のブロックB4には、各データ項目におけるバックアップデータの初期値として、D(0,1),D(0,2),…,D(0,k),…,D(0,n)が格納されている。
RAM13には、第m回のバックアップ処理を行う直前の一時格納データとして、D(m,1),D(m,2),…,D(m,k),…,D(m,n)が一時的に保持されている。一時格納データは、上記のように、フラッシュメモリ12からRAM13に読み出されたバックアップデータの初期値、D(0,1),D(0,2),…,D(0,k),…,D(0,n)から変化したデータ項目について変化後のデータに書き換えられたものである。そして、第m回のバックアップ処理における書き込み順位がkw(m)に特定されると、1番目から書き込み順位kw(m)までの一時格納データ、D(m,1),D(m,2),…,D(m,k),…,D(m,kw(m))が書き込み対象のバックアップデータとなる。
バックアップ処理回数m及び書き込み順位kw(m)の2つのメモリ管理情報は、各バックアップ処理において、フラッシュメモリ12の管理情報格納領域であるブロックB3の所定アドレスに書き込まれて格納されている。
図9は、イグニッションスイッチ30のオフ操作を契機として、プロセッサ11がブロックB5の所定アドレスからアプリケーションプログラムを読み出すことで実行を開始するバックアップ処理の一例を示す。なお、バックアップ処理回数mの初期値、及び前回書き込み順位kw(m)の初期値kw(0)はそれぞれ0に設定されているものとする。
ステップS101(図中では「S101」と略記する。以下同様。)では、プロセッサ11は、フラッシュメモリ12のブロックB3における所定アドレスからバックアップ処理回数m、前回書き込み順位kw(m)及び最終アドレスをRAM13に読み出す。また、プロセッサ11は、フラッシュメモリ12のブロックB3における所定アドレスからバックアップデータの初期値D(0,0)〜D(0,n)をRAM13に読み出す。
ステップS102では、プロセッサ11は、バックアップ処理回数mを1つインクリメントして、今回行うバックアップ処理の回数を決定する。これに伴い、前回のバックアップ処理における前回書き込み順位をkw(m)からkw(m−1)へ変更して記載する。したがって、kw(m)は、今回である第m回のバックアップ処理における書き込み順位を示すことになる。
ステップS103では、プロセッサ11は、データ項目順位k及び書き込み順位kw(m)を前回書き込み順位kw(m−1)の値に初期設定する。このように初期設定するのは、図7で示される書き込み規則に従って、バックアップデータの変化の有無にかかわらず、第m回のバックアップ処理における書き込み順位kw(m)を前回書き込み順位kw(m−1)よりも上位の値としないからでる。
ステップS104では、プロセッサ11は、データ項目順位kを1つインクリメントする。そして、ステップS105において、プロセッサ11は、第m回のバックアップ処理における一時格納データD(m,k)と初期値D(0,k)とが不一致であるか否か、すなわち、一時格納データD(m,k)が初期値D(0,k)から変化したか否かを判定する。
ステップS105において、プロセッサ11は、一時格納データD(m,k)と初期値D(0,k)とが不一致であると判定した場合には(YES)、処理をステップS106へ進めて、今回の書き込み順位kw(m)を現在のデータ項目順位kの値に仮決めする。一方、プロセッサ11は、一時格納データD(m,k)と初期値D(0,k)とが一致すると判定した場合には(NO)、仮決めされた書き込み順位kw(m)を変更しないようにステップS106を省略し、処理をステップS107へ進める。
ステップS107では、プロセッサ11は、現在のデータ項目順位kが総データ項目数nの値に達したか否かを判定する。そして、プロセッサ11は、現在のデータ項目順位kが総データ項目数nの値に達したと判定した場合には(YES)、処理をステップS108へ進める。一方、プロセッサ11は、現在のデータ項目順位kが総データ項目数nの値に達していないと判定した場合には(NO)、データ項目順位kを1つインクリメントして一時格納データと初期値とを引き続き比較するべく、処理をステップS104へ戻す。したがって、現在のデータ項目順位kが総データ項目数nの値に達するまで、ステップS104〜ステップS107が繰り返される。
ステップS104〜ステップS107を繰り返すと、一時格納データD(m,k)と初期値D(0,k)とが不一致であると判定されるたびに、書き込み順位kw(m)の値が前回書き込み順位kw(m−1)の値から下位に向けて繰り下がる。そして、現在のデータ項目順位kが総データ項目数nの値に達していれば、前回書き込み順位kw(m−1)よりも下位の全てのデータ項目についてバックアップデータの変化を確認していることになる。これにより、今回である第m回のバックアップ処理における書き込み順位kw(m)が特定されることになる。
ステップS108では、プロセッサ11は、現在の最終アドレスを含むブロックに、書き込み順位kw(m)に相当するデータ項目数のバックアップデータ並びにSUM値及び有効印からなる対象データ列を書き込める空き領域があるか否かを判定する。
第m回のバックアップ処理では、書き込み順位kw(m)に相当するデータ項目数のバックアップデータ並びにSUM値及び有効印からなる対象データ列が書き込まれるので、(kw(m)+2)個のアドレスを消費する。したがって、プロセッサ11は、ブロックB3の所定アドレスから読み出した現在の最終アドレスを含むブロックに(kw(m)+2)個のアドレスに相当する空き領域があるか否かを判定する。
ステップS108において、プロセッサ11は、フラッシュメモリ12のブロックに空き領域があると判定した場合には(YES)、処理をステップS109へ進める。一方、プロセッサ11は、フラッシュメモリ12のブロックに空き領域がないと判定した場合には(NO)、処理をステップS111へ進める。
ステップS109では、プロセッサ11は、現在の最終アドレスを含むブロックにおいて、バックアップデータD(m,0)〜D(m,kw(m))並びにSUM値及び有効印からなる対象データ列を書き込む。具体的には、プロセッサ11は、最終アドレスを含むブロックに格納されている全データを一時的にRAM13に退避させ、当該ブロックをイレーズ(消去)する。そして、プロセッサ11は、イレーズしたブロックにおいて、退避した全データをイレーズ前と同一のアドレスに書き込むとともに、第m回のバックアップ処理における対象データ列を、ブロックB3から読み出された最終アドレスの次のアドレスを書き込み先頭アドレスとして書き込む。
なお、フラッシュメモリ12がNAND型である場合には、各ブロックは、読み出し/書き込みが可能な単位(ページ)で所定バイトずつ区分される。しかし、対象データ列のデータサイズによっては、最終アドレスを含むページ内に対象データ列を書き込めない場合が生じ得る。この場合には、対象データ列の書き込み先頭アドレスを、最終アドレスを含むページの次のページの開始アドレスにすればよい。ただし、各ページの格納可能データサイズは、全てのデータ項目を含む対象データ列のデータサイズ以上に設定されることはいうまでもない。
ステップS110では、プロセッサ11は、現在のバックアップ処理回数m、書き込み順位kw(m)及び最終アドレスの各値をそれぞれ、管理情報格納領域であるブロックB3の所定アドレスに書き込む。最終アドレスは、ブロックB3から読み出された最終アドレスに、今回(第m回)のバックアップ処理による対象データ列のサイズを加えることで得られる。ステップS110を実行してバックアップ処理が終了すると、プロセッサ11は、電源リレー60に出力している制御信号SRを停止して、ECU10への電源供給を遮断(セルフシャット)する。
ステップS111では、プロセッサ11は、現在の最終アドレスを含むブロック以外の他のブロックのうち、最も古い対象データ列が書き込まれたブロックをイレーズして書き込みブロックとする。現在の最終アドレスを含むブロック以外の他のブロックに全体が空き領域となっているものがあれば、イレーズを省略して、当該他のブロックを書き込みブロックとしてもよい。例えば、ブロックB1に空き領域がないと判定した場合、ブロックB2をイレーズするか、あるいは、ブロックB2の全体が空き領域である場合にはブロックB2のイレーズを省略して、書き込みブロックとすることができる。
ステップS112では、プロセッサ11は、移行後の書き込みブロックにおいて、ステップS109と同様にして、バックアップデータD(m,0)〜D(m,kw(m))並びにSUM値及び有効印からなる対象データ列を書き込む。
ステップS113では、プロセッサ11は、ステップS110と同様にして、現在のバックアップ処理回数m、書き込み順位kw(m)及び最終アドレスをそれぞれ、管理情報格納領域であるブロックB3の所定アドレスに書き込む。ステップS113を実行してバックアップ処理が終了すると、プロセッサ11は、電源リレー60に出力している制御信号SRを停止して、ECU10への電源供給を遮断する。
このような第1実施形態に係る自動車用電子制御装置によれば、データ更新頻度の降順に順位付けされたデータ項目について初期値を予め設定している。そして、現在又は過去のバックアップ処理において初期値から変化したデータ項目のうち最も下位のデータ項目順位までのバックアップデータをフラッシュメモリ12のブロックに書き込んでいる。このため、最初のバックアップ処理から必ずしも全てのデータ項目についてバックアップデータを書き込む必要性がなくなるので、バックアップ処理1回あたりに書き込む対象データ列のサイズは、従来のバックアップ処理よりも小さくなる。これは、フラッシュメモリ12の各ブロックにおける書き込み可能回数が、従来のバックアップ処理よりも増大することを意味する。したがって、書き込みブロックの移行時におけるイレーズの頻度(書き込み可能回数の逆数)が従来のバックアップ処理と比較すると少なくなる。
フラッシュメモリ12にはメモリセルの劣化を考慮してイレーズ回数に制限が設けられているが、バックアップ処理回数が同一であれば、イレーズの頻度が少なくなることで、イレーズ回数を抑制することができる。したがって、第1実施形態に係る自動車用電子制御装置によれば、フラッシュメモリ12の長寿命化を図ることが可能となる。
また、第1実施形態に係る自動車用電子制御装置によれば、バックアップ処理1回あたりに書き込む対象データ列のサイズは、従来のバックアップ処理よりも小さくなるので、書き込み時間を短縮することが可能となる。これにより、バックアップ処理に要する電力を節約できるだけでなく、バックアップ処理中におけるイグニッションスイッチ30のオン操作による書き込みの中断(失敗)を発生し難くすることができる。
[第2実施形態]
次に、第2実施形態に係る自動車用電子制御装置について説明する。なお、第2実施形態に係る自動車用電子制御装置は第1実施形態に係る自動車用電子制御装置と同様の構成を備え、バックアップ処理の内容及びこれによる書き込み態様のみが異なる。このため、第1実施形態と同一構成については、同一符号を付すことでその説明を省略又は簡潔にする。
図10〜13を参照して、第2実施形態に係るバックアップ処理におけるバックアップデータの書き込み規則を説明する。図10〜13の各図における(a)は、バックアップデータの初期値に対する変化状態を示し、図10〜13の各図における(b)は、フラッシュメモリ12におけるバックアップデータの格納状態を示す。
図10は、第x回(xは正の整数)のバックアップ処理における書き込み態様の一例を示す。ここで、図10(b)に示すように、第(x−1)回のバックアップ処理では、キーオン時間、積算時間、学習値1、学習値2、SUM値及び有効印の6つのデータからなる対象データ列がブロックB1の4994〜4999番地に書き込まれて格納されているものとする。
図10(a)に示すように、RAM13の一時格納データでは、キーオン時間が初期値「0」から「12」に変化し、積算距離が初期値「0」から「15」に変化し、学習値1が初期値「5」から「6」に変化し、学習値2が初期値「5」から「6」に変化している。その他のデータ項目については初期値から変化していない。したがって、図示の例では、第1実施形態と同様に、一時格納データのうち、データ項目順位で1番目から4番目までのデータ項目のバックアップデータが書き込み対象となる。また、図10(b)に示すように、第(x−1)回のバックアップ処理で書き込まれた対象データ列の終端アドレス(4999番地)が最終アドレスであり、第x回で書き込み対象となるバックアップデータを書き込める空き領域がブロックB1にない。このため、プロセッサ11は、第1実施形態と同様に、最も古い対象データ列が書き込まれたブロックB2をイレーズして書き込みブロックとする。全体が空き領域であるブロックがある場合には、ブロックのイレーズを省略して、全体が空き領域であるブロックを書き込みブロックとする。そして、プロセッサ11は、書き込みブロック移行後のブロックB2の開始アドレス(5000番地)を書き込み先頭アドレスとして、対象データ列をブロックB2の5000〜5005番地に書き込んで格納する。
図11は、第(x+1)回のバックアップ処理における書き込み態様の一例を示す。第1実施形態では、書き込みブロックの移行後において、RAM13の一時格納データと比較する比較基準はブロックB3に予め格納された初期値テーブルである。これに対し、第2実施形態では、書き込みブロックの移行後において、初期値テーブルを修正した修正初期値テーブルを比較基準として用いる。修正初期値テーブルでは、図11(a)に示すように、書き込みブロックを移行した第x回のバックアップ処理において書き込み対象となった1〜4番目のデータ項目については、初期値テーブルの初期値に代えて修正初期値を用いる。修正初期値は、第x回のバックアップ処理においてフラッシュメモリ12に書き込んだバックアップデータ(図中の太枠TA内)である。一方、残りの5〜10番目のデータ項目については、ブロックB3に予め格納された初期値テーブルの初期値(図中の太枠TB内)をそのまま用いる。
図11(a)に示すように、RAM13の一時格納データでは、キーオン時間が修正初期値「12」から「13」に変化し、その他のデータ項目については修正初期値テーブルの修正初期値及び初期値から変化していない。したがって、図示の例では、一時格納データのうち、データ項目順位で1番目のデータ項目のバックアップデータのみが書き込み対象となる。また、図11(b)に示すように、第x回のバックアップ処理で書き込まれた対象データ列の終端アドレス(5005番地)が最終アドレスであり、この最終アドレスは上記のようにブロックB3に格納されている。したがって、第(x+1)回のバックアップ処理では、プロセッサ11は、ブロックB3から読み出した最終アドレスの次のアドレス(5006番地)を書き込み先頭アドレスとして、対象データ列をブロックB2の5006〜5008番地に書き込んで格納する。
図12は、第(x+2)回のバックアップ処理における書き込み態様の一例を示す。図12(a)に示すように、RAM13の一時格納データでは、キーオン時間が修正初期値「12」から「14」に変化し、積算距離が修正初期値「15」から「16」に変化している。また、学習値1が修正初期値「6」から「7」に変化し、補正値1が初期値「0」から「2」に変化し、補正値2が初期値「0」から「1」に変化している。その他のデータ項目については修正初期値テーブルの修正初期値及び初期値から変化していない。したがって、図示の例では、一時格納データのうち、データ項目順位で1番目から6番目までのデータ項目のバックアップデータが書き込み対象となる。また、図12(b)に示すように、第(x+1)回のバックアップ処理で書き込まれた対象データ列の終端アドレス(5008番地)が最終アドレスあり、この最終アドレスは上記のようにブロックB3に格納されている。したがって、第(x+2)回のバックアップ処理では、プロセッサ11は、ブロックB3から読み出した最終アドレスの次のアドレス(5009番地)を書き込み先頭アドレスとして、対象データ列をブロックB2の5009〜5016番地に書き込んで格納する。
図13は、第(x+3)回のバックアップ処理における書き込み態様の一例を示す。図13(a)に示すように、RAM13の一時格納データでは、キーオン時間が修正初期値「12」から「15」に変化し、積算距離が修正初期値「15」から「17」に変化し、学習値1が修正初期値「6」から「7」に変化している。その他のデータ項目については修正初期値テーブルの修正初期値及び初期値から変化していない。第(x+3)回のバックアップ処理では、第1実施形態と同様の理由により、データ項目順位で1番目から3番目までではなく、第(x+2)回のバックアップ処理で書き込んだ1番目から6番目までのデータ項目のバックアップデータが書き込み対象となる。また、図13(b)に示すように、第(x+2)回のバックアップ処理で書き込まれた対象データ列の終端アドレス(5016番地)が最終アドレスであり、この最終アドレスは上記のようにブロックB3に格納されている。したがって、第(x+3)回のバックアップ処理では、プロセッサ11は、ブロックB3から読み出した最終アドレスの次のアドレス(5017番地)を書き込み先頭アドレスとして、対象データ列をブロックB2の5017〜5024番地に書き込んで格納する。
次に、図14〜16を参照して、図10〜13の書き込み規則を反映したバックアップ処理の具体例について説明する。
図14では、バックアップ処理を行う直前のフラッシュメモリ12及びRAM13におけるデータの格納状態が設定されている。図8と同様に、フラッシュメモリ12のブロックB1又はB2には、前回である第(m−1)回のバックアップ処理によって書き込まれたバックアップデータとして、D(m−1,1),D(m−1,2),…,D(m−1,k),…,D(m−1,kw(m−1))が格納されている。また、フラッシュメモリ12のブロックB4には、バックアップデータの初期値として、D(0,1),D(0,2)…D(0,k)…D(0,n)が格納されている。さらに、RAM13には、第m回のバックアップ処理を行う直前の一時格納データとして、D(m,1),D(m,2)…D(m,k)…D(m,n)が一時的に保持されている。そして、第m回のバックアップ処理における書き込み順位がkw(m)に特定されると、1番目から書き込み順位kw(m)までの一時格納データ、D(m,1),D(m,2),…,D(m,k),…,D(m,kw(m))が書き込み対象のバックアップデータとなる。
ここで、書き込みブロックを移行したときのバックアップ処理回数mを移行時回数Mとし、移行時の書き込み順位kw(m)を移行時書き込み順位Krefとする。したがって、第M回のバックアップ処理で書き込まれたバックアップデータは、D(M,1),D(M,2),…,D(M,k),…,D(M,Kref)で示され、これらが修正初期値テーブルにおける修正初期値となる。また、移行時書き込み順位Krefが総データ項目数nの値未満であれば、一時格納データのうち移行時書き込み順位Krefより下位のデータ項目順位kについては、初期値テーブルの初期値D(0,k)が修正初期値テーブルでそのまま用いられる。なお、第M回のバックアップ処理で書き込まれたバックアップデータは、図10における第x回のバックアップ処理で書き込み対象となったバックアップデータに相当する。
図15は、イグニッションスイッチ30のオフ操作を契機として、プロセッサ11がブロックB5の所定アドレスからアプリケーションプログラムを読み出すことで実行を開始するバックアップ処理の一例を示す。なお、バックアップ処理回数m、前回書き込み順位kw(m)、移行時回数M及び後述の移行時フラグpは、メモリ管理情報として管理情報格納領域であるブロックB3の所定アドレスに格納され、ぞれぞれの初期値が0に設定されているものとする。また、移行時書き込み順位Krefも、メモリ管理情報として管理情報格納領域であるブロックB3の所定アドレスに格納され、その初期値が総データ項目数nの値に設定されているものとする。
ステップS201では、プロセッサ11は、フラッシュメモリ12のブロックB3における所定アドレスから、移行時フラグp、バックアップ処理回数m、前回書き込み順位kw(m)、移行時回数M、移行時書き込み順位Kref及び最終アドレスをRAM13に読み出す。
また、プロセッサ11は、書き込みブロックを移行したときのバックアップ処理で書き込まれたバックアップデータ、D(M,0)〜D(M,Kref)をRAM13に読み出す。移行時回数Mが0でない場合には既に書き込みブロックを移行していることになる。このため、プロセッサ11は、現在の最終アドレスを含むブロックの開始アドレスを読み出し、これを先頭アドレスとして、移行時書き込み順位Krefに相当するアドレス数のバックアップデータをRAM13に読み出す。一方、プロセッサ11がバックアップ処理を最初に実行するときには、M=0、Kref=nであるので、初期値テーブルの初期値、D(0,0)〜D(0,n)をRAM13に読み出す。
ステップS202では、プロセッサ11は、バックアップ処理回数mを1つインクリメントして、今回行うバックアップ処理の回数を決定する。これに伴い、前回のバックアップ処理における書き込み順位をkw(m)からkw(m−1)へ変更して記載する。したがって、kw(m)は、今回である第m回のバックアップ処理における書き込み順位を示すことになる。
ステップS203では、プロセッサ11は、データ項目順位kを1に初期設定し、書き込み順位kw(m)を0に初期設定する。ステップS204では、プロセッサ11は、今回の書き込み順位kw(m)を特定する。今回の書き込み順位kw(m)の特定に関する処理の詳細ついては後述する。
ステップS205では、プロセッサ11は、移行時フラグpが0であるか否かを判定する。移行時フラグpの値は、前回のバックアップ処理が、書き込みブロックを移行したときのバックアップ処理であるか否かを示す。移行時フラグpの値は、前回のバックアップ処理が書き込みブロックを移行したときのバックアップ処理である場合には例えば1に設定され、そうでない場合には例えば0に設定される。そして、プロセッサ11は、移行時フラグpが0であると判定した場合には(YES)、前回のバックアップ処理で書き込みブロックを移行していないものと判断して、処理をステップS206へ進める。一方、プロセッサ11は、移行時フラグpが1であると判定した場合には(NO)、前回のバックアップ処理で書き込みブロックを移行したものと判断し、ステップS206,207を省略して、処理をステップS208へ進める。
ステップS206では、プロセッサ11は、ステップS204で特定した書き込み順位kw(m)が前回書き込み順位kw(m−1)未満であるか否かを判定する。すなわち、プロセッサ11は、ステップS204で特定した書き込み順位kw(m)が前回書き込み順位kw(m−1)よりも上位であるか否かを判定する。そして、プロセッサ11は、ステップS204で特定した書き込み順位kw(m)が前回書き込み順位kw(m−1)未満であると判定した場合には(YES)、処理をステップS207へ進める。ステップS207では、プロセッサ11は、今回の書き込み順位kw(m)を強制的に前回書き込み順位kw(m−1)に補正する。一方、プロセッサ11は、ステップS204で特定した書き込み順位kw(m)が前回書き込み順位kw(m−1)以上であると判定した場合には(NO)、ステップS207を省略して、処理をステップS208へ進める。ステップS205,S206の判定を行うのは、前回のバックアップ処理で書き込みブロックを移行していない場合には、図13で示される書き込み規則に従って、第m回のバックアップ処理における書き込み順位kw(m)を前回書き込み順位kw(m−1)よりも上位の値としないためである。
ステップS208では、プロセッサ11は、ステップS108と同様に、現在の最終アドレスを含むブロックに、対象データ列を書き込める空き領域があるか否かを判定する。そして、プロセッサ11は、フラッシュメモリ12のブロックに空き領域があると判定した場合には(YES)、処理をステップS209へ進めて、移行時フラグpが1である場合にはこれを0に設定する。一方、プロセッサ11は、フラッシュメモリ12のブロックに空き領域がないと判定した場合には(NO)、処理をステップS212へ進めて、移行時フラグpが0である場合にはこれを1に設定する。
ステップS210では、プロセッサ11は、ステップS109と同様に、現在の最終アドレスを含むブロックにおいて、バックアップデータD(m,0)〜D(m,kw(m))並びにSUM値及び有効印からなる対象データ列を書き込む。
ステップS211では、プロセッサ11は、ステップS110と同様に、移行時フラグp,現在のバックアップ処理回数m、書き込み順位kw(m)及び最終アドレスの各値をそれぞれ、管理情報格納領域であるブロックB3の所定アドレスに書き込む。ステップS211を実行してバックアップ処理が終了すると、プロセッサ11は、電源リレー60に出力している制御信号SRを停止して、ECU10への電源供給を遮断する。
ステップS213では、プロセッサ11は、移行時回数Mを現在のバックアップ処理回数mの値に設定するとともに、移行時書き込み順位Krefを第m回のバックアップ処理における書き込み順位kw(m)の値に設定する。
ステップS214では、プロセッサ11は、ステップS111と同様に、現在の最終アドレスを含むブロック以外の他のブロックのうち、最も古い対象データ列が書き込まれたブロックをイレーズする。
ステップS215では、プロセッサ11は、移行後の書き込みブロックにおいて、ステップS112と同様にして、バックアップデータD(m,0)〜D(m,kw(m))並びにSUM値及び有効印からなる対象データ列を書き込む。
ステップS216では、プロセッサ11は、ステップS113と同様にして、移行時フラグp,現在のバックアップ処理回数m、移行時回数M、移行時書き込み順位Kref及び最終アドレスの各値をそれぞれ、管理情報格納領域であるブロックB3の所定アドレスに書き込む。ステップS216を実行してバックアップ処理が終了すると、プロセッサ11は、電源リレー60に出力している制御信号SRを停止して、ECU10への電源供給を遮断する。
図16は、図15のバックアップ処理のうち書き込み順位kw(m)の特定に関する処理についてのサブルーチンを示す。
ステップS301では、プロセッサ11は、第m回のバックアップ処理における一時格納データD(m,k)と修正初期値D(M,k)とが不一致であるか否か、すなわち、一時格納データD(m,k)が修正初期値D(M,k)から変化したか否かを判定する。そして、プロセッサ11は、一時格納データD(m,k)と修正初期値D(M,k)とが不一致であると判定した場合には(YES)、処理をステップS302へ進めて、今回の書き込み順位kw(m)を現在のデータ項目順位kの値に仮決めする。一方、プロセッサ11は、一時格納データD(m,k)と修正初期値D(M,k)とが一致すると判定した場合には(NO)、初期設定又は仮決めした書き込み順位kw(m)を変更しないようにステップS302を省略し、処理をステップS303へ進める。
ステップS303において、プロセッサ11は、現在のデータ項目順位kが移行時書き込み順位Krefの値に達したと判定した場合には(YES)、処理をステップS305へ進める。一方、プロセッサ11は、現在のデータ項目順位kが移行時書き込み順位Krefの値に達していないと判定した場合には(NO)、データ項目順位kを1つインクリメントして一時格納データと修正初期値とを引き続き比較するべく、処理をステップS304へ進める。したがって、現在のデータ項目順位kが移行時書き込み順位Krefの値に達するまで、ステップS301〜ステップS304が繰り返される。
ステップS305において、プロセッサ11は、移行時書き込み順位Krefが総データ項目数nの値未満であると判定した場合には(YES)、一時格納データと初期値とを比較すべく、処理をステップS306へ進めて、データ項目順位kを移行時書き込み順位Krefの値から1つインクリメントする。一方、プロセッサ11は、移行時書き込み順位Krefが総データ項目数nであると判定した場合には(NO)、一時格納データと比較する初期値がないので、ステップS306〜S310を省略して、本サブルーチンを終了する。これにより、今回の書き込み順位kw(m)は、ステップS302で最後に仮決めした値、あるいはステップS302を実行していない場合には、ステップS203で初期設定した値として特定される。
ステップS307では、プロセッサ11は、移行時書き込み順位Krefより下位のデータ項目順位kについての初期値D(0,k)を読み出す。ステップS308では、プロセッサ11は、移行時書き込み順位Krefより下位のデータ項目順位kについて、第m回のバックアップ処理における一時格納データD(m,k)と初期値D(0,k)とが不一致であるか否かを判定する。そして、プロセッサ11は、一時格納データD(m,k)と初期値D(0,k)とが不一致であると判定した場合には(YES)、処理をステップS309へ進めて、今回の書き込み順位kw(m)を現在のデータ項目順位kの値に仮決めする。一方、プロセッサ11は、一時格納データD(m,k)と初期値D(0,k)とが一致すると判定した場合には(NO)、初期設定又は仮決めした書き込み順位kw(m)を変更しないようにステップS309を省略し、処理をステップS310へ進める。
そして、ステップS310において、プロセッサ11は、現在のデータ項目順位kが総データ項目数nの値に達したと判定した場合には(YES)、一時格納データと比較する初期値がないので、本サブルーチンを終了する。これにより、書き込み順位kw(m)は、ステップS309で最後に仮決めした値か、ステップS309を実行していない場合にはステップS302で最後に仮決めした値か、またはステップS302を実行していない場合には、ステップS203で初期設定した値として特定される。一方、プロセッサ11は、現在のデータ項目順位kが総データ項目数nの値に達していないと判定した場合には(NO)、データ項目順位kを1つインクリメントして一時格納データと初期値とを引き続き比較するべく、処理をステップS306へ戻す。したがって、現在のデータ項目順位kが総データ項目数nの値に達するまで、ステップS306〜ステップS310が繰り返される。
このような第2実施形態に係る自動車用電子制御装置によれば、書き込みブロックが移行するたびに、初期値テーブルを修正して修正初期値テーブルとしている。そして、移行後の書き込みブロックにおけるバックアップ処理では、修正初期値テーブルを一時格納データとの比較基準として用いている。これにより、移行後の書き込みブロックでは、対象データ列のサイズを減少させ得る。これは、書き込みブロックが移行しても初期値テーブルのみを比較基準として用いる第1実施形態において、移行後の書き込みブロックにおける対象データ列のサイズが増大はしても減少はしないことと対照的である。
したがって、第2実施形態に係る自動車用電子制御装置によれば、第1実施形態と比較すると、バックアップ処理1回あたりに書き込む対象データ列の平均サイズを小さくすることができる。このため、書き込みブロックの移行時におけるイレーズの頻度を、従来のみならず、第1実施形態と比較しても少なくすることが可能となる。これにより、第1実施形態以上に、バックアップ処理における書き込み時間の短縮化、及びフラッシュメモリ12の長寿命化を図ることが可能となる。
なお、第1及び第2実施形態において、バックアップ処理回数m、書き込み順位kw(m)、移行時回数M及び移行時フラグp及び移行時書き込み順位Kref等のメモリ管理情報はバックアップデータ格納領域とは別のブロックに格納されていた。これに代えて、メモリ管理情報を対象データ列中に含めてバックアップデータ格納領域に格納してもよい。例えば、バックアップデータとSUM値との間において、バックアップ処理回数m、書き込み順位kw(m)、移行時回数M及び移行時フラグp及び移行時書き込み順位Krefの順でアドレスを付与してバックアップデータ格納領域に格納してもよい。
このようにメモリ管理情報を対象データ列中に含めてバックアップデータ格納領域に格納することで、バックアップ処理のたびに管理情報格納領域であるブロックB3に最終アドレスを記憶させる必要がなくなる。例えば、フラッシュメモリ12のバックアップデータ格納領域であるブロックB1,B2の格納データをアドレスと関連付けて全てRAM13に読み出して、各ブロックにおいて、最も大きいアドレスの有効印を特定する。次に、各ブロックにおいて特定された有効印を含む対象データ列の中で、バックアップ処理回数mが最も大きい対象データ列を特定する。同一の対象データ列において、バックアップ処理回数mは、上記のように終端アドレスから所定位置のアドレスにあるので、バックアップ処理回数mの識別が可能である。そして、バックアップ処理回数mが最も大きい対象データ列に含まれる有効印のアドレスを最終アドレスと特定できる。したがって、管理情報格納領域であるブロックB3の所定アドレスに繰り返しメモリ管理情報を書き込む必要がなくなるので、ブロックB3のイレーズ頻度が低下して、フラッシュメモリ12の長寿命化を図ることができる。なお、第1及び第2実施形態では、バックアップ処理のたびに管理情報格納領域であるブロックB3に最終アドレスを記憶させているので、有効印を対象データ列に含めなくてもよい。
メモリ管理情報を対象データ列中に含めてバックアップデータ格納領域に格納する場合には、各対象データ列において、有効印を、対象データ列のデータサイズ(バイト数)に代えてもよい。このように有効印を用いなくても、最終アドレスを特定できる。例えば、フラッシュメモリ12のバックアップデータ格納領域であるブロックB1,B2の格納データをアドレスと関連付けて全てRAM13に読み出して、各ブロックにおいて、格納データの末尾アドレスであるブロックデータ末尾アドレスを特定する。ブロックデータ末尾アドレスは、それよりも後のアドレスが空き領域となるアドレスとして特定可能である。次に、各ブロックにおいて特定されたブロックデータ末尾アドレスを終端アドレスとする対象データ列の中で、バックアップ処理回数mが最も大きい対象データ列を特定する。そして、バックアップ処理回数mが最も大きい対象データ列の終端アドレスを最終アドレスと特定できる。
上記実施形態で説明した各技術的思想は、矛盾が生じない限りにおいて、適宜組み合わせて使用することができる。また、上記実施形態を参照して本発明の内容を具体的に説明したが、本発明の基本的な技術思想及び教示に基づいて、当業者であれば、以下のように種々の変形態様を採り得ることは自明である。例えば、フラッシュメモリ12のブロック数を2つとしたが3つ以上であってもよく、バックアップデータ等は1バイトでなく2バイト以上であってもよい。