(57)【要約】【課題】ＲＡＭから不揮発性の記憶部にデータを退避させ該記憶部からＲＡＭにデータを復帰させる電子制御装置において、データ破壊に対する復旧性能を確保しながらも、不揮発性の記憶部の必要記憶容量とデータ復帰のための処理負荷とを低減する。【解決手段】ＥＣＵ１１では、ＣＰＵ３１が、動作期間中にデータ退避実施タイミングが到来すると、ＲＡＭ３５内のデータ群と、そのデータ群に対して計算したチェックサムとを、不揮発性メモリ３７における２つのブロックの各々に書き込む。そして、ＣＰＵ３１は、ＥＣＵ１１への電源供給が開始されて起動すると、前回の動作期間において書き込みを実施した前記２つのブロックのうち、記憶されているデータ群に対するチェックサムの計算結果と、記憶されているチェックサムとが一致するブロックを特定し、その特定したブロックに記憶されていたデータ群を、ＲＡＭに保存して復帰させる。【選択図】図１
2014075078.tif 000002
【特許請求の範囲】
【請求項１】
ＲＡＭ（３５）と、
前記ＲＡＭに記憶される複数のデータからなるデータ群を保存するための複数の記憶部であって、不揮発性で且つ書き換えが可能な複数の記憶部（１〜７）と、
前記ＲＡＭ及び前記記憶部にアクセスする処理手段（３１）と、
を備えた電子制御装置（１１，４１）であって、
前記処理手段は、
当該処理手段の動作期間中に、前記ＲＡＭ内の前記データ群を前記記憶部に退避させるタイミングが到来すると、前記ＲＡＭ内の前記データ群を、退避データとして、２つの前記記憶部の各々に書き込むと共に、その退避データに対して所定の演算を行った結果のデータである全体検査用データも、前記２つの記憶部の各々に書き込むデータ退避手段（Ｓ１１０〜Ｓ１４０）と、
当該電子制御装置への電源供給が開始されて当該処理手段が起動すると、当該処理手段の前回の動作期間において前記データ退避手段が書き込みを実施した前記２つの記憶部のうち、その記憶部に記憶されている前記退避データに対して前記演算を行った結果のデータと該記憶部に記憶されている前記全体検査用データとが一致する記憶部である正常データ記憶部を特定し、その特定した正常データ記憶部に記憶されていた前記データ群を、前記ＲＡＭに保存するデータ復帰手段（Ｓ２１０〜Ｓ２３０，Ｓ２５０〜Ｓ２７０，Ｓ５１０〜Ｓ５３０，Ｓ５５０〜Ｓ５７０）と、
を備えることを特徴とする電子制御装置。
【請求項２】
請求項１に記載の電子制御装置において、
前記データ復帰手段が前記正常データ記憶部を特定するために行う処理は、
前記２つの記憶部のうちの一方の記憶部から、前記退避データ及び前記全体検査用データを読み込んで、その読み込んだ退避データに対して前記演算を行った結果のデータと、前記一方の記憶部から読み込んだ全体検査用データとが一致するか否かを判定し、一致すると判定したならば、前記一方の記憶部を前記正常データ記憶部であると特定する第１判定処理（Ｓ２１０，Ｓ２２０，Ｓ５１０，Ｓ５２０）と、
前記第１判定処理により、前記演算を行った結果のデータと前記全体検査用データとが一致しないと判定された場合に、前記２つの記憶部のうちの他方の記憶部から、前記退避データ及び前記全体検査用データを読み込んで、その読み込んだ退避データに対して前記演算を行った結果のデータと、前記他方の記憶部から読み込んだ全体検査用データとが一致するか否かを判定し、一致すると判定したならば、前記他方の記憶部を前記正常データ記憶部であると特定する第２判定処理（Ｓ２５０，Ｓ２６０，Ｓ５５０，Ｓ５６０）と、を含むこと、
を特徴とする電子制御装置。
【請求項３】
請求項１又は請求項２に記載の電子制御装置において、
前記データ退避手段は、前記ＲＡＭ内の前記データ群を複数組に分けた部分データ群の各々と、該部分データ群の各々に対して前記演算を行った結果である部分検査用データの各々とを、前記退避データとして、２つの前記記憶部の各々に書き込むようになっており、
前記処理手段は、前記データ復帰手段により前記正常データ記憶部の特定ができなかった場合に、前記２つの記憶部に記憶された前記部分データ群のうち、その部分データ群に対して前記演算を行った結果のデータと該部分データ群について前記記憶部に記憶されていた前記部分検査用データとが一致する部分データ群である正常部分データ群を特定して、その特定した正常部分データ群を前記ＲＡＭに保存する部分復帰手段（Ｓ５９０，Ｓ６００，Ｓ６２０，Ｓ６３０，Ｓ６８０）を備えること、
を特徴とする電子制御装置。
【請求項４】
請求項１ないし請求項３の何れか１項に記載の電子制御装置において、
前記記憶部は４つ以上あり、
前記処理手段の前記データ退避手段は、前記４つ以上の記憶部のうち、当該処理手段の前回の動作期間において書き込みを実施した前記記憶部とは異なる２つの前記記憶部の各々に、前記退避データと前記全体検査用データとを書き込むこと、
を特徴とする電子制御装置。
【請求項５】
請求項１ないし請求項４の何れか１項に記載の電子制御装置において、
前記データ復帰手段により前記退避データに対して前記演算を行った結果のデータと前記全体検査用データとが一致しないと判定された前記記憶部を、特定可能な異常情報のデータが、前記データ群に含まれていること、
を特徴とする電子制御装置。
【請求項６】
請求項１又は請求項２に記載の電子制御装置において、
前記記憶部は４つ以上あり、
前記処理手段の前記データ退避手段は、前記４つ以上の記憶部のうち、当該処理手段の前回の動作期間において書き込みを実施した前記記憶部とは異なる２つの前記記憶部の各々に、前記退避データと前記全体検査用データとを書き込むようになっており、
前記処理手段は、前記データ復帰手段により前記正常データ記憶部の特定ができなかった場合に、当該処理手段の前回より前の動作期間において前記データ退避手段が書き込みを実施した２つの前記記憶部のうち、その記憶部に記憶されている前記退避データに対して前記演算を行った結果のデータと該記憶部に記憶されている前記全体検査用データとが一致する記憶部を特定し、その特定した記憶部に記憶されていた前記データ群を、前記ＲＡＭに保存する遡り復帰手段（Ｓ３０５〜Ｓ３７０）を備えること、
を特徴とする電子制御装置。
【請求項７】
請求項３に記載の電子制御装置において、
前記記憶部は４つ以上あり、
前記処理手段の前記データ退避手段は、前記４つ以上の記憶部のうち、当該処理手段の前回の動作期間において書き込みを実施した前記記憶部とは異なる２つの前記記憶部の各々に、前記退避データと前記全体検査用データとを書き込むようになっており、
前記処理手段は、前記データ復帰手段により前記正常データ記憶部の特定ができなかった場合に、前記部分データ群のうち、前記部分復帰手段により前記ＲＡＭに保存されなかった部分データ群である未復帰データ群を前記ＲＡＭに保存するための手段として、当該処理手段の前回より前の動作期間において前記データ退避手段が書き込みを実施した２つの前記記憶部に記憶されている前記未復帰データ群のうちから、その未復帰データ群に対して前記演算を行った結果のデータと該未復帰データ群について前記記憶部に記憶されていた前記部分検査用データとが一致する未復帰データ群を特定し、その特定した未復帰データ群を前記ＲＡＭに保存する遡り部分復帰手段（Ｓ６９０）を備えること、
を特徴とする電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子制御装置に関する。
【背景技術】
【０００２】
例えば、車両用電子制御装置として、動作期間中にＲＡＭ内の保存対象データを不揮発性で書き換えが可能なメモリに保存して退避させ、電源供給開始に伴い起動した際に該メモリからＲＡＭへデータを復帰させるものがある。
【０００３】
また、例えば特許文献１には、３つの記憶領域の各々に同じデータ（詳しくは、同じ種類のデータ）を記憶しておき、データチェックの実施条件が成立すると、３つの記憶領域に記憶されている３つのデータ同士を比較して、２つ以上一致しているデータを真として採用する（つまり、３つのデータの多数決をとることで真値を求める）ことが記載されている。そして、この技術によれば、３つの記憶領域のうちの何れか１つに記憶されたデータが何らかの原因で異常値になっても、他の記憶部から正しいデータを得ることができるため、データ破壊に対する復旧性能がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２１５２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＲＡＭ内の保存対象データを不揮発性のメモリに退避させ、起動した際に該メモリからＲＡＭへデータを復帰させる電子制御装置に対して、上記特許文献１の技術を適用したとすると、不揮発性のメモリに同じデータを３つずつ保存することとなる。
【０００６】
このため、不揮発性のメモリの記憶容量としては、保存対象データの量の３倍必要となる。よって、そのメモリの必要記憶容量が大きくなってしまう。
また、１種類のデータ毎に、３つのデータを比較する多数決チェックの処理を行うこととなるため、不揮発性のメモリからＲＡＭに複数のデータを復帰させるための処理負荷が多くなり、延いては処理時間が長くなってしまう。
【０００７】
そこで、本発明は、ＲＡＭから不揮発性の記憶部にデータを退避させ該記憶部からＲＡＭにデータを復帰させる電子制御装置において、データ破壊に対する復旧性能を確保しながらも、不揮発性の記憶部の必要記憶容量とデータ復帰のための処理負荷とを低減すること、を目的としている。
【課題を解決するための手段】
【０００８】
本発明の電子制御装置は、ＲＡＭと、ＲＡＭに記憶される複数のデータ（詳しくは、複数種類のデータ）からなるデータ群を保存するための複数の記憶部であって、不揮発性で且つ書き換えが可能な複数の記憶部と、そのＲＡＭ及び記憶部にアクセスする処理手段と、を備えている。
【０００９】
そして、処理手段は、データ退避手段とデータ復帰手段とを備えている。
データ退避手段は、当該処理手段の動作期間中に、ＲＡＭ内のデータ群を記憶部に退避させるタイミングが到来すると、ＲＡＭ内のデータ群を、退避データとして、２つの記憶部の各々に書き込むと共に、その退避データに対して所定の演算を行った結果のデータである全体検査用データも、その２つの記憶部の各々に書き込む。
【００１０】
データ復帰手段は、当該電子制御装置への電源供給が開始されて当該処理手段が起動すると、当該処理手段の前回の動作期間においてデータ退避手段が書き込みを実施した２つの記憶部のうち、その記憶部に記憶されている退避データに対して前記演算を行った結果のデータと該記憶部に記憶されている全体検査用データとが一致する記憶部（つまり、記憶データが正常な記憶部）である正常データ記憶部を特定する。更に、データ復帰手段は、その特定した正常データ記憶部に記憶されていたデータ群を、ＲＡＭに保存する。そして、この保存により、記憶部に退避させていたデータ群がＲＡＭに復帰することとなる。
【００１１】
このような電子制御装置によれば、下記［１］〜［３］で述べる効果が得られる。
［１］データ退避手段が書き込みを実施した２つの記憶部のうち、一方の記憶部に記憶されたデータ群の一部又は全部が破壊したとしても、他方の記憶部に記憶されたデータ群が正常ならば、データ復帰手段により、その他方の記憶部が正常データ記憶部であると特定されて、その他方の記憶部に記憶されていた正常なデータ群がＲＡＭに保存される（ＲＡＭに復帰させられる）こととなる。よって、データ破壊に対する復旧性能を持つ。
【００１２】
［２］データ退避手段が書き込みを実施するのは２つの記憶部であるため、ＲＡＭからのデータ退避用に必要な記憶容量は、退避データの量の３倍も要らず、全体検査用データを除けば、退避データの量の２倍の記憶容量で済む。よって、不揮発性の記憶部の必要記憶容量を低減することができる。
【００１３】
［３］データ退避手段が書き込みを実施した２つの記憶部のうちから、正常データ記憶部を特定するための処理としては、少なくとも一方の記憶部を判断対象として、その判断対象の記憶部が正常データ記憶部であるか否かを判定することとなる。そして、その判定のための処理としては、判断対象の記憶部に記憶されている退避データに対して前記演算を行い、その演算結果のデータと、その記憶部に記憶されている全体検査用データとが、一致するか否かを判定することとなるが、その判定は、その記憶部に記憶されているデータ群が正常か否かを判定していることでもある。つまり、本発明では、記憶部に記憶されたデータが正しいか否かを、データ群の単位で行うことができ、１種類のデータ毎に良否のチェックを行う必要がない。よって、記憶部からＲＡＭへのデータ復帰のための処理負荷を低減することができる。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態の電子制御装置（ＥＣＵ）を表す構成図である。
【図２】シャットダウン処理を表すフローチャートである。
【図３】第１実施形態のデータ復帰処理を表すフローチャートである。
【図４】フェイルセーフ処理を表すフローチャートである。
【図５】第２実施形態の電子制御装置（ＥＣＵ）を表す構成図である。
【図６】第２実施形態のデータ復帰処理を表すフローチャートである。
【発明を実施するための形態】
【００１５】
本発明が適用された実施形態の電子制御装置（以下、ＥＣＵという）について説明する。尚、本実施形態のＥＣＵは、例えば、車両に搭載されて、該車両のエンジンを制御するものであるが、制御対象はエンジン以外でも良く、また、用途も車両用以外であっても良い。
【００１６】
［第１実施形態］
図１に示すように、第１実施形態のＥＣＵ１１は、外部電源としてのバッテリ１３の電圧（通常１２Ｖ前後であり、以下、バッテリ電圧という）が給電用のリレーであるメインリレー１５を介して電源電圧ＶＢとして供給される端子１７を備えている。また、その端子１７には、車両のイグニッションスイッチ（以下、ＩＧＳＷと記す）１９及びダイオード２０を介しても、バッテリ電圧が電源電圧ＶＢとして供給されるようになっている。
【００１７】
そして、ＥＣＵ１１は、当該ＥＣＵ１１の動作を司るマイコン２１と、電源回路２３と、メインリレー１５をオンさせるための駆動回路２５と、入力回路２７とを備えている。
電源回路２３は、端子１７に供給される電源電圧ＶＢから、マイコン２１を動作させるための一定の動作用電圧Ｖｄ（本実施形態では例えば５Ｖ）を生成して、その動作用電圧Ｖｄをマイコン２１に出力する。
【００１８】
駆動回路２５は、マイコン２１から入力される給電保持信号ＳＨがハイの場合に、メインリレー１５のコイル（図示省略）に電流を流すことにより、該メインリレー１５をオンさせる。
【００１９】
入力回路２７には、ＩＧＳＷ１９がオンすることでバッテリ電圧が供給されるライン２９の電圧が、ＩＧＳＷ１９のオン／オフを表すＩＧＳＷ信号として入力される。そして、入力回路２７は、その入力されるＩＧＳＷ信号（ハイがバッテリ電圧で、ローが０Ｖの信号）を、マイコン２１に入力させることが可能な電圧の信号（ハイが動作用電圧Ｖｄで、ローが０Ｖの信号）にレベルに変換して、マイコン２１へ出力する。
【００２０】
マイコン２１は、プログラムを実行するＣＰＵ３１と、実行対象のプログラムが記憶されたＲＯＭ３３と、ＣＰＵ２１による演算結果等が記憶される揮発性のＲＡＭ３５と、不揮発性で且つ書き換えが可能なメモリ（以下、不揮発性メモリという）３７と、を備えている。
【００２１】
そして、ＥＣＵ１１では、車両の使用者によりＩＧＳＷ１９がオンされると、端子１７に電源電圧ＶＢが供給されて、電源回路２３からマイコン２１へ動作用電圧Ｖｄが供給される。すると、マイコン２１が起動して（詳しくはＣＰＵ３１が起動して）、駆動回路２５への給電保持信号ＳＨをハイにする。このため、その後、ＩＧＳＷ１９がオフされても、マイコン２１が給電保持信号ＳＨをハイからローに戻すまでは、メインリレー１５がオンし続けてＥＣＵ１１への電源供給（電源電圧ＶＢの供給）が継続し、マイコン２１が動作し続けることとなる。
【００２２】
そして、マイコン２１は、ＩＧＳＷ１９がオフされたことを検出すると、動作を停止するまでに実施すべき特定の処理を行い、その処理を終了すると、給電保持信号ＳＨをハイからローにする。すると、メインリレー１５がオフして、ＥＣＵ１１への電源供給が停止し、その結果、マイコン２１が動作を停止すると共に、ＲＡＭ３５内のデータが消失することとなる。
【００２３】
尚、マイコン２１は、入力回路２７からのＩＧＳＷ信号に基づいて、ＩＧＳＷ１９のオン／オフ状態を検出する。また、マイコン２１の動作は、ＣＰＵ３１がＲＯＭ３３内のプログラムを実行することで実現されるものである。また、駆動回路２５は、マイコンからの給電保持信号ＳＨとＩＧＳＷ信号との論理和でメインリレー１５をオンさせるようになっていても良い。
【００２４】
ここで、マイコン２１が備える不揮発性メモリ３７は、本実施形態では、例えばＤａｔａＦｌａｓｈ（データフラッシュ）である。このＤａｔａＦｌａｓｈでは、データの書き換えを行う際には、まずデータを消去し、その消去した領域に新たなデータを書き込むこととなるが、データの消去は、複数のデータを記憶可能な所定容量（例えば８Ｋバイト）のブロックの単位で行うようになっている。また、データの書き込みについても、ブロックの容量以下の容量単位（例えば８バイトや１２８バイトといった単位）で行うようになっている。
【００２５】
そして、本実施形態において、ＤａｔａＦｌａｓｈである不揮発性メモリ３７は、消去単位となるブロックを複数（本実施形態では４つ以上であるが、以下では、例えば７つとして説明する）を備えている。このため、以下の説明において、各ブロックを区別する場合には、そのブロックの番号でもある１〜７の符号を用いる。
【００２６】
また、本実施形態において、不揮発性メモリ３７のブロックは、ＲＡＭ３５内で適宜更新される所定の複数のデータを、ＥＣＵ１１への電源供給停止期間において保存するための記憶部として用いられる。
【００２７】
このため、マイコン２１のＣＰＵ３１は、ＩＧＳＷ１９がオフされたことを検出した後、例えばエンジンを制御するための処理を全て終了すると、ＲＡＭ３５から不揮発性メモリ３７にデータを退避させるデータ退避実施タイミングが到来したとして、ＲＡＭ３５内の複数の保存対象データを不揮発性メモリ３７の何れかのブロックに書き込んで保存する（つまり退避させる）データ退避処理を行う。そして、ＣＰＵ３１は、次回に起動した際には、不揮発性メモリ３７からＲＡＭ３５へ保存対象データを復帰させるデータ復帰処理を行うようになっている。
【００２８】
そこで次に、マイコン２１のＣＰＵ３１が行うデータ退避処理とデータ復帰処理について、フローチャートを用い説明する。
まず、ＣＰＵ３１は、上記データ退避実施タイミングが到来すると、データ退避処理を含んだ図２のシャットダウン処理を行う。
【００２９】
図２に示すように、ＣＰＵ３１がシャットダウン処理を開始すると、まずＳ１１０にて、不揮発性メモリ３７の複数のブロック１〜７のうち、今回のデータ退避に使用する書込対象ブロックを２つ選択する。
【００３０】
ここで、今回の書込対象ブロックとしては、前回の動作期間において（詳しくは、前回の当該Ｓ１１０で）選択した２つのブロック（即ち、前回にデータ退避のための書き込みを実施したブロック）とは異なる２つのブロックを選択する。
【００３１】
本実施形態では、ブロックの番号で表現すると、例えば「２→３→４→５→６→７→１→２→３…」の昇順で、２つずつ選択していく。このため、図１に例示するように、前回のＳ１１０で、ブロック４とブロック５を書込対象ブロックとして選択していたなら、今回のＳ１１０では、ブロック６とブロック７を書込対象ブロックとして選択することとなる。そして、次回のＳ１１０では、ブロック１とブロック２を書込対象ブロックとして選択することとなる。
【００３２】
尚、図１において、（ｎ）は、それが付されたデータが今回書き込んだデータであることを示し、（ｎ−１）は、それが付されたデータが前回書き込んだデータであることを示している。このため、ＣＰＵ３１の次回の動作期間から見ると、（ｎ）が付されたデータは、前回の動作期間において書き込まれたデータということになり、同様に、（ｎ−１）が付されたデータは、前々回（２回前）の動作期間において書き込まれたデータということになる。
【００３３】
そして、ＣＰＵ３１は、次のＳ１２０にて、ＲＡＭ３５に記憶されているデータのうち、当該ＥＣＵ１１への電源供給停止中も保存すべき複数のデータ（即ち保存対象データ）からなるデータ群を、不揮発性メモリ３７に退避させるべき退避データとして読み出すと共に、その退避データを演算対象として、該退避データのチェックサムを算出する。チェックサムは、周知の通り、演算対象のデータ（この場合は退避データ）を合計した結果のデータであると共に、その演算対象のデータが正常か否かを検査するための検査用データ（換言すれば、誤り検出用データ）である。
【００３４】
次に、ＣＰＵ３１は、Ｓ１３０にて、上記Ｓ１１０で選択した書込対象ブロックの一方である１ブロック目に、ＲＡＭ３５から読み出した退避データと、その退避データのチェックサムとを書き込む。そして更に、次のＳ１４０にて、上記Ｓ１１０で選択した書込対象ブロックの他方である２ブロック目にも、１ブロック目に書き込んだのと同じ退避データとチェックサムとを書き込む。
【００３５】
そして、ＣＰＵ３１は、Ｓ１４０の処理が終了した後、Ｓ１５０に進み、駆動回路２５への給電保持信号ＳＨをハイからローにして、メインリレー１５をオフさせる。すると、ＥＣＵ１１への電源供給が停止して、マイコン２１が動作を停止し、当然ながらＣＰＵ３１も動作を停止することとなる。尚、Ｓ１１０〜Ｓ１４０の処理が、データ退避処理に該当する。
【００３６】
このようなシャットダウン処理により、ＣＰＵ３１は、不揮発性メモリ３７における４つ以上のブロック１〜７のうち、前回の動作期間において書き込みを実施したブロックとは異なる２つのブロックに、今回の退避データとチェックサムとを書き込むこととなる。
【００３７】
その後、ＩＧＳＷ１９がオンされると、ＥＣＵ１１への電源供給が開始されて、マイコン２１が起動し、延いてはＣＰＵ３１が起動する。
そして、ＣＰＵ３１は、起動すると、図３のデータ復帰処理を行う。
【００３８】
図３に示すように、ＣＰＵ３１がデータ復帰処理を開始すると、まずＳ２１０にて、不揮発性メモリ３７のブロック１〜７のうち、前回の動作期間においてデータを記憶した（書き込んだ）２つのブロック（ここではブロックａとブロックｂとする）の一方である１ブロック目（ここではブロックａとする）から、記憶されているデータ（即ち、保存対象のデータ群である退避データ及びチェックサム）を読み込む。
【００３９】
次にＳ２２０にて、ブロックａのチェックサム（図３においては「ＣＳ」と記載している）に整合性があるか否かを判定する。具体的には、ブロックａから読み込んだ退避データを演算対象として、その退避データのチェックサムを算出し、その算出した結果のデータと、ブロックａから読み込んだチェックサムとが一致するか否かを判定する。
【００４０】
そして、ブロックａのチェックサムに整合性があると判定した場合（即ち、算出したチェックサムと、読み込んだチェックサムとが、一致すると判定した場合）には、ブロックａに記憶されていたデータ群が正常であり、そのブロックａは記憶データが正常な正常データ記憶部であると特定して、Ｓ２３０に進む。そして、Ｓ２３０では、ブロックａから読み込んだ退避データであるデータ群を、ＲＡＭ３５に保存する。このとき、データ群をなす各データは、ＲＡＭ３５において、そのデータが記憶されていた元のアドレスに保存することとなり、このような保存により、不揮発性メモリ３７に退避させていたデータ群がＲＡＭ３５に復帰することとなる。そして、ＣＰＵ３１は、このＳ２３０の処理を行った後、当該データ復帰処理を終了する。
【００４１】
また、上記Ｓ２２０にて、ブロックａのチェックサムに整合性がないと判定した場合（即ち、算出したチェックサムと、読み込んだチェックサムとが、一致しないと判定した場合）には、ブロックａに記憶されていたデータ群が正常でないと判断して、Ｓ２４０に進み、ブロックａのデータ異常フラグをセットする。尚、データ異常フラグは、ＲＡＭ３５内のフラグであり、本第１実施形態では、不揮発性メモリ３７の各ブロックについてそれぞれ設けられている。そして、データ異常フラグがセットされているということは、そのデータ異常フラグに対応する記憶領域（この例では、不揮発性メモリ３７のブロック）に異常が生じている可能性があることを示す。
【００４２】
次にＳ２５０にて、不揮発性メモリ３７のブロック１〜７のうち、前回の動作期間においてデータを記憶した２つのブロックの他方である２ブロック目（ここではブロックｂとする）から、記憶されているデータ（即ち、保存対象のデータ群である退避データ及びチェックサム）を読み込む。
【００４３】
次にＳ２６０にて、Ｓ２２０と同様に、ブロックｂのチェックサムに整合性があるか否かを判定する。つまり、ブロックｂから読み込んだ退避データのチェックサムを算出し、その算出した結果のデータと、ブロックｂから読み込んだチェックサムとが一致するか否かを判定する。
【００４４】
そして、ブロックｂのチェックサムに整合性があると判定した場合には、ブロックｂに記憶されていたデータ群が正常であり、そのブロックｂは記憶データが正常な正常データ記憶部であると特定して、Ｓ２７０に進む。
【００４５】
Ｓ２７０では、Ｓ２３０と同様に、ブロックｂから読み込んだ退避データであるデータ群を、ＲＡＭ３５に保存する。これにより、不揮発性メモリ３７に退避させていたデータ群がＲＡＭ３５に復帰することとなる。そして、ＣＰＵ３１は、このＳ２７０の処理を行った後、当該データ復帰処理を終了する。
【００４６】
また、上記Ｓ２６０にて、ブロックｂのチェックサムに整合性がないと判定した場合には、ブロックｂに記憶されていたデータ群が正常でないと判断して、Ｓ２８０に進み、ブロックｂのデータ異常フラグをセットする。
【００４７】
ここで、この場合には、前回の動作期間においてデータを記憶したブロックａとブロックｂとの両方において、データ破壊が生じている（詳しくは、記憶データの何れかが破壊している）ということであり、ＲＡＭ３５内のデータ群を最新の状態（前回動作終了時の状態）に戻すことができない。このため、ＲＡＭ３５内のデータ群としては、デフォルト値にするか、もしくは、前回より前の動作期間におけるデータ（即ち、過去のデータ）に戻すことが考えられる。
【００４８】
このため、ＣＰＵ３１は、次のＳ２９０にて、データ群をデフォルト値にするか否かを判定し、デフォルト値にすると判定した場合には、Ｓ３００に進む。そして、Ｓ３００では、ＲＡＭ３５に記憶するデータ群の各データを、その各データについて予め定められたデフォルト値にし、その後、当該データ復帰処理を終了する。
【００４９】
尚、本実施形態において、データ群をデフォルト値にするか否かは、そのデータ群を構成するデータの種類によって予め決めてある。つまり、データ群の各データが、前回より前の動作期間におけるデータに戻しても意味が無いデータであれば、Ｓ２９０にてデフォルト値にすると判定され、逆に、デフォルト値にするよりも過去のデータに戻した方が良いデータであれば、Ｓ２９０にてデフォルト値にしないと判定されるようになっている。
【００５０】
一方、上記Ｓ２９０にて、データ群をデフォルト値にしないと判定した場合には、Ｓ３０５に進む。
Ｓ３０５では、前回から遡る回数を示す遡りカウンタｉを、前回より１回前（即ち２回前）を示す「１」に設定する。
【００５１】
次にＳ３１０にて、不揮発性メモリ３７のブロック１〜７のうち、遡りカウンタｉの値によって示される過去の動作期間であって、前回よりｉ回前の動作期間において、データを記憶した２つのブロックの一方である１ブロック目（ここではブロックｘとする）から、Ｓ２１０と同様に、記憶されているデータを読み込む。
【００５２】
そして次に、Ｓ３２０にて、Ｓ２２０と同様に、ブロックｘのチェックサムに整合性があるか否かを判定する。つまり、ブロックｘから読み込んだ退避データのチェックサムを算出し、その算出した結果のデータと、ブロックｘから読み込んだチェックサムとが一致するか否かを判定する。
【００５３】
そして、ブロックｘのチェックサムに整合性があると判定した場合には、ブロックｘに記憶されていたデータ群が正常であると判断して、Ｓ３３０に進む。そして、Ｓ３３０では、Ｓ２３０と同様に、ブロックｘから読み込んだ退避データであるデータ群を、ＲＡＭ３５に保存する。これにより、前回よりｉ回前の動作期間において不揮発性メモリ３７に退避させていたデータ群（即ち、最新よりｉ回前のデータ群）がＲＡＭ３５に復帰することとなる。そして、ＣＰＵ３１は、このＳ３３０の処理を行った後、当該データ復帰処理を終了する。
【００５４】
また、上記Ｓ３２０にて、ブロックｘのチェックサムに整合性がないと判定した場合には、ブロックｘに記憶されていたデータ群が正常でないと判断して、Ｓ３４０に進む。
Ｓ３４０では、不揮発性メモリ３７のブロック１〜７のうち、前回よりｉ回前の動作期間においてデータを記憶した２つのブロックの他方である２ブロック目（ここではブロックｙとする）から、Ｓ２１０と同様に、記憶されているデータを読み込む。
【００５５】
そして次に、Ｓ３５０にて、Ｓ２２０と同様に、ブロックｙのチェックサムに整合性があるか否かを判定する。つまり、ブロックｙから読み込んだ退避データのチェックサムを算出し、その算出した結果のデータと、ブロックｙから読み込んだチェックサムとが一致するか否かを判定する。
【００５６】
そして、ブロックｙのチェックサムに整合性があると判定した場合には、ブロックｙに記憶されていたデータ群が正常であると判断して、Ｓ３６０に進む。そして、Ｓ３６０では、Ｓ２３０と同様に、ブロックｙから読み込んだ退避データであるデータ群を、ＲＡＭ３５に保存する。これにより、前回よりｉ回前の動作期間において不揮発性メモリ３７に退避させていたデータ群がＲＡＭ３５に復帰することとなる。そして、ＣＰＵ３１は、このＳ３６０の処理を行った後、当該データ復帰処理を終了する。
【００５７】
一方、上記Ｓ３５０にて、ブロックｙのチェックサムに整合性がないと判定した場合には、ブロックｙに記憶されていたデータ群が正常でないと判断して、Ｓ３６５に進む。
Ｓ３６５では、遡りカウンタｉをインクリメントする。
【００５８】
そして、次のＳ３７０では、遡りカウンタｉの値に基づいて、これ以上過去のデータに遡ってデータ復帰させることができる（以下、このことを「遡り可能」という）か否かを判定する。
【００５９】
具体的には、データ退避用に使用されるブロックの総数をＮとすると、Ｎを２で割った結果の整数値から１を引いた値が、遡りカウンタｉの上限値となるため、Ｓ３７０では、遡りカウンタｉの値が、その上限値以下であるか否かを判定する。例えば、Ｎ＝７ならば、遡りカウンタｉの上限値は「２」となる。
【００６０】
そして、Ｓ３７０にて、遡り可能（ｉ≦上限値）と判定した場合には、Ｓ３１０に戻り、更に１回前の動作期間においてデータを記憶した２つのブロックについて、前述したＳ３１０以降の処理を行うこととなる。
【００６１】
また、Ｓ３７０にて、遡り不能（ｉ＞上限値）と判定した場合には、そのまま当該データ復帰処理を終了するか、あるいは、図示を省略しているが、Ｓ３００と同様に、ＲＡＭ３５に記憶するデータ群の各データを、予め定められたデフォルト値にしてから、当該データ復帰処理を終了する。尚、不揮発性メモリ３７の全てのブロックにおいてデータ破壊が生じてしまうことは極めて希と考えられるため、Ｓ３７０で遡り不能と判定されるケースは、実際には無いと考えられる。
【００６２】
また、ＣＰＵ３１は、図３のデータ復帰処理を終了した後に、図４のフェイルセーフ処理を行う。
そして、図４に示すように、ＣＰＵ３１は、フェイルセーフ処理を開始すると、まずＳ４１０にて、データ復帰処理でセットされたデータ異常フラグがあるか否かを判定し、セットされたデータ異常フラグが無ければ、そのままＳ４３０に移行する。
【００６３】
また、上記Ｓ４１０にて、セットされたデータ異常フラグがあると判定した場合には、Ｓ４２０に進む。
そして、Ｓ４２０では、セットされているデータ異常フラグに対応する記憶領域の異常カウント数をインクリメントする。
【００６４】
ここで、異常カウント数は、データ異常フラグと同様に、本第１実施形態では、不揮発性メモリ３７の各ブロックについて設けられている情報である。
そして、Ｓ４２０での異常カウント数のインクリメントは、ＲＡＭ３５上で行われるが、その異常カウント数は、ＲＡＭ３５から不揮発性メモリ３７に退避させられてＲＡＭ３５に復帰させられる保存対象データである。つまり、異常カウント数は、退避データとしてのデータ群に含まれている。このため、異常カウント数は、ＥＣＵ１１への電源供給が停止されても、継続して更新されていく。
【００６５】
また、異常カウント数が１以上であるということは、その異常カウント数に対応する記憶領域（この例では、不揮発性メモリ３７のブロック）について、データ復帰処理により、チェックサムに整合性がない（記憶データが正常でない）と判定された、ということを示すこととなる。よって、異常カウント数は、データ復帰処理によりチェックサムに整合性がないと判定された記憶領域を特定可能な異常情報のデータであるとも言える。尚、異常カウント数が、どの記憶領域に対応するものであるかは、例えば、その異常カウント数の格納先アドレスによって識別できるようにすることができ、また例えば、対応する記憶領域の識別情報を異常カウント数に付加することによっても識別できるようにすることができる。
【００６６】
図４に戻り、ＣＰＵ３１は、Ｓ４２０の処理を行った後、Ｓ４３０に進む。
Ｓ４３０では、所定の閾値以上になった異常カウント数があるか否かを判定し、閾値以上の異常カウント数がないと判定した場合には、そのまま当該フェイルセーフ処理を終了するが、閾値以上になった異常カウント数があると判定した場合には、Ｓ４４０に進む。
【００６７】
そして、Ｓ４４０では、閾値以上になった異常カウント数に対応する記憶領域の使用（即ち、ＲＡＭ３５からのデータ退避に使用すること）を禁止し、その後、当該フェイルセーフ処理を終了する。つまり、閾値以上になった異常カウント数に対応する記憶領域には、ハードウェア上の異常が発生している可能性が高いことから、以後は、その記憶領域をデータ退避用に使用しないようにしている。尚、閾値は、１でも２以上でも良く、つまり、１以上の値に適宜設定することができる。
【００６８】
以上のようなＥＣＵ１１によれば、図２のシャットダウン処理で書き込みを実施した不揮発性メモリ３７における２つのブロック（書込対象ブロック）のち、一方のブロックに記憶されたデータ群（退避データ）の一部又は全部が破壊したとしても、他方のブロックに記憶されたデータ群が正常ならば、図３のデータ復帰処理により、その他方のブロックが、記憶データが正常な正常データ記憶部であると特定されて、その他方のブロックに記憶されていた正常なデータ群がＲＡＭ３５に保存される（ＲＡＭ３５に復帰させられる）こととなる。よって、データ破壊に対する復旧性能を持つ。
【００６９】
そして、シャットダウン処理でデータ退避のための書き込みをする対象は、不揮発性メモリ３７における２つのブロックであるため、ＲＡＭ３５からのデータ退避用に必要な記憶容量は、退避データの量の３倍も要らず、チェックサムを除けば、退避データの量の２倍の記憶容量で済む。よって、不揮発性メモリ３７の必要記憶容量を低減することができる。
【００７０】
更に、不揮発性メモリ３７のブロックに記憶されたデータが正しいか否かの判定を、データ群の単位で、チェックサムの整合性判定により行うことができる。よって、１種類のデータ毎に良否のチェックを行う必要がなく、不揮発性メモリ３７のブロックからＲＡＭ３５へデータ復帰させるための処理負荷を低減することができる。
【００７１】
また、図３のデータ復帰処理では、前回の動作期間においてデータを記憶した２つのブロックａ，ｂのうち、まず、一方のブロックａから、退避データ及びチェックサムを読み込んで、チェックサムに整合性があるか否かを判定し、整合性があると判定したならば、その一方のブロックａを、正常データ記憶部であると特定するようになっている（Ｓ２１０，Ｓ２２０）。そして、一方のブロックａについてチェックサムに整合性がないと判定した場合に、他方のブロックｂから、退避データ及びチェックサムを読み込んで、チェックサムに整合性があるか否かを判定し、整合性があると判定したならば、その他方のブロックｂを、正常データ記憶部であると特定するようなっている（Ｓ２５０，Ｓ２６０）。
【００７２】
つまり、最初のブロックａについて、記憶データの正しさを確認できれば、そのブロックａの記憶データをＲＡＭ３５に復帰させるデータとして採用し、他方のブロックｂからのデータ読み出しは行わないようになっている。このため、ＲＡＭ３５にデータを復帰させるのに要する処理時間を短縮することができる。
【００７３】
また、ＥＣＵ１１においては、不揮発性メモリ３７のブロックが４つ以上あり、図２のシャットダウン処理では、前回の動作期間においてデータ退避のための書き込みを実施した２つのブロックとは異なる２つのブロックを、今回の書込対象ブロックとして選択し（Ｓ１１０）、その選択した２つの書込対象ブロックに、退避データとチェックサムを書き込むようになっている（Ｓ１３０，Ｓ１４０）。つまり、ＥＣＵ１１が動作を停止する直前毎に、前回とは違うブロックに対してデータの書き込みを行うようにしている。
【００７４】
このため、不揮発性メモリ３７の各ブロックへのデータ書き込み回数（書き換え回数でもある）を、少なくすることができる。
特に、本実施形態において、不揮発性メモリ３７として用いたＤａｔａＦｌａｓｈは、他の種類の書き換え可能な不揮発性メモリ（例えばＥＥＰＲＯＭ）と比較すると、記憶容量が大きいものの、特定のデータ保持期間を確保するためには、データの書き込み回数を少なくする必要がある。そして、本実施形態では、書き込み対象のブロックを順次切り替えていくようにしているため、各ブロックの書き込み回数を減らすことができ、延いては、所望のデータ保持期間を確保することができる。
【００７５】
そして更に、図３のデータ復帰処理では、前回の動作期間においてデータを記憶した２つのブロックａ，ｂの両方にデータ破壊が生じていると判定した場合（つまり、ブロックａ，ｂを対象にして正常データ記憶部の特定ができなかった場合）には（Ｓ２６０：ＮＯ）、Ｓ３０５〜Ｓ３７０の処理からなる遡り復帰処理により、前回より１回以上前で、且つ、出来るだけ最近の動作期間において、データを退避させた２つのブロックのうち、チェックサムに整合性があるブロック（記憶データが正しいブロック）を特定し、その特定したブロックに記憶されていたデータ群を、ＲＡＭ３５に保存するようになっている。
【００７６】
このため、ＲＡＭ３５内のデータを、最新の状態に戻すことができなくなっても、それより前の状態には戻すことができ、過去の履歴を完全に失ってしまうことを防止することができる。
【００７７】
また、退避データとしてのデータ群には、データ退避に使用される各記憶領域（上記例では不揮発性メモリ３７のブロック）についての異常カウント数（異常情報のデータに相当）が含まれている。このため、例えば、図４のフェイルセーフ処理について説明したように、異常カウント数に基づいて、異常が発生している記憶領域を特定して、その異常な記憶領域の使用を禁止することができる。よって、異常になった記憶領域にＲＡＭ３５内のデータを退避させてしまうことを、未然に防ぐことができるようになる。
【００７８】
尚、上記の説明では、ＲＡＭ３５から不揮発性メモリ３７に退避させる保存対象のデータ群が１つであるとして説明したが、データ群は複数でも良い。
そして、保存対象のデータ群が複数ある場合には、各データ群を、不揮発性メモリ３７の異なるブロックに退避させることとなる。よって、図２のシャットダウン処理では、データ群の各々について、Ｓ１１０〜Ｓ１４０の処理を行えば良く、また、図３のデータ復帰処理を、データ群の各々について行えば良い。但し、図３におけるＳ３０５〜Ｓ３７０の処理を行うのであれば、不揮発性メモリ３７のブロック数は、「データ群の数×２×２」以上必要となる。
【００７９】
尚、本第１実施形態では、退避データのチェックサムが、全体検査用データに相当している。
［第２実施形態］
次に、第２実施形態について説明するが、第１実施形態と同様の構成要素については、第１実施形態と同じ符号を用いるため、説明を省略する。
【００８０】
図５に示す第２実施形態のＥＣＵ４１は、第１実施形態のＥＣＵ１１と比較すると、下記の《１》〜《４》の点が異なっている。
《１》図５に示すように、不揮発性メモリ３７のブロックに退避させる保存対象のデータ群は、グループＡ，グループＢ，グループＣ，…（グループＤ以降は図示省略）というように、複数のグループ（組）に分けられている。
【００８１】
このため、本第２実施形態では、保存対象のデータ群のことを、データ群全体とも言い、グループ分けされた個々のデータ群（部分データ群に相当）のことは、データ群全体と区別するために、グループデータ群と言う。また、各グループデータ群を区別する場合には、例えば、グループＡデータ群やグループＢデータ群といように、グループ名を付けて呼ぶことにする。
【００８２】
また、本第２実施形態では、不揮発性メモリ３７からＲＡＭ３５へのデータ復帰を、グループデータ群の単位で行う場合があることを想定している。
このため、データ群のグループ分けとしては、不揮発性メモリ３７からＲＡＭ３５に復帰して処理に使用される場合に、同じ動作期間で退避されたデータ同士でないと、その処理に支障をきたしてしまうもの同士（例えば、エンジンが停止したときの状態を解析するための油温や冷却水温などの情報同士）に分けたり、同じ動作期間で退避されたデータ同士であること自体に意味があるもの同士（例えば、故障検出履歴と故障検出時刻など、同時性に意味があるもの同士）に分けたりしている。
【００８３】
《２》そして、ＣＰＵ３１は、図２のシャットダウン処理において、Ｓ１２０では、ＲＡＭ３５からグループデータ群の各々を読み出すと共に、各グループデータ群を演算対象として、該グループデータ群のチェックサムをそれぞれ算出する。尚、以下では、このＳ１２０で算出された各グループデータ群のチェックサム（部分検査用データに相当）を、グループのチェックサム、あるいは、グループチェックサムと言う。また、各グループチェックサムを区別する場合には、例えば、グループＡのチェックサムやグループＢのチェックサム、あるいは、グループＡチェックサムやグループＢチェックサムというように、グループ名を付けて呼ぶことにする。
【００８４】
そして更に、ＣＰＵ３１は、Ｓ１２０では、グループデータ群の各々とグループチェックサムの各々とからなるデータ全体を、退避データとし、その退避データを演算対象として、該退避データのチェックサムを算出する。その退避データのチェックサムは、不揮発性メモリ３７のブロックに記憶したデータ全体の正誤を検査するためのチェックサムであって、そのブロックのチェックサムであり、第１実施形態でのチェックサムに該当する。また、第２実施形態では、この退避データのチェックサム（全体検査用データに相当）を、グループチェックサムと区別するために、全体チェックサムとも言う（図５参照）。
【００８５】
そして、ＣＰＵ３１は、図２のシャットダウン処理において、Ｓ１３０では、今回選択した書込対象ブロックの一方である１ブロック目に、グループデータ群の各々とグループチェックサムの各々とからなる退避データと、その退避データのチェックサム（全体チェックサム）とを書き込む。同様に、次のＳ１４０では、書込対象ブロックの他方である２ブロック目に、１ブロック目に書き込んだのと同じ退避データと全体チェックサムとを書き込む。
【００８６】
尚、図５に示すように、不揮発性メモリ３７の各ブロックにおいて、グループデータ群及びグループチェックサムの記憶領域は、グループ毎に予め定められており、各グループについて、グループデータ群とグループチェックサムがどこに記憶されているかは特定可能となっている。
【００８７】
また、図５において、グループチェックサムは、ＧＣＳと記載しており、ＧＣＳの後に付した「；Ａ」や「；Ｂ」や「：Ｃ」は、そのＧＣＳがどのグループのチェックサムであるかを示している。例えば、ＧＣＳ；Ａは、グループＡのチェックサムであり、ＧＣＳ：Ｂは、グループＢのチェックサムである。そして、このことは、後述する図６についても同様である。
【００８８】
《３》ＣＰＵ３１は、図３のデータ復帰処理に代えて、図６のデータ復帰処理を行う。
図６のデータ復帰処理において、Ｓ５１０〜Ｓ５８０の処理は、図３におけるＳ２１０〜Ｓ２８０の処理と同じであるため、説明を省略する。そして、以下では、Ｓ５９０以降の処理について説明する。
【００８９】
ＣＰＵ３１は、Ｓ５８０の処理（図３のＳ２８０と同じ処理）を行った後、Ｓ５９０に進むが、この場合は、前回の動作期間においてデータを記憶した不揮発性メモリ３７の２つのブロックａ，ｂとも、記憶データの何れかが破壊していると考えられる。よって、そのブロックａ，ｂの何れかからＲＡＭ３５へデータ群全体を復帰させることはできない。
【００９０】
そこで、まずＳ５９０では、一方のブロックａについて、グループチェックサムの整合性有無を未だ判定していない１つのグループ（ここではグループαとする）のチェックサム（ＧＣＳ；α）に、整合性があるか否かを判定する。
【００９１】
つまり、ブロックａからグループαデータ群とグループαチェックサム（ＧＣＳ；α）を読み込んで、グループαデータ群のチェックサムを算出し、その算出した結果のデータと、ブロックａから読み込んだグループαチェックサム（ＧＣＳ；α）とが、一致するか否かを判定する。尚、Ｓ５１０でブロックａから読み込んだデータをＲＡＭ３５の作業用領域に残しているのであれば、この回のＳ５９０において、グループαデータ群及びグループαチェックサムとしては、上記作業用領域内の、読み出し済みのものを使用しても良い。そして、このことは、後述するＳ６２０についても同様である。
【００９２】
このＳ５９０にて、グループαのチェックサムに整合性があると判定した場合には、ブロックａに記憶されていたグループαデータ群は正常なグループデータ群（正常部分データ群に相当）であると判断して、Ｓ６００に進む。
【００９３】
そして、Ｓ６００では、ブロックａに記憶されていたグループαデータ群を、ＲＡＭ３５に保存する。このとき、グループαデータ群をなす各データは、ＲＡＭ３５において、そのデータが記憶されていた元のアドレスに保存することとなり、このような保存により、不揮発性メモリ３７に退避させていたグループαデータ群がＲＡＭ３５に復帰することとなる。そして、ＣＰＵ３１は、このＳ６００の処理を行った後、Ｓ６８０に進む。
【００９４】
また、上記Ｓ５９０にて、グループαのチェックサムに整合性がないと判定した場合には、ブロックａに記憶されていたグループαデータ群は正常でないと判断して、Ｓ６１０に進む。
【００９５】
Ｓ６１０では、ブロックａにおけるグループαデータ群の記憶領域に対応する異常データフラグをセットする。尚、異常データフラグは、前述した通り、そのフラグに対応する記憶領域に異常が生じている可能性があることを示すフラグであり、本第２実施形態では、不揮発性メモリ３７の各ブロックについてだけでなく、各ブロックにおける各グループデータ群の記憶領域の各々についても設けられている。
【００９６】
そして、次のＳ６２０にて、今度は他方のブロックｂについて、Ｓ５９０と同様に、グループαのチェックサム（ＧＣＳ；α）に、整合性があるか否かを判定する。
このＳ６２０にて、グループαのチェックサムに整合性があると判定した場合には、ブロックｂに記憶されていたグループαデータ群は正常なグループデータ群であると判断して、Ｓ６３０に進む。
【００９７】
そして、Ｓ６３０では、Ｓ６００と同様に、ブロックｂに記憶されていたグループαデータ群を、ＲＡＭ３５に保存する。これにより、不揮発性メモリ３７に退避させていたグループαデータ群がＲＡＭ３５に復帰することとなる。そして、ＣＰＵ３１は、このＳ６３０の処理を行った後、Ｓ６８０に進む。
【００９８】
また、上記Ｓ６２０にて、グループαのチェックサムに整合性がないと判定した場合には、ブロックｂに記憶されていたグループαデータ群も正常でないと判断して、Ｓ６４０に進む。そして、Ｓ６４０では、ブロックｂにおけるグループαデータ群の記憶領域に対応する異常データフラグをセットする。
【００９９】
ここで、この場合には、ブロックａとブロックｂとの両方において、グループαデータ群が破壊しているということであり、ＲＡＭ３５内のグループαデータ群を最新の状態（前回動作終了時の状態）に戻すことができない。このため、ＲＡＭ３５内のグループαデータ群としては、デフォルト値にするか、もしくは、前回より前の動作期間におけるデータ（過去のデータ）に戻すことが考えられる。
【０１００】
このため、ＣＰＵ３１は、次の６５０にて、グループαデータ群をデフォルト値にするか否かを判定し、デフォルト値にすると判定した場合には、Ｓ６６０に進む。そして、Ｓ６６０では、ＲＡＭ３５に記憶するグループαデータ群の各データを、その各データについて予め定められたデフォルト値にし、その後、Ｓ６８０に進む。
【０１０１】
尚、本実施形態において、グループデータ群をデフォルト値にするか否かは、そのグループデータ群を構成するデータの種類によって予め決めてある。つまり、グループデータ群の各データが、前回より前の動作期間におけるデータに戻しても意味が無いデータであれば、Ｓ６５０にてデフォルト値にすると判定され、逆に、デフォルト値にするよりも過去のデータに戻した方が良いデータであれば、Ｓ６５０にてデフォルト値にしないと判定されるようになっている。
【０１０２】
一方、上記Ｓ６５０にて、グループαデータ群をデフォルト値にしないと判定した場合には、Ｓ６７０に進み、グループαデータ群の未復帰履歴（詳しくは、グループαデータ群を未だＲＡＭ３５に復帰させていないことを示す履歴）を記憶する。
【０１０３】
次に、Ｓ６８０にて、全てのグループについて、Ｓ５９０からの処理を終了したか否か（つまり、全てのグループについてチェックサムの整合性を判定したか）否かを判定し、未処理のグループがあると判定した場合には、Ｓ５９０に戻る。そして、その未処理のグループの１つを、処理対象のグループαとして、Ｓ５９０以降の処理を行う。
【０１０４】
また、上記Ｓ６８０にて、未処理のグループがない（全グループについて処理を終了した）と判定した場合には、Ｓ６８５に進み、未復帰のグループデータ群（即ち、Ｓ６７０で未復帰履歴が記憶されたグループデータ群であり、デフォルト値にすることもなくＲＡＭ３５への復帰が未だのグループデータ群）があるか否かを判定する。
【０１０５】
そして、未復帰のグループデータ群がなければ（Ｓ６８５：ＮＯ）、そのまま当該データ復帰処理を終了するが、未復帰のグループデータ群があれば（Ｓ６８５：ＹＥＳ）、Ｓ６９０に進む。
【０１０６】
Ｓ６９０では、不揮発性メモリ３７のブロック１〜７のうち、前回より１回前の動作期間においてデータを記憶した２つのブロック（以下、１回遡りのブロックという）を対象として、未復帰のグループデータ群について、上記Ｓ５９０，Ｓ６００，Ｓ６２０及びＳ６３０と同じ処理を行う。
【０１０７】
そして、Ｓ６９０では、１回遡りのブロックを対象としてもＳ５９０及びＳ６２０と同じ２つの処理によりグループチェックサムに整合性がないと判定したグループデータ群があれば、そのグループデータ群については、更に、前回より２回前の動作期間においてデータを記憶した２つのブロック（以下、２回遡りのブロックという）を対象として、上記Ｓ５９０，Ｓ６００，Ｓ６２０及びＳ６３０と同じ処理を行う。
【０１０８】
尚、本実施形態では、不揮発性メモリ３７におけるブロック数が７であるため、過去のデータに遡ることのできる最大回数（遡り可能回数）は２回となる。よって、このＳ６９０において、もし、２回遡りのブロックを対象としてもＳ５９０及びＳ６２０と同じ２つの処理によりグループチェックサムに整合性がないと判定したグループデータ群があれば、そのグループデータ群については、ＲＡＭ３５に記憶する各データを、予め定められたデフォルト値にする。
【０１０９】
但し、不揮発性メモリ３７の全てのブロックにおいて同じグループのデータ群が破壊してしまうことは極めて希と考えられるため、Ｓ６９０において、何れかのグループデータ群をデフォルト値にしなければならないケースは、実際には無いと考えられる。また、不揮発性メモリ３７におけるブロック数が８以上であれば、遡り可能回数は３回以上になり、Ｓ６９０では、その遡り可能回数だけは遡って上記Ｓ５９０，Ｓ６００，Ｓ６２０及びＳ６３０と同じ処理を行うことができる。
【０１１０】
そして、このようなＳ６９０の処理が終了すると、当該データ復帰処理も終了する。
《４》図４のフェイルセーフ処理におけるＳ４２０でインクリメントされる異常カウント数は、データ異常フラグと同様に、不揮発性メモリ３７の各ブロックについてだけでなく、各ブロックにおける各グループデータ群の記憶領域の各々についても設けられている。尚、本実施形態においても、異常カウント数は保存対象データである。
【０１１１】
そして、ＣＰＵ３１は、図４のフェイルセーフ処理におけるＳ４３０にて、閾値以上になった異常カウント数があると判定し、Ｓ４４０にて、その異常カウント数に対応する記憶領域の使用を禁止した場合に、その使用を禁止した記憶領域が、何れかのグループデータ群の記憶領域であったならば、以下の処置を行う。
【０１１２】
即ち、使用を禁止した記憶領域のグループデータ群は、以後は、その記憶領域を含むブロックにおいては、他の空いている代替えの記憶領域に記憶するように変更する。
このため、何れかのグループデータ群の記憶領域にハードウェア上の異常が発生しても、その記憶領域に記憶していたグループデータ群の不揮発性メモリ３７への退避を、継続して実施することができる。
【０１１３】
以上のような第２実施形態のＥＣＵ４１では、保存対象のデータ群を複数のグループに分けており、図２のシャットダウン処理では、グループデータ群の各々とグループチェックサムの各々とからなるデータ全体を退避データとし、その退避データと、該退避データについてのチェックサムである全体チェックサムとを、不揮発性メモリ３７における２つのブロックに書き込むようになっている。
【０１１４】
そして、図６のデータ復帰処理では、前回の動作期間においてデータを記憶した２つのブロックａ，ｂの両方にデータ破壊が生じていると判定した場合（正常データ記憶部の特定ができなかった場合）には（Ｓ５６０：ＮＯ）、ブロックａ，ｂに記憶されたグループデータ群のうち、グループチェックサムに整合性がある正常なグループデータ群を特定して、その特定した正常なグループデータ群を、ＲＡＭに復帰させて保存するようになっている（Ｓ５９０，Ｓ６００，Ｓ６２０，Ｓ６３０，Ｓ６８０）。
【０１１５】
このため、ブロックａ，ｂの両方にデータ破壊が生じた場合でも、データ群全体のうちの正常なグループデータ群は、最新の状態でＲＡＭ３５に復帰させることができる。よって、データ復旧能力を高めることができる。
【０１１６】
更に、ＥＣＵ４１では、ブロックａ，ｂからＲＡＭ３５へ復帰させることができなかった未復帰のグループデータ群（未復帰データ群に相当し、以下、未復帰グループデータ群という）については、Ｓ６９０の処理により、前回より前の動作期間において書き込みを実施した２つのブロックに記憶されている未復帰グループデータ群のうちから、グループチェックサムに整合性がある正常な未復帰グループデータ群を特定し、その特定した未復帰グループデータ群を、ＲＡＭ３５に保存するようになっている。
【０１１７】
このため、最新の状態に戻すことができなくなった未復帰グループデータ群であっても、最新より前の状態には戻すことができる。よって、データ復旧能力を一層高めることができる。
【０１１８】
尚、第１実施形態について述べたように、本第２実施形態においても、ＲＡＭ３５から不揮発性メモリ３７に退避させる保存対象のデータ群全体は、複数でも良い。
［他の変形例］
以上、本発明の一実施形態について説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
【０１１９】
例えば、保存対象データとする異常情報のデータとしては、前述した異常カウント数に代えて、前述のデータ異常フラグとしても良い。その場合、図４のフェイルセーフ処理では、Ｓ４２０，Ｓ４３０を無くし、Ｓ４１０にて、セットされたデータ異常フラグがあると判定した場合には、Ｓ４４０にて、そのセットされたデータ異常フラグに対応する記憶領域の使用を禁止すれば良い。つまり、この場合には、異常カウント数の閾値を１に設定したのと実質的に同じとなる。
【０１２０】
また、不揮発性メモリ３７におけるブロックの数は２個であっても良い。
また、図２のシャットダウン処理では、毎回同じブロックを、書込対象ブロックとして選択するようになっていても良い。
【０１２１】
また、第１実施形態において、図３におけるＳ３０５〜Ｓ３７０の処理を行わない構成にすることもできる。
また、第２実施形態において、図６におけるＳ６９０では、未復帰グループデータ群について、過去のデータに遡らずに、各データをデフォルト値にする処理を行うように構成しても良い。
【０１２２】
また、検査用データ（全体検査用データ、部分検査用データ）としては、誤り検出能力があるものであれば、チェックサム以外でも良い。例えば、チェックサムの値に所定値を加算または減算した結果のデータを、検査用データとして用いても良い。
【０１２３】
また、データ退避用の複数の記憶部としては、１つの不揮発性メモリにおける複数の記憶領域（前述の例ではブロック）に限らず、物理的に独立した複数の不揮発性メモリであっても良い。
【０１２４】
また、書き換えが可能な不揮発性メモリとしては、例えばＥＥＰＲＯＭやフラッシュメモリでも良い。
【符号の説明】
【０１２５】
１〜７…ブロック、１１，４１…ＥＣＵ（電子制御装置）、２１…マイコン、３１…ＣＰＵ、３３…ＲＯＭ、３５…ＲＡＭ、３７…不揮発性メモリ
【図１】
2014075078.tif 000003
【図２】
2014075078.tif 000004
【図３】
2014075078.tif 000005
【図４】
2014075078.tif 000006
【図５】
2014075078.tif 000007
【図６】
2014075078.tif 000008