(57)【要約】【課題】書き込み可能な不揮発性メモリの長寿命化を図る。【解決手段】複数のデータ項目についてのデータを一時的に格納する揮発性メモリ(13)と、イレーズ単位であるブロックで複数区分された書き込み可能な不揮発性メモリ(12)と、イグニッションスイッチ(30)がオフ操作されたときに、複数のデータ項目のうち書き込み対象データ項目についてのデータを不揮発性メモリに書き込ませる制御部(11)と、を備え、制御部(11)は、イグニッションスイッチ(30)がオン状態であるときに、揮発性メモリ(13)のデータにおいて、複数のデータ項目のそれぞれについて予め設定されている初期値から変化しているデータ項目に基づいて、書き込み対象データ項目を特定する。【選択図】図１
2020077192.tif 000002
【特許請求の範囲】
【請求項１】
イレーズ単位であるブロックで複数区分された書き込み可能な不揮発性メモリと、
イグニッションスイッチがオン状態であるときに、複数のデータ項目についてのデータを一時的に格納する揮発性メモリと、
イグニッションスイッチがオフ操作されたときに、前記複数のデータ項目のうち書き込み対象データ項目について前記データを前記不揮発性メモリに書き込ませる制御部と、
を備え、
前記制御部は、前記データにおいて、前記複数のデータ項目のそれぞれについて予め設定されている初期値から変化しているデータ項目に基づいて、前記書き込み対象データ項目を特定する、自動車用電子制御装置。
【請求項２】
前記書き込み対象データ項目は、前記複数のデータ項目のデータ更新頻度の降順に従って、前記データ更新頻度が最も高いデータ項目から、前記データにおいて前記初期値から変化しているデータ項目のうち前記データ更新頻度が最も低いデータ項目までである、請求項１に記載の自動車用電子制御装置。
【請求項３】
前記制御部は、前記不揮発性メモリにおいて前記データを書き込ませる前記ブロックを移行したときに特定された前記書き込み対象データ項目についての前記データを用いて、前記ブロックを移行したときに特定された前記書き込み対象データ項目に対応するデータ項目についての前記初期値を修正する、請求項１又は請求項２に記載の自動車用電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電気的にデータの書き込みが可能な不揮発性メモリを備えた自動車用電子制御装置に関する。
【背景技術】
【０００２】
従来の自動車用電子制御装置として、例えば特許文献１に記載されているように、イレーズ（消去）単位であるブロックにより記憶領域が複数区分された書き込み可能な不揮発性メモリを備えたものが知られている。かかる不揮発性メモリでは、データ書き込みを行っている１つの書き込みブロックにデータの書き込み可能な空き領域がなくなった場合には、他のブロックの格納データをイレーズして書き込みブロックの移行を行っている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−０７３６０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、書き込み可能な不揮発性メモリには、通常、メモリセルの劣化を考慮してイレーズ回数の制限が設けられている。このため、書き込みブロックを移行するときのイレーズの頻度を減らして不揮発性メモリの長寿命化を図るべく、各ブロックにおいて書き込み可能回数を多くすることが考えられる。
【０００５】
しかし、書き込み可能な不揮発性メモリにおいて、データ書き込み毎に一定サイズのデータが書き込まれる場合には、各ブロックにおける書き込み可能回数を多くすることができず、不揮発性メモリの長寿命化を図ることができない。
【０００６】
そこで、本発明は以上のような問題点に鑑み、書き込み可能な不揮発性メモリの長寿命化を図った自動車用電子制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
このため、本発明に係る自動車用電子制御装置は、イレーズ単位であるブロックで複数区分された書き込み可能な不揮発性メモリと、イグニッションスイッチがオン状態であるときに、複数のデータ項目についてのデータを一時的に格納する揮発性メモリと、イグニッションスイッチがオフ操作されたときに、複数のデータ項目のうち書き込み対象データ項目についてデータを不揮発性メモリに書き込ませる制御部と、を備え、制御部は、データにおいて、複数のデータ項目のそれぞれについて予め設定されている初期値から変化しているデータ項目に基づいて、書き込み対象データ項目を特定している。
【発明の効果】
【０００８】
本発明の自動車用電子制御装置によれば、書き込み可能な不揮発性メモリの長寿命化を図ることができる。
【図面の簡単な説明】
【０００９】
【図１】自動車用電子制御装置の適用例を示す構成図である。
【図２】フラッシュメモリの内部の一例を模式的に示す構成図である。
【図３】バックアップデータの初期値の一例を示すデータテーブルである。
【図４】第１実施形態のバックアップ処理における書き込み態様の一例を示す説明図である。
【図５】同バックアップ処理における書き込み態様の一例を示す説明図である。
【図６】同バックアップ処理における書き込み態様の一例を示す説明図である。
【図７】同バックアップ処理における書き込み態様の一例を示す説明図である。
【図８】同バックアップ処理におけるデータ格納状態を設定した設定表である。
【図９】同バックアップ処理の具体例を示すフローチャートである。
【図１０】第２実施形態のバックアップ処理における書き込み態様の一例を示す説明図である。
【図１１】同バックアップ処理における書き込み態様の一例を示す説明図である。
【図１２】同バックアップ処理における書き込み態様の一例を示す説明図である。
【図１３】同バックアップ処理における書き込み態様の一例を示す説明図である。
【図１４】同バックアップ処理におけるデータ格納状態を設定した設定表である。
【図１５】同バックアップ処理の具体例を示すフローチャートである。
【図１６】同バックアップ処理のサブルーチンの一例を示すフローチャートである。
【図１７】従来のバックアップ処理による書き込み態様の一例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下、添付された図面を参照し、本発明を実施するための実施形態について詳述する。
【００１１】
［第１実施形態］
第１実施形態に係る自動車用電子制御装置について説明する。図１は、自動車用電子制御装置の適用例を示す。自動車用電子制御装置（以下、「ＥＣＵ」という）１０は、例えばマイクロコントローラであり、車両に搭載されたアクチュエータ２０を制御するものである。車両に搭載されたアクチュエータ２０は、変速機構、内燃機関の可変バルブタイミング機構、圧縮比可変機構、制動機構、操舵補助機構等、様々な車載機構の駆動源として用いられ得る。
【００１２】
ＥＣＵ１０は、イグニッションスイッチ３０及び電源回路４０を介して車載バッテリ５０と接続され、イグニッションスイッチ３０がオン状態であるときに、電源回路４０により車載バッテリ５０からの電力が調整されてＥＣＵ１０に電源電圧Ｖｃｃが供給される。
【００１３】
また、ＥＣＵ１０は、外部制御可能な電源リレー６０の制御端子と接続されている。電源リレー６０は、車載バッテリ５０と電源回路４０との間を、イグニッションスイッチ３０を迂回して接続している。ＥＣＵ１０が、電源リレー６０に制御信号ＳＲを出力することで電源リレー６０がオン状態となり、イグニッションスイッチ３０がオフ状態でも車載バッテリ５０と電源回路４０との間が電気的に接続され、ＥＣＵ１０へ電源電圧Ｖｃｃが供給される。
【００１４】
さらに、ＥＣＵ１０は、イグニッションスイッチ３０とＥＣＵ１０との間の電源供給線からイグニッションスイッチ３０の下流における電圧ＶＩＧＮが入力されて、これをＡ／Ｄ（Analog/Digital）変換等によって検出できるように構成されている。
【００１５】
ＥＣＵ１０は、ＣＰＵ（Central Processing Unit）またはＭＰＵ（Micro Processing Unit）等のプロセッサ１１を備えている。また、ＥＣＵ１０は、電気的に書換え可能であって電源遮断時にも記憶された情報を保持する不揮発性メモリとしてフラッシュメモリ１２を備えている。さらに、ＥＣＵ１０は、例えばＳＲＡＭ（Static Random Access Memory）またはＤＲＡＭ（Dynamic Random Access Memory）等の揮発性メモリであるＲＡＭ１３と、外部との間で信号の入出力を行う入出力インタフェース（Ｉ／Ｆ）１４と、を備えている。ＥＣＵ１０において、プロセッサ１１、フラッシュメモリ１２、ＲＡＭ１３及び入出力インタフェース１４は、通信バス１５によって相互に通信可能に接続されている。
【００１６】
プロセッサ１１は、フラッシュメモリ１２に格納されたアプリケーションプログラムをＲＡＭ１３に読み出して実行することで、各種処理を行うように構成されている。各種処理としては、アクチュエータ２０の制御処理、ＯＢＤ（On Board Diagnosis）による故障診断処理、バックアップ処理等がある。
【００１７】
バックアップ処理は、ＲＡＭ１３に一時的に記憶されている各種データをバックアップデータとしてフラッシュメモリ１２へ書き込んで格納する処理である。バックアップデータとしては、イグニッションスイッチ３０のオン期間や積算距離等の車両情報に加え、アクチュエータ２０の制御処理により得られた学習値・補正値、故障診断処理により得られた診断情報等のデータがある。
【００１８】
バックアップ処理はセルフシャット期間中に行われる。セルフシャット期間は、イグニッションスイッチ３０がオフ操作されてから、電源リレー６０を介してＥＣＵ１０への電源供給が継続される期間である。セルフシャット期間は、プロセッサ１１が入出力インタフェース１４を介して検出した電圧ＶＩＧＮに基づいてイグニッションスイッチ３０のオフ操作を検知したときに、入出力インタフェース１４を介して電源リレー６０に制御信号ＳＲを出力することで開始する。また、セルフシャット期間は、プロセッサ１１が、バックアップ処理を終了したときに、入出力インタフェース１４を介して電源リレー６０に出力している制御信号ＳＲを停止することで終了する。
【００１９】
図２は、フラッシュメモリ１２の内部構造を模式的に示す。フラッシュメモリ１２は、イレーズ（消去）単位であるブロックを複数備え、このブロックによって記憶領域が複数に区分されている。
【００２０】
図中では、説明の便宜上、フラッシュメモリ１２は５つのブロックＢ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５を備えているものとする。例えば、５つのブロックＢ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５がそれぞれ５ｋＢ（５０００バイト）の記憶領域を有しているものとし、１つのアドレスについて１バイトを識別できるものとする。したがって、ブロックＢ１の開始アドレスから終了アドレスまでが０〜４９９９番地となり、ブロックＢ２の開始アドレスから終了アドレスまでが５０００〜９９９９番地となる。以降のブロックＢ３〜Ｂ５についても同様である。
【００２１】
ブロックＢ１〜Ｂ３は、バックアップ処理によってデータを書き込むために用いられる。ブロックＢ１，Ｂ２は、バックアップ処理の書き込みによりバックアップデータを格納するバックアップデータ格納領域である。ブロックＢ３は、バックアップ処理により変化するメモリ管理情報を格納する管理情報格納領域である。
【００２２】
ブロックＢ４〜Ｂ５は、リプログラミング等を除いてデータ等の書き込みがなされず、格納されたデータ等を専ら読み出すために用いられる。ブロックＢ４は、アクチュエータ２０の制御処理やバックアップ処理等に必要な定数データを格納する定数データ格納領域である。ブロックＢ５は、アプリケーションプログラムを格納するアプリケーションプログラム格納領域である。アプリケーションプログラムは、アクチュエータ２０の制御処理、ＯＢＤによる故障診断処理、バックアップ処理等を行うためのソフトウェアである。
【００２３】
図３は、バックアップデータの初期値が設定された初期値テーブルの一例を示す。初期値テーブルでは、バックアップデータの複数のデータ項目が、ＥＣＵ１０におけるデータ更新頻度の降順で順位付けされている（データ更新頻度が高い方が上位）。データ項目の順位（以下、データ項目順位という）は、後述のように、バックアップ処理においてバックアップデータを書き込む際のアドレス順を示す。データ更新頻度は、バックアップデータが前回のバックアップ処理でフラッシュメモリ１２に書き込んだ値（前回値）あるいは初期値から変化する確率であり、経験的に推定され得る。各データ項目についての初期値は、車両の出荷前（すなわちバックアップ処理を初めて行う前）に予め設定され、それぞれフラッシュメモリ１２の定数格納領域であるブロックＢ４の所定アドレスに格納されている。
【００２４】
図中の初期値テーブルでは、バックアップデータのデータ項目を、例えば、キーオン時間、積算距離、学習値１、学習値２、補正値１、補正値２、軽度異常１、軽度異常２、深刻異常１及び深刻異常２の１０種類としている。そして、バックアップデータの１０種類のデータ項目が、データ更新頻度の降順で順位付けされている。例えばイグニッションスイッチ３０のオン状態の積算時間を示す「キーオン時間」は、前回値から毎回変化するので、「キーオン時間」のデータ項目順位は最も上位に設定されている。一方、例えば車両衝突数秒前からの主要走行状態を示す「深刻異常」は、その数値が変化するときには車両が衝突してＥＣＵ１０が交換されるので、「深刻異常」のデータ項目順位は最も下位に設定されている。そして、学習値１及び学習値２の初期値が「５」と設定される他、他のデータ項目の初期値については「０」に設定されるものとする。
【００２５】
なお、データ項目の中には、「１」及び「２」という数詞を除いて名称が共通のものがあるが、「２」よりも「１」が付されたデータ項目の方がデータ更新頻度の高いバックアップデータであることを示している。例えば、学習値１及び学習値２では、学習値１がデータ更新頻度の比較的高いデータを意味するのに対し、学習値２がデータ更新頻度の比較的低いデータを意味している。
【００２６】
次に、図４〜７を参照して、第１実施形態に係るバックアップ処理におけるバックアップデータの書き込み規則を説明する。図４〜７の各図における（ａ）は、バックアップデータの初期値に対する変化状態を示し、図４〜７の各図における（ｂ）は、フラッシュメモリ１２におけるバックアップデータの格納状態を示す。なお、説明の便宜上、各データ項目のバックアップデータ並びに後述のＳＵＭ値及び有効印は、それぞれ１バイトの情報量で表現されるものとし、フラッシュメモリ１２の各アドレスに１つずつ格納されるものとする。以下、同様である。
【００２７】
図４は、第１回のバックアップ処理における書き込み態様の一例を示す。図４（ａ）に示すように、第１回のバックアップ処理の前に、プロセッサ１１は、フラッシュメモリ１２の初期値テーブルから各データ項目について初期値をＲＡＭ１３に読み出す。そして、プロセッサ１１は、イグニッションスイッチ３０がオン状態のときに（例えばアクチュエータ２０の制御処理等により）初期値から変化したデータ項目について変化後のデータに書き換える。このように、ＲＡＭ１３内において初期値から書き換えられたデータ項目のデータに加え、初期値から書き換えられなかったデータ項目のデータを含めて、一時格納データというものとする。図中の一時格納データでは、キーオン時間及び積算距離がそれぞれ初期値「０」から「１」に書き換えられて変化しているが、その他のデータ項目については初期値から変化していない。
【００２８】
プロセッサ１１がフラッシュメモリ１２に対して書き込むバックアップデータの書き込み対象は、一時格納データのうち、データ項目順位で１番目のデータ項目から、初期値を書き換えたデータ項目の中で最も下位のデータ項目までのバックアップデータである。なお、バックアップデータのうち書き込み対象となるデータ項目を書き込み対象データ項目というものとする。図示の例では、一時格納データのうち、データ項目順位で１番目及び２番目のデータ項目が初期値から変化しているので、１番目から２番目までのデータ項目のバックアップデータが書き込み対象となる。仮に初期値から変化しているのが１番目のデータ項目のみである場合には、当該データ項目のバックアップデータが書き込み対象となる。なお、いずれのデータ項目も初期値から変化していない場合には、書き込み対象のバックアップデータはなくなるので、メモリ資源節約の観点から、フラッシュメモリ１２に対する書き込みを省略することが望ましい。
【００２９】
図４（ｂ）に示すように、プロセッサ１１は、書き込み対象のバックアップデータに対して、データ項目順位に従ってフラッシュメモリ１２におけるアドレスを付与する。すなわち、キーオン時間のバックアップデータを格納するアドレスを０番地に設定し、積算距離のバックアップデータを格納するアドレスを１番地に設定する。また、プロセッサ１１は、書き込み対象となるバックアップデータのアドレスに続けて、ＳＵＭ値及び有効印の２つのデータにアドレスを付与する。すなわち、ＳＵＭ値のデータを格納するアドレスを２番地に設定し、有効印のデータを格納するアドレスを３番地に設定する。ＳＵＭ値は、書き込み対象となるバックアップデータから算出されたチェックサムであり、有効印は、例えば「Ａ５Ａ５ｈ」等、対象データ列の終端を示す所定のコードである。
【００３０】
第１回のバックアップ処理において、プロセッサ１１は、キーオン時間、積算距離、ＳＵＭ値及び有効印の４つのデータをこの順番で、ブロックＢ１の０〜３番地にそれぞれ書き込んで格納する。このように、各回のバックアップ処理において、データ項目順位に従ってアドレスが設定された書き込み対象のバックアップデータとこれに続くアドレスが設定されたＳＵＭ値及び有効印のデータとを、対象データ列というものとする。
【００３１】
また、プロセッサ１１は、書き込まれる対象データ列の終端アドレスをフラッシュメモリ１２のブロックＢ１，Ｂ２における格納データの最終アドレスとして、管理情報格納領域であるブロックＢ３の所定アドレスに書き込んで格納する。最終アドレスは、例えば対象データ列のサイズと前回のバックアップ処理によりブロックＢ３に格納された最終アドレスとに基づいて特定可能である。図４（ｂ）では、第１回のバックアップ処理であるので、前回の最終アドレスを（−１）番地として、これに対象データ列のサイズ（４バイト）を加えることで、現在の最終アドレスすなわち有効印のアドレス（３番地）を特定できる。以下の書き込み態様において同様である。
【００３２】
図５は、第２回のバックアップ処理における書き込み態様の一例を示す。図５（ａ）に示すように、ＲＡＭ１３の一時格納データでは、キーオン時間が初期値「０」から「２」に変化し、積算距離が初期値「０」から「４」に変化している。その他のデータ項目については初期値から変化していない。したがって、図示の例では、一時格納データのうち、データ項目順位で１番目から２番目までのデータ項目のバックアップデータが書き込み対象となる。
【００３３】
また、図５（ｂ）に示すように、第１回のバックアップ処理で書き込まれた対象データ列（網掛け部参照、以下同様）の終端アドレス（３番地）が最終アドレスであり、この最終アドレスは上記のようにブロックＢ３に格納されている。したがって、第２回のバックアップ処理では、プロセッサ１１は、ブロックＢ３から読み出した最終アドレスの次のアドレス（４番地）を書き込み先頭アドレスとして、対象データ列をブロックＢ１の４〜７番地に書き込んで格納する。
【００３４】
図６は、第３回のバックアップ処理における書き込み態様の一例を示す。図６（ａ）に示すように、ＲＡＭ１３の一時格納データでは、キーオン時間が初期値「０」から「９」に変化し、積算距離が初期値「０」から「１１」に変化し、学習値２が初期値「５」から「６」に変化している。その他のデータ項目については初期値から変化していない。したがって、図示の例では、一時格納データのうち、データ項目順位で１番目から４番目までのデータ項目のバックアップデータが書き込み対象となる。なお、データ項目順位で３番目の学習値１のバックアップデータは初期値から変化していないが、書き込み対象に含まれる。対象データ列におけるバックアップデータのアドレス順がデータ項目順位を示しているので、仮に、学習値１のバックアップデータが書き込まれないと、プロセッサ１１が、学習値１のバックアップデータを省略している旨のメモリ管理情報が必要となる。このため、プロセッサ１１がバックアップデータを読み出す際の制御が複雑化するおそれがある。これを考慮して、初期値から変化していない学習値１についても書き込み対象としている。
【００３５】
また、図６（ｂ）に示すように、第２回のバックアップ処理で書き込まれた対象データ列の終端アドレス（７番地）が最終アドレスであり、この最終アドレスは上記のようにブロックＢ３に格納されている。したがって、第３回のバックアップ処理では、プロセッサ１１は、ブロックＢ３から読み出した最終アドレスの次のアドレス（８番地）を書き込み先頭アドレスとして、対象データ列をブロックＢ１の８〜１３番地に書き込んで格納する。
【００３６】
図７は、第４回のバックアップ処理における書き込み態様の一例を示す。図７（ａ）に示すように、ＲＡＭ１３の一時格納データでは、キーオン時間が初期値「０」から「１０」に変化し、積算距離が初期値「０」から「１１」に変化している。その他のデータ項目については初期値テーブルの初期値から変化していない。しかし、第４回のバックアップ処理では、データ項目順位で１番目から２番目までの２つのデータ項目ではなく、１番目から４番目までの４つのデータ項目のバックアップデータが書き込み対象となる。仮に、書き込み対象のバックアップデータを１番目及び２番目の２つのデータ項目とすると、第３回のバックアップ処理で４番目のデータ項目に初期値からの変化が発生したことを最新の対象データ列から認識することが困難となる。このため、図示の例では、書き込み対象のバックアップデータを、１番目から４番目までの４つのデータ項目としている。
【００３７】
また、図７（ｂ）に示すように、第３回のバックアップ処理で書き込まれた対象データ列の終端アドレス（１３番地）が最終アドレスであり、この最終アドレスは上記のようにブロックＢ３に格納されている。したがって、第４回のバックアップ処理では、プロセッサ１１は、ブロックＢ３から読み出した最終アドレスの次のアドレス（１４番地）を書き込み先頭アドレスとして、対象データ列をブロックＢ１の１４〜１９番地に書き込んで格納する。
【００３８】
図示を省略するが、プロセッサ１１は、最終アドレスを含むブロックに対象データ列を書き込める記憶領域（空き領域）がなくなったと判断した場合には、最も古い対象データ列が書き込まれたブロックをイレーズする。イレーズするブロックの順番は、ブロックの書き込み順に従って設定してもよい。そして、プロセッサ１１は、イレーズしたブロックの開始アドレスから対象データ列を書き込んでいく。すなわち、対象データ列の書き込みを行うブロック（書き込みブロック）を移行する。図２の例では、ブロックＢ１に対象データ列を書き込める空き領域がなくなった場合には、次のブロックＢ２をイレーズして、ブロックＢ２の開始アドレス（５０００番地）から、図４〜７と同様に対象データ列の書き込みを行う。なお、最終アドレスを含むブロックに対象データ列を書き込める記憶領域（空き領域）がなくなっても、全体が空き領域であるブロックがある場合が想定される。この場合には、ブロックのイレーズを省略して、全体が空き領域であるブロックを書き込みブロックとする。
【００３９】
ここで、本実施形態のバックアップ処理における書き込み規則の意義について理解を深めるため、図１７を参照して、従来のバックアップ処理における書き込み規則について説明する。図１７は、従来のバックアップ処理による書き込み態様の一例を示す。
【００４０】
図１７に示すように、従来のバックアップ処理では、全てのデータ項目のバックアップデータを含む一定サイズの対象データ列をフラッシュメモリ１２に毎回書き込んでいた。図示の例では、各回のバックアップ処理でブロックＢ１（Ｂ２）に書き込まれる対象データ列には、軽度異常１、軽度異常２、深刻異常１及び深刻異常２、キーオン時間、積算距離、補正値１、補正値２、学習値１、学習値２の全てのデータ項目が含まれている。一方、本実施形態では、データ更新頻度の降順に順位付けされた各データ項目の初期値に対して変化したデータ項目のうち最も下位のデータ項目順位までのバックアップデータがフラッシュメモリ１２のブロックＢ１（Ｂ２）に書き込まれる。このため、最初のバックアップ処理から全てのデータ項目についてバックアップデータを書き込む必要性がなくなるので、バックアップ処理１回あたりに書き込む対象データ列のサイズは、従来のバックアップ処理よりも小さくなる。これは、各ブロックの空き領域がなくなるまでに書き込める回数すなわち書き込み可能回数が、従来のバックアップ処理よりも増大することを意味する。したがって、本実施形態のバックアップ処理によれば、書き込みブロックの移行時におけるイレーズの頻度（書き込み可能回数の逆数）が従来のバックアップ処理と比較すると少なくなる。
【００４１】
次に、図８〜１０を参照して、図４〜７の書き込み規則を反映したバックアップ処理の具体例について説明する。
【００４２】
図８では、バックアップ処理を行う直前のフラッシュメモリ１２及びＲＡＭ１３におけるデータの格納状態が設定されている。ここで、バックアップ処理回数を正の整数ｍで示し、バックアップデータの総データ項目数を２以上の整数ｎで示し、データ項目順位を１からｎの整数ｋで示す。そして、第ｍ回のバックアップ処理における一時格納データのデータ項目順位ｋのバックアップデータをＤ（ｍ，ｋ）で示す。
【００４３】
フラッシュメモリ１２のブロックＢ１又はＢ２には、前回である第（ｍ−１）回のバックアップ処理によって書き込まれたバックアップデータとして、Ｄ（ｍ−１，１），Ｄ（ｍ−１，２），…，Ｄ（ｍ−１，ｋ），…，Ｄ（ｍ−１，ｋw（ｍ−１））が格納されている。変数ｋw（ｍ−１）は、１からｎまでの整数であり、前回のバックアップ処理によって書き込まれたバックアップデータのうち最も下位のデータ項目順位を示す前回書き込み順位である。ただし、バックアップ処理回数ｍの値が１である場合には、前回のバックアップデータが存在しないので、前回書き込み順位ｋw（０）を０とする。
【００４４】
また、フラッシュメモリ１２のブロックＢ４には、各データ項目におけるバックアップデータの初期値として、Ｄ（０，１），Ｄ（０，２），…，Ｄ（０，ｋ），…，Ｄ（０，ｎ）が格納されている。
【００４５】
ＲＡＭ１３には、第ｍ回のバックアップ処理を行う直前の一時格納データとして、Ｄ（ｍ，１），Ｄ（ｍ，２），…，Ｄ（ｍ，ｋ），…，Ｄ（ｍ，ｎ）が一時的に保持されている。一時格納データは、上記のように、フラッシュメモリ１２からＲＡＭ１３に読み出されたバックアップデータの初期値、Ｄ（０，１），Ｄ（０，２），…，Ｄ（０，ｋ），…，Ｄ（０，ｎ）から変化したデータ項目について変化後のデータに書き換えられたものである。そして、第ｍ回のバックアップ処理における書き込み順位がｋw（ｍ）に特定されると、１番目から書き込み順位ｋw（ｍ）までの一時格納データ、Ｄ（ｍ，１），Ｄ（ｍ，２），…，Ｄ（ｍ，ｋ），…，Ｄ（ｍ，ｋw（ｍ））が書き込み対象のバックアップデータとなる。
【００４６】
バックアップ処理回数ｍ及び書き込み順位ｋw（ｍ）の２つのメモリ管理情報は、各バックアップ処理において、フラッシュメモリ１２の管理情報格納領域であるブロックＢ３の所定アドレスに書き込まれて格納されている。
【００４７】
図９は、イグニッションスイッチ３０のオフ操作を契機として、プロセッサ１１がブロックＢ５の所定アドレスからアプリケーションプログラムを読み出すことで実行を開始するバックアップ処理の一例を示す。なお、バックアップ処理回数ｍの初期値、及び前回書き込み順位ｋw（ｍ）の初期値ｋw（０）はそれぞれ０に設定されているものとする。
【００４８】
ステップＳ１０１（図中では「Ｓ１０１」と略記する。以下同様。）では、プロセッサ１１は、フラッシュメモリ１２のブロックＢ３における所定アドレスからバックアップ処理回数ｍ、前回書き込み順位ｋw（ｍ）及び最終アドレスをＲＡＭ１３に読み出す。また、プロセッサ１１は、フラッシュメモリ１２のブロックＢ３における所定アドレスからバックアップデータの初期値Ｄ（０，０）〜Ｄ（０，ｎ）をＲＡＭ１３に読み出す。
【００４９】
ステップＳ１０２では、プロセッサ１１は、バックアップ処理回数ｍを１つインクリメントして、今回行うバックアップ処理の回数を決定する。これに伴い、前回のバックアップ処理における前回書き込み順位をｋw（ｍ）からｋw（ｍ−１）へ変更して記載する。したがって、ｋw（ｍ）は、今回である第ｍ回のバックアップ処理における書き込み順位を示すことになる。
【００５０】
ステップＳ１０３では、プロセッサ１１は、データ項目順位ｋ及び書き込み順位ｋw（ｍ）を前回書き込み順位ｋw（ｍ−１）の値に初期設定する。このように初期設定するのは、図７で示される書き込み規則に従って、バックアップデータの変化の有無にかかわらず、第ｍ回のバックアップ処理における書き込み順位ｋw（ｍ）を前回書き込み順位ｋw（ｍ−１）よりも上位の値としないからでる。
【００５１】
ステップＳ１０４では、プロセッサ１１は、データ項目順位ｋを１つインクリメントする。そして、ステップＳ１０５において、プロセッサ１１は、第ｍ回のバックアップ処理における一時格納データＤ（ｍ，ｋ）と初期値Ｄ（０，ｋ）とが不一致であるか否か、すなわち、一時格納データＤ（ｍ，ｋ）が初期値Ｄ（０，ｋ）から変化したか否かを判定する。
【００５２】
ステップＳ１０５において、プロセッサ１１は、一時格納データＤ（ｍ，ｋ）と初期値Ｄ（０，ｋ）とが不一致であると判定した場合には（ＹＥＳ）、処理をステップＳ１０６へ進めて、今回の書き込み順位ｋw（ｍ）を現在のデータ項目順位ｋの値に仮決めする。一方、プロセッサ１１は、一時格納データＤ（ｍ，ｋ）と初期値Ｄ（０，ｋ）とが一致すると判定した場合には（ＮＯ）、仮決めされた書き込み順位ｋw（ｍ）を変更しないようにステップＳ１０６を省略し、処理をステップＳ１０７へ進める。
【００５３】
ステップＳ１０７では、プロセッサ１１は、現在のデータ項目順位ｋが総データ項目数ｎの値に達したか否かを判定する。そして、プロセッサ１１は、現在のデータ項目順位ｋが総データ項目数ｎの値に達したと判定した場合には（ＹＥＳ）、処理をステップＳ１０８へ進める。一方、プロセッサ１１は、現在のデータ項目順位ｋが総データ項目数ｎの値に達していないと判定した場合には（ＮＯ）、データ項目順位ｋを１つインクリメントして一時格納データと初期値とを引き続き比較するべく、処理をステップＳ１０４へ戻す。したがって、現在のデータ項目順位ｋが総データ項目数ｎの値に達するまで、ステップＳ１０４〜ステップＳ１０７が繰り返される。
【００５４】
ステップＳ１０４〜ステップＳ１０７を繰り返すと、一時格納データＤ（ｍ，ｋ）と初期値Ｄ（０，ｋ）とが不一致であると判定されるたびに、書き込み順位ｋw（ｍ）の値が前回書き込み順位ｋw（ｍ−１）の値から下位に向けて繰り下がる。そして、現在のデータ項目順位ｋが総データ項目数ｎの値に達していれば、前回書き込み順位ｋw（ｍ−１）よりも下位の全てのデータ項目についてバックアップデータの変化を確認していることになる。これにより、今回である第ｍ回のバックアップ処理における書き込み順位ｋw（ｍ）が特定されることになる。
【００５５】
ステップＳ１０８では、プロセッサ１１は、現在の最終アドレスを含むブロックに、書き込み順位ｋw（ｍ）に相当するデータ項目数のバックアップデータ並びにＳＵＭ値及び有効印からなる対象データ列を書き込める空き領域があるか否かを判定する。
【００５６】
第ｍ回のバックアップ処理では、書き込み順位ｋw（ｍ）に相当するデータ項目数のバックアップデータ並びにＳＵＭ値及び有効印からなる対象データ列が書き込まれるので、（ｋw（ｍ）＋２）個のアドレスを消費する。したがって、プロセッサ１１は、ブロックＢ３の所定アドレスから読み出した現在の最終アドレスを含むブロックに（ｋw（ｍ）＋２）個のアドレスに相当する空き領域があるか否かを判定する。
【００５７】
ステップＳ１０８において、プロセッサ１１は、フラッシュメモリ１２のブロックに空き領域があると判定した場合には（ＹＥＳ）、処理をステップＳ１０９へ進める。一方、プロセッサ１１は、フラッシュメモリ１２のブロックに空き領域がないと判定した場合には（ＮＯ）、処理をステップＳ１１１へ進める。
【００５８】
ステップＳ１０９では、プロセッサ１１は、現在の最終アドレスを含むブロックにおいて、バックアップデータＤ（ｍ，０）〜Ｄ（ｍ，ｋw（ｍ））並びにＳＵＭ値及び有効印からなる対象データ列を書き込む。具体的には、プロセッサ１１は、最終アドレスを含むブロックに格納されている全データを一時的にＲＡＭ１３に退避させ、当該ブロックをイレーズ（消去）する。そして、プロセッサ１１は、イレーズしたブロックにおいて、退避した全データをイレーズ前と同一のアドレスに書き込むとともに、第ｍ回のバックアップ処理における対象データ列を、ブロックＢ３から読み出された最終アドレスの次のアドレスを書き込み先頭アドレスとして書き込む。
【００５９】
なお、フラッシュメモリ１２がＮＡＮＤ型である場合には、各ブロックは、読み出し／書き込みが可能な単位（ページ）で所定バイトずつ区分される。しかし、対象データ列のデータサイズによっては、最終アドレスを含むページ内に対象データ列を書き込めない場合が生じ得る。この場合には、対象データ列の書き込み先頭アドレスを、最終アドレスを含むページの次のページの開始アドレスにすればよい。ただし、各ページの格納可能データサイズは、全てのデータ項目を含む対象データ列のデータサイズ以上に設定されることはいうまでもない。
【００６０】
ステップＳ１１０では、プロセッサ１１は、現在のバックアップ処理回数ｍ、書き込み順位ｋw（ｍ）及び最終アドレスの各値をそれぞれ、管理情報格納領域であるブロックＢ３の所定アドレスに書き込む。最終アドレスは、ブロックＢ３から読み出された最終アドレスに、今回（第ｍ回）のバックアップ処理による対象データ列のサイズを加えることで得られる。ステップＳ１１０を実行してバックアップ処理が終了すると、プロセッサ１１は、電源リレー６０に出力している制御信号ＳＲを停止して、ＥＣＵ１０への電源供給を遮断（セルフシャット）する。
【００６１】
ステップＳ１１１では、プロセッサ１１は、現在の最終アドレスを含むブロック以外の他のブロックのうち、最も古い対象データ列が書き込まれたブロックをイレーズして書き込みブロックとする。現在の最終アドレスを含むブロック以外の他のブロックに全体が空き領域となっているものがあれば、イレーズを省略して、当該他のブロックを書き込みブロックとしてもよい。例えば、ブロックＢ１に空き領域がないと判定した場合、ブロックＢ２をイレーズするか、あるいは、ブロックＢ２の全体が空き領域である場合にはブロックＢ２のイレーズを省略して、書き込みブロックとすることができる。
【００６２】
ステップＳ１１２では、プロセッサ１１は、移行後の書き込みブロックにおいて、ステップＳ１０９と同様にして、バックアップデータＤ（ｍ，０）〜Ｄ（ｍ，ｋw（ｍ））並びにＳＵＭ値及び有効印からなる対象データ列を書き込む。
【００６３】
ステップＳ１１３では、プロセッサ１１は、ステップＳ１１０と同様にして、現在のバックアップ処理回数ｍ、書き込み順位ｋw（ｍ）及び最終アドレスをそれぞれ、管理情報格納領域であるブロックＢ３の所定アドレスに書き込む。ステップＳ１１３を実行してバックアップ処理が終了すると、プロセッサ１１は、電源リレー６０に出力している制御信号ＳＲを停止して、ＥＣＵ１０への電源供給を遮断する。
【００６４】
このような第１実施形態に係る自動車用電子制御装置によれば、データ更新頻度の降順に順位付けされたデータ項目について初期値を予め設定している。そして、現在又は過去のバックアップ処理において初期値から変化したデータ項目のうち最も下位のデータ項目順位までのバックアップデータをフラッシュメモリ１２のブロックに書き込んでいる。このため、最初のバックアップ処理から必ずしも全てのデータ項目についてバックアップデータを書き込む必要性がなくなるので、バックアップ処理１回あたりに書き込む対象データ列のサイズは、従来のバックアップ処理よりも小さくなる。これは、フラッシュメモリ１２の各ブロックにおける書き込み可能回数が、従来のバックアップ処理よりも増大することを意味する。したがって、書き込みブロックの移行時におけるイレーズの頻度（書き込み可能回数の逆数）が従来のバックアップ処理と比較すると少なくなる。
【００６５】
フラッシュメモリ１２にはメモリセルの劣化を考慮してイレーズ回数に制限が設けられているが、バックアップ処理回数が同一であれば、イレーズの頻度が少なくなることで、イレーズ回数を抑制することができる。したがって、第１実施形態に係る自動車用電子制御装置によれば、フラッシュメモリ１２の長寿命化を図ることが可能となる。
【００６６】
また、第１実施形態に係る自動車用電子制御装置によれば、バックアップ処理１回あたりに書き込む対象データ列のサイズは、従来のバックアップ処理よりも小さくなるので、書き込み時間を短縮することが可能となる。これにより、バックアップ処理に要する電力を節約できるだけでなく、バックアップ処理中におけるイグニッションスイッチ３０のオン操作による書き込みの中断（失敗）を発生し難くすることができる。
【００６７】
［第２実施形態］
次に、第２実施形態に係る自動車用電子制御装置について説明する。なお、第２実施形態に係る自動車用電子制御装置は第１実施形態に係る自動車用電子制御装置と同様の構成を備え、バックアップ処理の内容及びこれによる書き込み態様のみが異なる。このため、第１実施形態と同一構成については、同一符号を付すことでその説明を省略又は簡潔にする。
【００６８】
図１０〜１３を参照して、第２実施形態に係るバックアップ処理におけるバックアップデータの書き込み規則を説明する。図１０〜１３の各図における（ａ）は、バックアップデータの初期値に対する変化状態を示し、図１０〜１３の各図における（ｂ）は、フラッシュメモリ１２におけるバックアップデータの格納状態を示す。
【００６９】
図１０は、第ｘ回（ｘは正の整数）のバックアップ処理における書き込み態様の一例を示す。ここで、図１０（ｂ）に示すように、第（ｘ−１）回のバックアップ処理では、キーオン時間、積算時間、学習値１、学習値２、ＳＵＭ値及び有効印の６つのデータからなる対象データ列がブロックＢ１の４９９４〜４９９９番地に書き込まれて格納されているものとする。
【００７０】
図１０（ａ）に示すように、ＲＡＭ１３の一時格納データでは、キーオン時間が初期値「０」から「１２」に変化し、積算距離が初期値「０」から「１５」に変化し、学習値１が初期値「５」から「６」に変化し、学習値２が初期値「５」から「６」に変化している。その他のデータ項目については初期値から変化していない。したがって、図示の例では、第１実施形態と同様に、一時格納データのうち、データ項目順位で１番目から４番目までのデータ項目のバックアップデータが書き込み対象となる。また、図１０（ｂ）に示すように、第（ｘ−１）回のバックアップ処理で書き込まれた対象データ列の終端アドレス（４９９９番地）が最終アドレスであり、第ｘ回で書き込み対象となるバックアップデータを書き込める空き領域がブロックＢ１にない。このため、プロセッサ１１は、第１実施形態と同様に、最も古い対象データ列が書き込まれたブロックＢ２をイレーズして書き込みブロックとする。全体が空き領域であるブロックがある場合には、ブロックのイレーズを省略して、全体が空き領域であるブロックを書き込みブロックとする。そして、プロセッサ１１は、書き込みブロック移行後のブロックＢ２の開始アドレス（５０００番地）を書き込み先頭アドレスとして、対象データ列をブロックＢ２の５０００〜５００５番地に書き込んで格納する。
【００７１】
図１１は、第（ｘ＋１）回のバックアップ処理における書き込み態様の一例を示す。第１実施形態では、書き込みブロックの移行後において、ＲＡＭ１３の一時格納データと比較する比較基準はブロックＢ３に予め格納された初期値テーブルである。これに対し、第２実施形態では、書き込みブロックの移行後において、初期値テーブルを修正した修正初期値テーブルを比較基準として用いる。修正初期値テーブルでは、図１１（ａ）に示すように、書き込みブロックを移行した第ｘ回のバックアップ処理において書き込み対象となった１〜４番目のデータ項目については、初期値テーブルの初期値に代えて修正初期値を用いる。修正初期値は、第ｘ回のバックアップ処理においてフラッシュメモリ１２に書き込んだバックアップデータ（図中の太枠ＴＡ内）である。一方、残りの５〜１０番目のデータ項目については、ブロックＢ３に予め格納された初期値テーブルの初期値（図中の太枠ＴＢ内）をそのまま用いる。
【００７２】
図１１（ａ）に示すように、ＲＡＭ１３の一時格納データでは、キーオン時間が修正初期値「１２」から「１３」に変化し、その他のデータ項目については修正初期値テーブルの修正初期値及び初期値から変化していない。したがって、図示の例では、一時格納データのうち、データ項目順位で１番目のデータ項目のバックアップデータのみが書き込み対象となる。また、図１１（ｂ）に示すように、第ｘ回のバックアップ処理で書き込まれた対象データ列の終端アドレス（５００５番地）が最終アドレスであり、この最終アドレスは上記のようにブロックＢ３に格納されている。したがって、第（ｘ＋１）回のバックアップ処理では、プロセッサ１１は、ブロックＢ３から読み出した最終アドレスの次のアドレス（５００６番地）を書き込み先頭アドレスとして、対象データ列をブロックＢ２の５００６〜５００８番地に書き込んで格納する。
【００７３】
図１２は、第（ｘ＋２）回のバックアップ処理における書き込み態様の一例を示す。図１２（ａ）に示すように、ＲＡＭ１３の一時格納データでは、キーオン時間が修正初期値「１２」から「１４」に変化し、積算距離が修正初期値「１５」から「１６」に変化している。また、学習値１が修正初期値「６」から「７」に変化し、補正値１が初期値「０」から「２」に変化し、補正値２が初期値「０」から「１」に変化している。その他のデータ項目については修正初期値テーブルの修正初期値及び初期値から変化していない。したがって、図示の例では、一時格納データのうち、データ項目順位で１番目から６番目までのデータ項目のバックアップデータが書き込み対象となる。また、図１２（ｂ）に示すように、第（ｘ＋１）回のバックアップ処理で書き込まれた対象データ列の終端アドレス（５００８番地）が最終アドレスあり、この最終アドレスは上記のようにブロックＢ３に格納されている。したがって、第（ｘ＋２）回のバックアップ処理では、プロセッサ１１は、ブロックＢ３から読み出した最終アドレスの次のアドレス（５００９番地）を書き込み先頭アドレスとして、対象データ列をブロックＢ２の５００９〜５０１６番地に書き込んで格納する。
【００７４】
図１３は、第（ｘ＋３）回のバックアップ処理における書き込み態様の一例を示す。図１３（ａ）に示すように、ＲＡＭ１３の一時格納データでは、キーオン時間が修正初期値「１２」から「１５」に変化し、積算距離が修正初期値「１５」から「１７」に変化し、学習値１が修正初期値「６」から「７」に変化している。その他のデータ項目については修正初期値テーブルの修正初期値及び初期値から変化していない。第（ｘ＋３）回のバックアップ処理では、第１実施形態と同様の理由により、データ項目順位で１番目から３番目までではなく、第（ｘ＋２）回のバックアップ処理で書き込んだ１番目から６番目までのデータ項目のバックアップデータが書き込み対象となる。また、図１３（ｂ）に示すように、第（ｘ＋２）回のバックアップ処理で書き込まれた対象データ列の終端アドレス（５０１６番地）が最終アドレスであり、この最終アドレスは上記のようにブロックＢ３に格納されている。したがって、第（ｘ＋３）回のバックアップ処理では、プロセッサ１１は、ブロックＢ３から読み出した最終アドレスの次のアドレス（５０１７番地）を書き込み先頭アドレスとして、対象データ列をブロックＢ２の５０１７〜５０２４番地に書き込んで格納する。
【００７５】
次に、図１４〜１６を参照して、図１０〜１３の書き込み規則を反映したバックアップ処理の具体例について説明する。
【００７６】
図１４では、バックアップ処理を行う直前のフラッシュメモリ１２及びＲＡＭ１３におけるデータの格納状態が設定されている。図８と同様に、フラッシュメモリ１２のブロックＢ１又はＢ２には、前回である第（ｍ−１）回のバックアップ処理によって書き込まれたバックアップデータとして、Ｄ（ｍ−１，１），Ｄ（ｍ−１，２），…，Ｄ（ｍ−１，ｋ），…，Ｄ（ｍ−１，ｋw（ｍ−１））が格納されている。また、フラッシュメモリ１２のブロックＢ４には、バックアップデータの初期値として、Ｄ（０，１），Ｄ（０，２）…Ｄ（０，ｋ）…Ｄ（０，ｎ）が格納されている。さらに、ＲＡＭ１３には、第ｍ回のバックアップ処理を行う直前の一時格納データとして、Ｄ（ｍ，１），Ｄ（ｍ，２）…Ｄ（ｍ，ｋ）…Ｄ（ｍ，ｎ）が一時的に保持されている。そして、第ｍ回のバックアップ処理における書き込み順位がｋw（ｍ）に特定されると、１番目から書き込み順位ｋw（ｍ）までの一時格納データ、Ｄ（ｍ，１），Ｄ（ｍ，２），…，Ｄ（ｍ，ｋ），…，Ｄ（ｍ，ｋw（ｍ））が書き込み対象のバックアップデータとなる。
【００７７】
ここで、書き込みブロックを移行したときのバックアップ処理回数ｍを移行時回数Ｍとし、移行時の書き込み順位ｋw（ｍ）を移行時書き込み順位Ｋrefとする。したがって、第Ｍ回のバックアップ処理で書き込まれたバックアップデータは、Ｄ（Ｍ，１），Ｄ（Ｍ，２），…，Ｄ（Ｍ，ｋ），…，Ｄ（Ｍ，Ｋref）で示され、これらが修正初期値テーブルにおける修正初期値となる。また、移行時書き込み順位Ｋrefが総データ項目数ｎの値未満であれば、一時格納データのうち移行時書き込み順位Ｋrefより下位のデータ項目順位ｋについては、初期値テーブルの初期値Ｄ（０，ｋ）が修正初期値テーブルでそのまま用いられる。なお、第Ｍ回のバックアップ処理で書き込まれたバックアップデータは、図１０における第ｘ回のバックアップ処理で書き込み対象となったバックアップデータに相当する。
【００７８】
図１５は、イグニッションスイッチ３０のオフ操作を契機として、プロセッサ１１がブロックＢ５の所定アドレスからアプリケーションプログラムを読み出すことで実行を開始するバックアップ処理の一例を示す。なお、バックアップ処理回数ｍ、前回書き込み順位ｋw（ｍ）、移行時回数Ｍ及び後述の移行時フラグｐは、メモリ管理情報として管理情報格納領域であるブロックＢ３の所定アドレスに格納され、ぞれぞれの初期値が０に設定されているものとする。また、移行時書き込み順位Ｋrefも、メモリ管理情報として管理情報格納領域であるブロックＢ３の所定アドレスに格納され、その初期値が総データ項目数ｎの値に設定されているものとする。
【００７９】
ステップＳ２０１では、プロセッサ１１は、フラッシュメモリ１２のブロックＢ３における所定アドレスから、移行時フラグｐ、バックアップ処理回数ｍ、前回書き込み順位ｋw（ｍ）、移行時回数Ｍ、移行時書き込み順位Ｋref及び最終アドレスをＲＡＭ１３に読み出す。
【００８０】
また、プロセッサ１１は、書き込みブロックを移行したときのバックアップ処理で書き込まれたバックアップデータ、Ｄ（Ｍ，０）〜Ｄ（Ｍ，Ｋref）をＲＡＭ１３に読み出す。移行時回数Ｍが０でない場合には既に書き込みブロックを移行していることになる。このため、プロセッサ１１は、現在の最終アドレスを含むブロックの開始アドレスを読み出し、これを先頭アドレスとして、移行時書き込み順位Ｋrefに相当するアドレス数のバックアップデータをＲＡＭ１３に読み出す。一方、プロセッサ１１がバックアップ処理を最初に実行するときには、Ｍ＝０、Ｋref＝ｎであるので、初期値テーブルの初期値、Ｄ（０，０）〜Ｄ（０，ｎ）をＲＡＭ１３に読み出す。
【００８１】
ステップＳ２０２では、プロセッサ１１は、バックアップ処理回数ｍを１つインクリメントして、今回行うバックアップ処理の回数を決定する。これに伴い、前回のバックアップ処理における書き込み順位をｋw（ｍ）からｋw（ｍ−１）へ変更して記載する。したがって、ｋw（ｍ）は、今回である第ｍ回のバックアップ処理における書き込み順位を示すことになる。
【００８２】
ステップＳ２０３では、プロセッサ１１は、データ項目順位ｋを１に初期設定し、書き込み順位ｋw（ｍ）を０に初期設定する。ステップＳ２０４では、プロセッサ１１は、今回の書き込み順位ｋw（ｍ）を特定する。今回の書き込み順位ｋw（ｍ）の特定に関する処理の詳細ついては後述する。
【００８３】
ステップＳ２０５では、プロセッサ１１は、移行時フラグｐが０であるか否かを判定する。移行時フラグｐの値は、前回のバックアップ処理が、書き込みブロックを移行したときのバックアップ処理であるか否かを示す。移行時フラグｐの値は、前回のバックアップ処理が書き込みブロックを移行したときのバックアップ処理である場合には例えば１に設定され、そうでない場合には例えば０に設定される。そして、プロセッサ１１は、移行時フラグｐが０であると判定した場合には（ＹＥＳ）、前回のバックアップ処理で書き込みブロックを移行していないものと判断して、処理をステップＳ２０６へ進める。一方、プロセッサ１１は、移行時フラグｐが１であると判定した場合には（ＮＯ）、前回のバックアップ処理で書き込みブロックを移行したものと判断し、ステップＳ２０６，２０７を省略して、処理をステップＳ２０８へ進める。
【００８４】
ステップＳ２０６では、プロセッサ１１は、ステップＳ２０４で特定した書き込み順位ｋw（ｍ）が前回書き込み順位ｋw（ｍ−１）未満であるか否かを判定する。すなわち、プロセッサ１１は、ステップＳ２０４で特定した書き込み順位ｋw（ｍ）が前回書き込み順位ｋw（ｍ−１）よりも上位であるか否かを判定する。そして、プロセッサ１１は、ステップＳ２０４で特定した書き込み順位ｋw（ｍ）が前回書き込み順位ｋw（ｍ−１）未満であると判定した場合には（ＹＥＳ）、処理をステップＳ２０７へ進める。ステップＳ２０７では、プロセッサ１１は、今回の書き込み順位ｋw（ｍ）を強制的に前回書き込み順位ｋw（ｍ−１）に補正する。一方、プロセッサ１１は、ステップＳ２０４で特定した書き込み順位ｋw（ｍ）が前回書き込み順位ｋw（ｍ−１）以上であると判定した場合には（ＮＯ）、ステップＳ２０７を省略して、処理をステップＳ２０８へ進める。ステップＳ２０５，Ｓ２０６の判定を行うのは、前回のバックアップ処理で書き込みブロックを移行していない場合には、図１３で示される書き込み規則に従って、第ｍ回のバックアップ処理における書き込み順位ｋw（ｍ）を前回書き込み順位ｋw（ｍ−１）よりも上位の値としないためである。
【００８５】
ステップＳ２０８では、プロセッサ１１は、ステップＳ１０８と同様に、現在の最終アドレスを含むブロックに、対象データ列を書き込める空き領域があるか否かを判定する。そして、プロセッサ１１は、フラッシュメモリ１２のブロックに空き領域があると判定した場合には（ＹＥＳ）、処理をステップＳ２０９へ進めて、移行時フラグｐが１である場合にはこれを０に設定する。一方、プロセッサ１１は、フラッシュメモリ１２のブロックに空き領域がないと判定した場合には（ＮＯ）、処理をステップＳ２１２へ進めて、移行時フラグｐが０である場合にはこれを１に設定する。
【００８６】
ステップＳ２１０では、プロセッサ１１は、ステップＳ１０９と同様に、現在の最終アドレスを含むブロックにおいて、バックアップデータＤ（ｍ，０）〜Ｄ（ｍ，ｋw（ｍ））並びにＳＵＭ値及び有効印からなる対象データ列を書き込む。
【００８７】
ステップＳ２１１では、プロセッサ１１は、ステップＳ１１０と同様に、移行時フラグｐ，現在のバックアップ処理回数ｍ、書き込み順位ｋw（ｍ）及び最終アドレスの各値をそれぞれ、管理情報格納領域であるブロックＢ３の所定アドレスに書き込む。ステップＳ２１１を実行してバックアップ処理が終了すると、プロセッサ１１は、電源リレー６０に出力している制御信号ＳＲを停止して、ＥＣＵ１０への電源供給を遮断する。
【００８８】
ステップＳ２１３では、プロセッサ１１は、移行時回数Ｍを現在のバックアップ処理回数ｍの値に設定するとともに、移行時書き込み順位Ｋrefを第ｍ回のバックアップ処理における書き込み順位ｋw（ｍ）の値に設定する。
【００８９】
ステップＳ２１４では、プロセッサ１１は、ステップＳ１１１と同様に、現在の最終アドレスを含むブロック以外の他のブロックのうち、最も古い対象データ列が書き込まれたブロックをイレーズする。
【００９０】
ステップＳ２１５では、プロセッサ１１は、移行後の書き込みブロックにおいて、ステップＳ１１２と同様にして、バックアップデータＤ（ｍ，０）〜Ｄ（ｍ，ｋw（ｍ））並びにＳＵＭ値及び有効印からなる対象データ列を書き込む。
【００９１】
ステップＳ２１６では、プロセッサ１１は、ステップＳ１１３と同様にして、移行時フラグｐ，現在のバックアップ処理回数ｍ、移行時回数Ｍ、移行時書き込み順位Ｋref及び最終アドレスの各値をそれぞれ、管理情報格納領域であるブロックＢ３の所定アドレスに書き込む。ステップＳ２１６を実行してバックアップ処理が終了すると、プロセッサ１１は、電源リレー６０に出力している制御信号ＳＲを停止して、ＥＣＵ１０への電源供給を遮断する。
【００９２】
図１６は、図１５のバックアップ処理のうち書き込み順位ｋw（ｍ）の特定に関する処理についてのサブルーチンを示す。
【００９３】
ステップＳ３０１では、プロセッサ１１は、第ｍ回のバックアップ処理における一時格納データＤ（ｍ，ｋ）と修正初期値Ｄ（Ｍ，ｋ）とが不一致であるか否か、すなわち、一時格納データＤ（ｍ，ｋ）が修正初期値Ｄ（Ｍ，ｋ）から変化したか否かを判定する。そして、プロセッサ１１は、一時格納データＤ（ｍ，ｋ）と修正初期値Ｄ（Ｍ，ｋ）とが不一致であると判定した場合には（ＹＥＳ）、処理をステップＳ３０２へ進めて、今回の書き込み順位ｋw（ｍ）を現在のデータ項目順位ｋの値に仮決めする。一方、プロセッサ１１は、一時格納データＤ（ｍ，ｋ）と修正初期値Ｄ（Ｍ，ｋ）とが一致すると判定した場合には（ＮＯ）、初期設定又は仮決めした書き込み順位ｋw（ｍ）を変更しないようにステップＳ３０２を省略し、処理をステップＳ３０３へ進める。
【００９４】
ステップＳ３０３において、プロセッサ１１は、現在のデータ項目順位ｋが移行時書き込み順位Ｋrefの値に達したと判定した場合には（ＹＥＳ）、処理をステップＳ３０５へ進める。一方、プロセッサ１１は、現在のデータ項目順位ｋが移行時書き込み順位Ｋrefの値に達していないと判定した場合には（ＮＯ）、データ項目順位ｋを１つインクリメントして一時格納データと修正初期値とを引き続き比較するべく、処理をステップＳ３０４へ進める。したがって、現在のデータ項目順位ｋが移行時書き込み順位Ｋrefの値に達するまで、ステップＳ３０１〜ステップＳ３０４が繰り返される。
【００９５】
ステップＳ３０５において、プロセッサ１１は、移行時書き込み順位Ｋrefが総データ項目数ｎの値未満であると判定した場合には（ＹＥＳ）、一時格納データと初期値とを比較すべく、処理をステップＳ３０６へ進めて、データ項目順位ｋを移行時書き込み順位Ｋrefの値から１つインクリメントする。一方、プロセッサ１１は、移行時書き込み順位Ｋrefが総データ項目数ｎであると判定した場合には（ＮＯ）、一時格納データと比較する初期値がないので、ステップＳ３０６〜Ｓ３１０を省略して、本サブルーチンを終了する。これにより、今回の書き込み順位ｋw（ｍ）は、ステップＳ３０２で最後に仮決めした値、あるいはステップＳ３０２を実行していない場合には、ステップＳ２０３で初期設定した値として特定される。
【００９６】
ステップＳ３０７では、プロセッサ１１は、移行時書き込み順位Ｋrefより下位のデータ項目順位ｋについての初期値Ｄ（０，ｋ）を読み出す。ステップＳ３０８では、プロセッサ１１は、移行時書き込み順位Ｋrefより下位のデータ項目順位ｋについて、第ｍ回のバックアップ処理における一時格納データＤ（ｍ，ｋ）と初期値Ｄ（０，ｋ）とが不一致であるか否かを判定する。そして、プロセッサ１１は、一時格納データＤ（ｍ，ｋ）と初期値Ｄ（０，ｋ）とが不一致であると判定した場合には（ＹＥＳ）、処理をステップＳ３０９へ進めて、今回の書き込み順位ｋw（ｍ）を現在のデータ項目順位ｋの値に仮決めする。一方、プロセッサ１１は、一時格納データＤ（ｍ，ｋ）と初期値Ｄ（０，ｋ）とが一致すると判定した場合には（ＮＯ）、初期設定又は仮決めした書き込み順位ｋw（ｍ）を変更しないようにステップＳ３０９を省略し、処理をステップＳ３１０へ進める。
【００９７】
そして、ステップＳ３１０において、プロセッサ１１は、現在のデータ項目順位ｋが総データ項目数ｎの値に達したと判定した場合には（ＹＥＳ）、一時格納データと比較する初期値がないので、本サブルーチンを終了する。これにより、書き込み順位ｋw（ｍ）は、ステップＳ３０９で最後に仮決めした値か、ステップＳ３０９を実行していない場合にはステップＳ３０２で最後に仮決めした値か、またはステップＳ３０２を実行していない場合には、ステップＳ２０３で初期設定した値として特定される。一方、プロセッサ１１は、現在のデータ項目順位ｋが総データ項目数ｎの値に達していないと判定した場合には（ＮＯ）、データ項目順位ｋを１つインクリメントして一時格納データと初期値とを引き続き比較するべく、処理をステップＳ３０６へ戻す。したがって、現在のデータ項目順位ｋが総データ項目数ｎの値に達するまで、ステップＳ３０６〜ステップＳ３１０が繰り返される。
【００９８】
このような第２実施形態に係る自動車用電子制御装置によれば、書き込みブロックが移行するたびに、初期値テーブルを修正して修正初期値テーブルとしている。そして、移行後の書き込みブロックにおけるバックアップ処理では、修正初期値テーブルを一時格納データとの比較基準として用いている。これにより、移行後の書き込みブロックでは、対象データ列のサイズを減少させ得る。これは、書き込みブロックが移行しても初期値テーブルのみを比較基準として用いる第１実施形態において、移行後の書き込みブロックにおける対象データ列のサイズが増大はしても減少はしないことと対照的である。
【００９９】
したがって、第２実施形態に係る自動車用電子制御装置によれば、第１実施形態と比較すると、バックアップ処理１回あたりに書き込む対象データ列の平均サイズを小さくすることができる。このため、書き込みブロックの移行時におけるイレーズの頻度を、従来のみならず、第１実施形態と比較しても少なくすることが可能となる。これにより、第１実施形態以上に、バックアップ処理における書き込み時間の短縮化、及びフラッシュメモリ１２の長寿命化を図ることが可能となる。
【０１００】
なお、第１及び第２実施形態において、バックアップ処理回数ｍ、書き込み順位ｋw（ｍ）、移行時回数Ｍ及び移行時フラグｐ及び移行時書き込み順位Ｋref等のメモリ管理情報はバックアップデータ格納領域とは別のブロックに格納されていた。これに代えて、メモリ管理情報を対象データ列中に含めてバックアップデータ格納領域に格納してもよい。例えば、バックアップデータとＳＵＭ値との間において、バックアップ処理回数ｍ、書き込み順位ｋw（ｍ）、移行時回数Ｍ及び移行時フラグｐ及び移行時書き込み順位Ｋrefの順でアドレスを付与してバックアップデータ格納領域に格納してもよい。
【０１０１】
このようにメモリ管理情報を対象データ列中に含めてバックアップデータ格納領域に格納することで、バックアップ処理のたびに管理情報格納領域であるブロックＢ３に最終アドレスを記憶させる必要がなくなる。例えば、フラッシュメモリ１２のバックアップデータ格納領域であるブロックＢ１，Ｂ２の格納データをアドレスと関連付けて全てＲＡＭ１３に読み出して、各ブロックにおいて、最も大きいアドレスの有効印を特定する。次に、各ブロックにおいて特定された有効印を含む対象データ列の中で、バックアップ処理回数ｍが最も大きい対象データ列を特定する。同一の対象データ列において、バックアップ処理回数ｍは、上記のように終端アドレスから所定位置のアドレスにあるので、バックアップ処理回数ｍの識別が可能である。そして、バックアップ処理回数ｍが最も大きい対象データ列に含まれる有効印のアドレスを最終アドレスと特定できる。したがって、管理情報格納領域であるブロックＢ３の所定アドレスに繰り返しメモリ管理情報を書き込む必要がなくなるので、ブロックＢ３のイレーズ頻度が低下して、フラッシュメモリ１２の長寿命化を図ることができる。なお、第１及び第２実施形態では、バックアップ処理のたびに管理情報格納領域であるブロックＢ３に最終アドレスを記憶させているので、有効印を対象データ列に含めなくてもよい。
【０１０２】
メモリ管理情報を対象データ列中に含めてバックアップデータ格納領域に格納する場合には、各対象データ列において、有効印を、対象データ列のデータサイズ（バイト数）に代えてもよい。このように有効印を用いなくても、最終アドレスを特定できる。例えば、フラッシュメモリ１２のバックアップデータ格納領域であるブロックＢ１，Ｂ２の格納データをアドレスと関連付けて全てＲＡＭ１３に読み出して、各ブロックにおいて、格納データの末尾アドレスであるブロックデータ末尾アドレスを特定する。ブロックデータ末尾アドレスは、それよりも後のアドレスが空き領域となるアドレスとして特定可能である。次に、各ブロックにおいて特定されたブロックデータ末尾アドレスを終端アドレスとする対象データ列の中で、バックアップ処理回数ｍが最も大きい対象データ列を特定する。そして、バックアップ処理回数ｍが最も大きい対象データ列の終端アドレスを最終アドレスと特定できる。
【０１０３】
上記実施形態で説明した各技術的思想は、矛盾が生じない限りにおいて、適宜組み合わせて使用することができる。また、上記実施形態を参照して本発明の内容を具体的に説明したが、本発明の基本的な技術思想及び教示に基づいて、当業者であれば、以下のように種々の変形態様を採り得ることは自明である。例えば、フラッシュメモリ１２のブロック数を２つとしたが３つ以上であってもよく、バックアップデータ等は１バイトでなく２バイト以上であってもよい。
【符号の説明】
【０１０４】
１０…ＥＣＵ（自動車用電子制御装置）、１１…プロセッサ、１２…フラッシュメモリ（不揮発性メモリ）、１３…ＲＡＭ（揮発性メモリ）、３０…イグニッションスイッチ、Ｂ１〜Ｂ５…ブロック、ｎ…総データ項目数、Ｄ（０，１）〜Ｄ（０，ｎ）…初期値、ｍ…バックアップ処理回数、Ｄ（ｍ，１）〜Ｄ（ｍ，ｎ）…一時格納データ、ｋw（ｍ）…書き込み順位、Ｄ（ｍ，１）〜Ｄ（ｍ，ｋw（ｍ））…書き込み対象データ、Ｍ…移行時回数、Ｋref…移行時書き込み順位、Ｄ（Ｍ，１）〜Ｄ（Ｍ，Ｋref）…修正初期値
【図１】
2020077192.tif 000003
【図２】
2020077192.tif 000004
【図３】
2020077192.tif 000005
【図４】
2020077192.tif 000006
【図５】
2020077192.tif 000007
【図６】
2020077192.tif 000008
【図７】
2020077192.tif 000009
【図８】
2020077192.tif 000010
【図９】
2020077192.tif 000011
【図１０】
2020077192.tif 000012
【図１１】
2020077192.tif 000013
【図１２】
2020077192.tif 000014
【図１３】
2020077192.tif 000015
【図１４】
2020077192.tif 000016
【図１５】
2020077192.tif 000017
【図１６】
2020077192.tif 000018
【図１７】
2020077192.tif 000019