(57)【要約】【課題】電子制御装置の制御プログラムが起動されるまでの時間を短縮する。【解決手段】電子制御装置１００は、電気的にデータを書き換え可能なフラッシュＲＯＭ１４０及びＥＥＰＲＯＭ１６０と、ＣＰＵ１２０と、を備え、制御プログラム３２０をフラッシュＲＯＭ１４０に書き込み可能であると共に、制御プログラム３２０の正誤を検証するプログラム識別子１６０ＡをＥＥＰＲＯＭ１６０に書き込み可能である。そして、ＣＰＵ１２０は、ＥＥＰＲＯＭ１６０におけるプログラム識別子１６０Ａの書き込み状態に応じて、制御プログラム３２０に予め格納されたプログラム識別子の初期値３２０Ａ又はＥＥＰＲＯＭ１６０に格納されたプログラム識別子１６０Ａのいずれかを選択して、制御プログラム３２０の正誤を検証する。【選択図】図６
2019061520.tif 000002
【特許請求の範囲】
【請求項１】
電気的にデータを書き換え可能な第１の不揮発性メモリと、電気的にデータを書き換え可能な第２の不揮発性メモリと、プロセッサと、を備え、制御プログラムを前記第１の不揮発性メモリに書き込み可能であると共に、前記制御プログラムの正誤を検証する識別子を前記第２の不揮発性メモリに書き込み可能な電子制御装置であって、
前記プロセッサは、前記第２の不揮発性メモリにおける識別子の書き込み状態に応じて、前記制御プログラムに予め格納された識別子又は前記第２の不揮発性メモリに書き込まれた識別子のいずれかを選択して、前記制御プログラムの正誤を検証するように構成された、
電子制御装置。
【請求項２】
前記プロセッサは、前記第２の不揮発性メモリに識別子が書き込まれていれば、当該識別子を選択し、前記第２の不揮発性メモリに識別子が書き込まれていなければ、前記制御プログラムに予め格納された識別子を選択するように構成された、
請求項１に記載の電子制御装置。
【請求項３】
前記プロセッサは、前記第２の不揮発性メモリに識別子が書き込まれていなければ、前記第１の不揮発性メモリに書き込まれた制御プログラムに従って、当該制御プログラムに予め格納された識別子を前記第２の不揮発性メモリにコピーするように構成された、
請求項１又は請求項２に記載の電子制御装置。
【請求項４】
前記プロセッサは、前記第２の不揮発性メモリが正常である場合、前記制御プログラムに予め格納された識別子を前記第２の不揮発性メモリにコピーするように構成された、
請求項３に記載の電子制御装置。
【請求項５】
前記プロセッサは、前記第２の不揮発性メモリが初期状態であるか否かに応じて、当該第２の不揮発性メモリに識別子が書き込まれているか否かを判断するように構成された、
請求項１〜請求項４のいずれか１つに記載の電子制御装置。
【請求項６】
前記プロセッサは、前記第２の不揮発性メモリに書き込まれた識別子が正常である場合、当該第２の不揮発性メモリに書き込まれた識別子を選択して、前記制御プログラムの正誤を検証するように構成された、
請求項１〜請求項５のいずれか１つに記載の電子制御装置。
【請求項７】
前記プロセッサは、前記第２の不揮発性メモリに書き込まれた識別子が異常である場合、前記第１の不揮発性メモリに書き込まれた制御プログラムの実行を禁止するように構成された、
請求項１〜請求項６のいずれか１つに記載の電子制御装置。
【請求項８】
前記プロセッサは、前記第１の不揮発性メモリに書き込まれている起動プログラムに従って、前記制御プログラムの正誤を検証するように構成された、
請求項１〜請求項７のいずれか１つに記載の電子制御装置。
【請求項９】
電気的にデータを書き換え可能な第１の不揮発性メモリと、電気的にデータを書き換え可能な第２の不揮発性メモリと、を備え、制御プログラムを前記第１の不揮発性メモリに書き込み可能であると共に、前記制御プログラムの正誤を検証する識別子を前記第２の不揮発性メモリに書き込み可能な電子制御装置のプロセッサが、
前記第２の不揮発性メモリにおける識別子の書き込み状態に応じて、前記制御プログラムに予め格納された識別子又は前記第２の不揮発性メモリに書き込まれた識別子のいずれかを選択して、前記制御プログラムの正誤を検証する、
制御プログラム検証方法。
【請求項１０】
前記プロセッサが、前記第２の不揮発性メモリに識別子が書き込まれていなければ、前記第１の不揮発性メモリに書き込まれた制御プログラムに従って、当該制御プログラムに予め格納された識別子を前記第２の不揮発性メモリにコピーする、
請求項９に記載の制御プログラム検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動車などに搭載される電子制御装置、及び、制御プログラムの正誤を検証する方法に関する。
【背景技術】
【０００２】
自動車などに搭載される電子制御装置は、起動プログラム及び制御プログラム（各種パラメータを含む）を格納する、電気的にデータを書き換え可能なフラッシュＲＯＭ（Read Only Memory）を備えている。また、制御プログラムの正誤を検証するため、フラッシュＲＯＭより書き換え可能な回数が多いＥＥＰＲＯＭ（Electrically Erasable and Programmable ROM）に、制御プログラムの正誤を検証するためのプログラム識別子を格納することが検討されている。ＥＥＰＲＯＭにプログラム識別子を格納するとき、特開平７−２３９７７７号公報（特許文献１）で提案された技術を利用することができる。即ち、この提案技術を利用すると、フラッシュＲＯＭに起動プログラム及び制御プログラムを書き込んで電子制御装置を起動すると、制御プログラムの正誤を検証するプログラム識別子がＥＥＰＲＯＭに書き込まれる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−２３９７７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、プログラム識別子がＥＥＰＲＯＭに書き込まれてから制御プログラムの実行が開始されるため、ＥＥＰＲＯＭへのデータ書き込み速度が比較的遅いことに起因して、制御プログラムが起動されるまでにある程度の時間が必要であった。制御プログラムの起動が遅いと、例えば、電子制御装置の製造工程における工数が増加するなど、製造上の課題が惹起されてしまう。
【０００５】
そこで、本発明は、制御プログラムが起動されるまでの時間を短縮することができる、電子制御装置及び制御プログラム検証方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
このため、電子制御装置は、電気的にデータを書き換え可能な第１の不揮発性メモリと、電気的にデータを書き換え可能な第２の不揮発性メモリと、プロセッサと、を備え、制御プログラムを第１の不揮発性メモリに書き込み可能であると共に、制御プログラムの正誤を検証する識別子を第２の不揮発性メモリに書き込み可能である。そして、プロセッサは、第２の不揮発性メモリにおける識別子の書き込み状態に応じて、制御プログラムに予め格納された識別子又は第２の不揮発性メモリに書き込まれた識別子のいずれかを選択して、制御プログラムの正誤を検証する。
【発明の効果】
【０００７】
本発明によれば、電子制御装置において、制御プログラムが起動されるまでの時間を短縮することができる。
【図面の簡単な説明】
【０００８】
【図１】電子制御装置の一例を示す概略図である。
【図２】ＥＥＰＲＯＭの記憶領域の一例を示す説明図である。
【図３】起動プログラムによる起動処理の一例を示すフローチャートである。
【図４】起動プログラムによる起動処理の一例を示すフローチャートである。
【図５】制御プログラムによる制御処理の一例を示すフローチャートである。
【図６】ＥＥＰＲＯＭにプログラム識別子を書き込んだ状態の概要図である。
【図７】フラッシュＲＯＭに複数の制御プログラムが書き込まれる場合の対応方法の説明図である。
【図８】ＥＥＰＲＯＭの素子異常を検出する方法の説明図である。
【図９】ＥＥＰＲＯＭの素子異常を検出する他の方法の説明図である。
【図１０】フラッシュＲＯＭの書換え残数を把握する方法の説明図であって、フラッシュＲＯＭに制御プログラムが書き込まれた直後の説明図である。
【図１１】フラッシュＲＯＭの書換え残数を把握する方法の説明図であって、ＥＥＰＲＯＭに書換え残数が転送された状態の説明図である。
【図１２】フラッシュＲＯＭの書換え残数を把握する方法の説明図であって、ＥＥＰＲＯＭの書換え残数を更新した状態の説明図である。
【図１３】フラッシュＲＯＭの書換え残数を把握する方法の説明図であって、フラッシュＲＯＭの制御プログラムの書き換え領域を消去した状態の説明図である。
【図１４】フラッシュＲＯＭの書換え残数を把握する方法の説明図であって、フラッシュＲＯＭの制御プログラムを書き換えた状態の説明図である。
【発明を実施するための形態】
【０００９】
以下、添付された図面を参照し、本発明を実施するための実施形態について詳述する。
図１は、自動車などに搭載される電子制御装置１００の一例を示す。
【００１０】
電子制御装置１００は、プログラムに記述された命令セットを実行するＣＰＵ（Central Processing Unit)１２０と、電気的にデータを書き換え可能なフラッシュＲＯＭ１４０と、電気的にデータを書き換え可能なＥＥＰＲＯＭ１６０と、通信制御部１８０と、を備えている。ＣＰＵ１２０、フラッシュＲＯＭ１４０、ＥＥＰＲＯＭ１６０及び通信制御部１８０は、バス２００を介して、電気的に相互接続されている。ここで、ＣＰＵ１２０、フラッシュＲＯＭ１４０及びＥＥＰＲＯＭ１６０は、夫々、プロセッサ、第１の不揮発性メモリ及び第２の不揮発性メモリの一例として挙げられる。なお、電子制御装置１００は、上記構成に加え、ＣＰＵ１２０の一時的な作業領域となる揮発性メモリの一例として挙げられる、図示しないＲＡＭ（Random Access Memory）を更に備えている。
【００１１】
通信制御部１８０は、電子制御装置１００に対して着脱可能に接続される外部機器２２０との通信インタフェースを提供する。外部機器２２０は、フラッシュＲＯＭ１４０に格納された各種データ、ＥＥＰＲＯＭ１６０に格納された各種データを書き換えることができる。また、電子制御装置１００には、フラッシュＲＯＭ１４０及びＥＥＰＲＯＭ１６０に任意のデータを初めて書き込むためのＲＯＭライタ２４０が着脱可能に接続される。ここで、ＲＯＭライタ２４０は、例えば、ＣＰＵ、フラッシュＲＯＭ、ＲＡＭ及び通信制御部などを内蔵したマイクロコンピュータからなり、電子制御装置１００と相互通信して、フラッシュＲＯＭ１４０及びＥＥＰＲＯＭ１６０に任意のデータを書き込む。
【００１２】
電子制御装置１００の製造工程において、作業者が、電子制御装置１００に対してＲＯＭライタ２４０を接続し、所定の操作を行うことで、フラッシュＲＯＭ１４０に起動プログラム３００及び制御プログラム３２０を夫々書き込む。ここで、フラッシュＲＯＭ１４０に起動プログラム３００及び制御プログラム３２０を書き込む場合には、フラッシュＲＯＭ１４０の書き込み領域を消去し、そこに起動プログラム３００及び制御プログラム３２０を書き込む。また、フラッシュＲＯＭ１４０の制御プログラム３２０を更新する（書き換える）場合にも、これと同様に、フラッシュＲＯＭ１４０の書き込み領域を消去し、そこに新たな制御プログラム３２０を書き込む。
【００１３】
起動プログラム３００は、別名「ブートプログラム」といい、電子制御装置１００の電源が投入されると、オペレーティングシステムなどの基本的なソフトウエアをＲＡＭに展開し、制御プログラム３２０を実行できるようにする。制御プログラム３２０は、例えば、制御対象機器である燃料噴射弁、点火プラグ、自動変速機、ブラシレスモータなどを電子制御するソフトウエアであって、その正誤を検証するためのプログラム識別子の初期値３２０Ａが所定領域に格納されている。ここで、プログラム識別子の初期値３２０Ａは、例えば、チェックサム、ハッシュ関数ＭＤ５などを利用して、プログラム識別子の格納領域を除いた制御プログラム３２０のコードから演算した値とすることができる。
【００１４】
ＥＥＰＲＯＭ１６０は、電子制御装置１００のハードウエアが製造された直後には、初期状態、具体的には、すべてのビットに“１”が書き込まれた状態になっている。そして、ＥＥＰＲＯＭ１６０の記憶領域は、図２に示すように、消去単位となる所定サイズを有するＮ個のブロック１〜Ｎに分割され、これが消去されるとすべてのビットが“１”になる。また、ＥＥＰＲＯＭ１６０の所定ブロック、例えば、ブロック１及びブロック３は、夫々、ＥＥＰＲＯＭ１６０が初期状態であることを示す初期化済みマーク書き込み領域、プログラム識別子書き込み領域として予め割り当てられている。なお、プログラム識別子書き込み領域には、プログラム識別子が正常であるか否かを判断するためのチェックサムが付与されている。
【００１５】
図３及び図４は、電子制御装置１００に電源が投入されたことを契機として、フラッシュＲＯＭ１４０に格納された起動プログラム３００に従って、ＣＰＵ１２０が実行する起動処理の一例を示す。
【００１６】
ステップ１（図では「Ｓ１」と略記する。以下同様。）では、ＣＰＵ１２０が、内部クロック及び入出力端子を初期状態に設定する。
【００１７】
ステップ２では、ＣＰＵ１２０が、例えば、起動プログラム３００に予め格納されたＣＲＣ（Cyclic Redundancy Check）などの誤り検出符号を利用して、起動プログラム３００が正常であるか否かを判断する。そして、ＣＰＵ１２０は、起動プログラム３００が正常であると判断すれば、処理をステップ３へと進める（Ｙｅｓ）。一方、ＣＰＵ１２０は、起動プログラム３００が正常でない、即ち、少なくとも一部のデータが壊れていると判断すれば、処理をステップ９へと進める（Ｎｏ）。なお、起動プログラム３００が正常であるか否かは、例えば、電子素子で構成された電子回路によって判断することもできる。
【００１８】
ステップ３では、ＣＰＵ１２０が、例えば、ＲＡＭの記憶領域に所定のテストデータが正常に書き込めるか否かを介して、ＲＡＭが正常であるか否かを判断する。そして、ＣＰＵ１２０は、ＲＡＭが正常であると判断すれば、処理をステップ４へと進める（Ｙｅｓ）。一方、ＣＰＵ１２０は、ＲＡＭが正常でない、即ち、その少なくとも一部の素子が壊れていると判断すれば、処理をステップ９へと進める（Ｎｏ）。
【００１９】
ステップ４では、ＣＰＵ１２０が、例えば、ＥＥＰＲＯＭ１６０のブロック１のすべてのビットが“１”になっているか否かを判断することにより、ＥＥＰＲＯＭ１６０が初期状態であるか否かを確認する。
【００２０】
ステップ５では、ＣＰＵ１２０は、ＥＥＰＲＯＭ１６０が初期状態であると判断すれば、処理をステップ６へと進める（Ｙｅｓ）。一方、ＣＰＵ１２０は、ＥＥＰＲＯＭ１６０が初期状態でない、即ち、詳細を後述するように、制御プログラム３２０のプログラム識別子が既に書き込まれていると判断すれば、処理をステップ１１へと進める（Ｎｏ）。
【００２１】
ステップ６では、ＣＰＵ１２０が、例えば、チェックサム、ハッシュ関数ＭＤ５などを利用して、プログラム識別子の初期値３２０Ａの格納領域を除いた制御プログラム３２０のコードからプログラム識別子を演算する。
【００２２】
ステップ７では、ＣＰＵ１２０が、ステップ６で演算したプログラム識別子と制御プログラム３２０に予め格納されたプログラム識別子の初期値３２０Ａとが一致するか否かを判断する。そして、ＣＰＵ１２０は、演算したプログラム識別子とプログラム識別子の初期値３２０Ａとが一致すると判断すれば、処理をステップ８へと進める（Ｙｅｓ）。一方、ＣＰＵ１２０は、演算したプログラム識別子とプログラム識別子の初期値３２０Ａとが一致していないと判断すれば、処理をステップ１０へと進める（Ｎｏ）。
【００２３】
ステップ８では、ＣＰＵ１２０が、フラッシュＲＯＭ１４０に格納された制御プログラム３２０の実行を開始する。なお、制御プログラム３２０の詳細については、図５を参照して後述する。
【００２４】
ステップ９では、起動プログラム３００又はＲＡＭが異常であったため、ＣＰＵ１２０が、起動プログラム異常処理を実行する。ここで、起動プログラム異常処理としては、例えば、無限ループを実行し、これ以降の起動プログラム３００及び制御プログラム３２０を実行しないようにする。
【００２５】
ステップ１０では、演算したプログラム識別子とプログラム識別子の初期値３２０Ａとが一致していないので、ＣＰＵ１２０が、制御プログラム更新処理を実行する。即ち、フラッシュＲＯＭ１４０に格納された制御プログラム３２０の少なくとも一部のデータが壊れている可能性があるため、ＣＰＵ１２０は、電子制御装置１００に接続された外部機器２２０と協働して、フラッシュＲＯＭ１４０に書き込まれた制御プログラム３２０を更新する。
【００２６】
ステップ１１では、ＥＥＰＲＯＭ１６０が初期状態ではないため、ＣＰＵ１２０が、例えば、ＥＥＰＲＯＭ１６０に予め格納されたＣＲＣなどの誤り検出符号を利用して、ＥＥＰＲＯＭ１６０が正常であるか否かを判断する。そして、ＣＰＵ１２０は、ＥＥＰＲＯＭ１６０が正常であると判断すれば、処理をステップ１２へと進める（Ｙｅｓ）。一方、ＣＰＵ１２０は、ＥＥＰＲＯＭ１６０が正常でない、即ち、少なくとも一部のデータが壊れていると判断すれば、処理をステップ１０へと進める（Ｎｏ）。
【００２７】
ステップ１２では、ＣＰＵ１２０が、例えば、チェックサム、ハッシュ関数ＭＤ５などを利用して、プログラム識別子の初期値３２０Ａの格納領域を除いた制御プログラム３２０のコードからプログラム識別子を演算する。
【００２８】
ステップ１３では、ＣＰＵ１２０が、ステップ１２で演算したプログラム識別子とＥＥＰＲＯＭ１６０に書き込まれたプログラム識別子１６０Ａとが一致するか否かを判断する。そして、ＣＰＵ１２０は、演算したプログラム識別子とプログラム識別子１６０Ａとが一致すると判断すれば、処理をステップ８へと進める（Ｙｅｓ）。一方、ＣＰＵ１２０は、演算したプログラム識別子とプログラム識別子１６０Ａとが一致していないと判断すれば、処理をステップ１０へと進める（Ｎｏ）。
【００２９】
図５は、フラッシュＲＯＭ１４０に格納された制御プログラム３２０に従って、ＣＰＵ１２０が実行する制御処理の一例を示す。
【００３０】
ステップ２１では、ＣＰＵ１２０が、制御対象機器の制御を開始する。即ち、ＣＰＵ１２０は、例えば、各種センサ、ＣＡＮ（Controller Area Network）を介して相互接続された他の電子制御装置からの信号に応じて、制御対象機器の操作量を演算して出力する。なお、この制御は、本実施形態の要部ではないため、その説明は省略する（以下同様）。また、以下に説明するステップ２２〜ステップ２５の処理中にも、制御対象機器を制御することが可能である。
【００３１】
ステップ２２では、ＣＰＵ１２０が、例えば、ＥＥＰＲＯＭ１６０のブロック１のすべてのビットが“１”になっているか否かを判断することにより、ＥＥＰＲＯＭ１６０が初期状態であるか否かを確認する。そして、ＣＰＵ１２０は、ＥＥＰＲＯＭ１６０が初期状態であると判断すれば、処理をステップ２３へと進める（Ｙｅｓ）。一方、ＣＰＵ１２０は、ＥＥＰＲＯＭ１６０が初期状態でない、即ち、制御プログラム３２０のプログラム識別子が既に書き込まれていると判断すれば、処理をステップ２６へと進める（Ｎｏ）。
【００３２】
ステップ２３では、ＣＰＵ１２０が、フラッシュＲＯＭ１４０に書き込まれた制御プログラム３２０からプログラム識別子の初期値３２０Ａを読み出し、図６に示すように、これをプログラム識別子１６０Ａとして、ＥＥＰＲＯＭ１６０のブロック３にコピーする。このとき、ＣＰＵ１２０は、プログラム識別子１６０Ａのチェックサムを演算し、図２に示すように、ブロック３の所定領域に書き込む。
【００３３】
ステップ２４では、ＣＰＵ１２０が、初期化済みマーク及びプログラム識別子を除く他の制御データを、ＥＥＰＲＯＭ１６０のブロック４以降に書き込む。なお、この処理は、必ずしも実行しなくてもよい。
【００３４】
ステップ２５では、ＣＰＵ１２０が、ＥＥＰＲＯＭ１６０のブロック１に初期化済みマークを書き込む。ここで、初期化済みマークは、データ消去状態を示す“１”以外であれば足りるが、例えば、何らかの原因によるビット化けを考慮して、“０”と“１”とがランダムに配置された３２ビット以上の値（例えば、“ＡＡＣＣ６６５５”など）とすることが望ましい。
【００３５】
ステップ２６では、ＣＰＵ１２０が、制御対象機器の制御を継続する。即ち、ＣＰＵ１２０は、ステップ２１と同様に、例えば、各種センサ、ＣＡＮを介して相互接続された他の電子制御装置からの信号に応じて、制御対象機器の操作量を演算して出力する。
【００３６】
かかる電子制御装置１００によれば、電子制御装置１００に電源が投入されたことを契機として、フラッシュＲＯＭ１４０に書き込まれた起動プログラム３００、ＲＡＭが正常であることを前提とし、ＥＥＰＲＯＭ１６０が初期状態であるか否かが判断される。ＥＥＰＲＯＭ１６０が初期状態であれば、フラッシュＲＯＭ１４０に書き込まれた制御プログラム３２０からプログラム識別子が演算され、これが制御プログラム３２０に予め格納されたプログラム識別子の初期値３２０Ａと一致しているか否かが判断される。そして、演算されたプログラム識別子がプログラム識別子の初期値３２０Ａと一致していれば、ＥＥＰＲＯＭ１６０にプログラム識別子１６０Ａを書き込まず、フラッシュＲＯＭ１４０に書き込まれた制御プログラム３２０の実行が開始される。一方、演算されたプログラム識別子がプログラム識別子の初期値３２０Ａと一致していなければ、制御プログラム３２０が更新される。
【００３７】
また、ＥＥＰＲＯＭ１６０が初期状態でなければ、フラッシュＲＯＭ１４０に書き込まれた制御プログラム３２０が正常であることを前提とし、制御プログラム３２０からプログラム識別子が演算され、これがＥＥＰＲＯＭ１６０に書き込まれたプログラム識別子１６０Ａと一致するか否かが判断される。そして、演算されたプログラム識別子がプログラム識別子１６０Ａと一致していれば、その制御プログラム３２０は正しいため、その実行が開始される。一方、演算されたプログラム識別子がプログラム識別子１６０Ａと一致していなければ、制御プログラム３２０が更新される。
【００３８】
要するに、電子制御装置１００においては、ＥＥＰＲＯＭ１６０におけるプログラム識別子１６０Ａの書き込み状態に応じて、制御プログラム３２０に予め格納されたプログラム識別子の初期値３２０Ａ、又は、ＥＥＰＲＯＭ１６０に書き込まれたプログラム識別子１６０Ａのいずれかが選択され、制御プログラム３２０の正誤が検証される。
【００３９】
その後、制御プログラム３２０の実行が開始されると、最初に、ＥＥＰＲＯＭ１６０が初期状態であるか否かが判定される。ＥＥＰＲＯＭ１６０が初期状態であれば、フラッシュＲＯＭ１４０に書き込まれた制御プログラム３２０のプログラム識別子の初期値３２０Ａが、プログラム識別子１６０ＡとしてＥＥＰＲＯＭ１６０にコピーされると共に、ＥＥＰＲＯＭ１６０のブロック１に初期化済みマークが書き込まれる。
【００４０】
従って、ＥＥＰＲＯＭ１６０の初期状態において電子制御装置１００が起動すると、ＥＥＰＲＯＭ１６０にプログラム識別子１６０Ａを書き込まずに、制御プログラム３２０の実行が開始される。そして、制御プログラム３２０において、プログラム識別子１６０ＡがＥＥＰＲＯＭ１６０に書き込まれる。このため、電子制御装置１００において、制御プログラム３２０が起動されるまでの時間を短縮することができる。
【００４１】
ここで、図７に示すように、フラッシュＲＯＭ１４０に複数のプログラム、例えば、制御プログラムＡ〜Ｃが書き込まれ、それぞれの制御プログラムＡ〜Ｃが外部機器２２０により書き換え可能な場合には、次のように対応することができる。
【００４２】
それぞれの制御プログラムＡ〜Ｃには、先の実施形態と同様に、その正誤を検証するためのプログラム識別子Ａ〜Ｃの初期値が所定領域に予め格納されている。また、ＥＥＰＲＯＭ１６０の３つのブロックは、制御プログラムＡ〜Ｃのプログラム識別子Ａ〜Ｃの書き込み領域として予め割り当てられている。そして、ＣＰＵ１２０は、制御プログラムＡ〜Ｃの実行を開始したとき、ＥＥＰＲＯＭ１６０が初期状態であれば、制御プログラムＡ〜Ｃの初期値を読み出し、これをＥＥＰＲＯＭ１６０の書き込み領域へとコピーする。なお、この処理は、制御プログラムＡ〜Ｃに従って実行される（以下同様）。
【００４３】
また、ＥＥＰＲＯＭ１６０の記憶領域は、以下のように使用することもできる。
ＥＥＰＲＯＭ１６０の所定ブロック、例えば、ブロック１、ブロック３及びブロック４は、図８に示すように、初期化済みマーク領域、プログラム識別子書き込み領域Ａ及びプログラム識別子書き込み領域Ｂとして予め割り当てられている。即ち、ＥＥＰＲＯＭ１６０の記憶領域では、制御プログラム３２０の正誤を検証するためのプログラム識別子１６０Ａを書き込むブロックが冗長化されている。なお、ブロック３及びブロック４には、先の実施形態と同様に、チェックサムＡ及びチェックサムＢが夫々付与されている（以下同様）。
【００４４】
ＣＰＵ１２０は、制御プログラム３２０の実行を開始したとき、ＥＥＰＲＯＭ１６０が初期状態であれば、制御プログラム３２０のプログラム識別子の初期値３２０Ａを読み出し、これをプログラム識別子書き込み領域Ａ及びプログラム識別子書き込み領域Ｂに二重に書き込む。次の電源投入後、ＣＰＵ１２０は、起動プログラム３００の実行を開始したとき、チェックサムＡを使用してプログラム識別子書き込み領域Ａのプログラム識別子１６０Ａ、及び、チェックサムを使用してプログラム識別子書き込み領域Ｂのプログラム識別子１６０Ａが正常であるか否かを判断する。
【００４５】
ＣＰＵ１２０は、２つのプログラム識別子１６０Ａが正常かつ一致していれば、ＥＥＰＲＯＭ１６０は正常であると判断する。ＣＰＵ１２０は、２つのプログラム識別子１６０Ａが正常かつ一致していなければ、ＥＥＰＲＯＭ１６０は異常であると診断する。ＣＰＵ１２０は、一方のプログラム識別子１６０Ａが正常かつ他方のプログラム識別子１６０Ａが異常であれば、ＥＥＰＲＯＭ１６０は正常であると判断し、一方のプログラム識別子１６０Ａを他方のプログラム識別子書き込み領域に書き込む。ＣＰＵ１２０は、２つのプログラム識別子が異常であれば、ＥＥＰＲＯＭ１６０は異常であると判断する。
【００４６】
従って、冗長化されたプログラム識別子書き込み領域Ａ及びプログラム識別子書き込み領域Ｂへのプログラム識別子１６０Ａの書き込み状態を比較することで、例えば、ＥＥＰＲＯＭ１６０の素子異常などを検知することができる。このため、電子制御装置１００の故障などを早期に検知することができ、例えば、制御対象機器の不適切な制御を抑制することができる。
【００４７】
ＥＥＰＲＯＭ１６０の初期状態又は消去後に、すべてのビットが不定値となる場合には、次のように対応することができる。
ＥＥＰＲＯＭ１６０の所定ブロック、例えば、ブロック１〜４は、図９に示すように、初期化済みマーク書き込み領域Ａ、初期化済みマーク書き込み領域Ｂ、プログラム識別子書き込み領域Ａ及びプログラム識別子書き込み領域Ｂとして予め割り当てられている。即ち、ＥＥＰＲＯＭ１６０においては、初期化済みマークを書き込むブロック、及び、制御プログラム３２０の正誤を検証するためのプログラム識別子１６０Ａを書き込むブロックが冗長化されている。
【００４８】
ＣＰＵ１２０は、ＥＥＰＲＯＭ１６０が初期状態であるか否かを判断するにあたり、初期化済みマーク書き込み領域Ａに初期化済みマークが書き込まれているか否か、及び、初期化済みマーク書き込み領域Ｂに初期化済みマークが書き込まれているか否かを判断する。
【００４９】
ＣＰＵ１２０は、初期化済みマーク書き込み領域Ａ及び初期化済みマーク書き込み領域Ｂに初期化済みマークが書き込まれていれば、ＥＥＰＲＯＭ１６０は初期化済み、即ち、ＥＥＰＲＯＭ１６０にプログラム識別子１６０Ａが既に書き込まれていると判断する。ＣＰＵ１２０は、初期化済みマーク書き込み領域Ａに初期化済みマークが書き込まれ、かつ、初期化済みマーク書き込み領域Ｂに初期化済みマークが書き込まれていなければ、ＥＥＰＲＯＭ１６０は初期化済みであると判断し、初期化済みマーク書き込み領域Ｂに初期化済みマークを書き込む。ＣＰＵ１２０は、初期化済みマーク書き込み領域Ａに初期化済みマークが書き込まれておらず、かつ、初期化済みマーク書き込み領域Ｂに初期化済みマークが書き込まれていれば、ＥＥＰＲＯＭ１６０は初期化済みであると判断し、初期化済みマーク書き込み領域Ａに初期化済みマークを書き込む。ＣＰＵ１２０は、初期化済みマーク書き込み領域Ａ及び初期化済みマーク書き込み領域Ｂに初期化済みマークが書き込まれていなければ、ＥＥＰＲＯＭ１６０が初期状態であると判断する。この場合、ＣＰＵ１２０は、制御プログラム３２０の実行を開始したとき、プログラム識別子１６０Ａのコピー及び制御データの書き込みを実行した後に、初期化済みマーク書き込み領域Ａ及び初期化済みマーク書き込み領域Ｂに初期化済みマークを書き込む。
【００５０】
次の電源投入後、ＣＰＵ１２０は、起動プログラム３００の実行を開始したとき、チェックサムＡを使用してプログラム識別子書き込み領域Ａのプログラム識別子１６０Ａ、及び、チェックサムＢを使用してプログラム識別子書き込み領域Ｂのプログラム識別子１６０Ａが正常であるか否かを判断する。そして、ＣＰＵ１２０は、２つのプログラム識別子１６０Ａが正常でありかつ一致していれば、ＥＥＰＲＯＭ１６０は正常であると判断する。ＣＰＵ１２０は、２つのプログラム識別子１６０Ａが正常でありかつ一致していなければ、ＥＥＰＲＯＭ１６０は異常であると判断する。ＣＰＵ１２０は、一方のプログラム識別子１６０Ａが正常でありかつ他方のプログラム識別子１６０Ａが異常であれば、ＥＥＰＲＯＭ１６０は正常であると判断し、一方のプログラム識別子１６０Ａを他方のプログラム識別子書き込み領域に書き込む。ＣＰＵ１２０は、２つのプログラム識別子１６０Ａが異常であれば、ＥＥＰＲＯＭ１６０は異常であると判断する。
【００５１】
従って、先の実施形態と同様に、冗長化されたプログラム識別子書き込み領域Ａ及びプログラム識別子書き込み領域Ｂへのプログラム識別子１６０Ａの書き込み状態を比較することで、例えば、ＥＥＰＲＯＭ１６０の素子異常などを検知することができる。このため、電子制御装置１００の故障などを早期に検知することができ、例えば、制御対象機器の不適切な制御を抑制することができる。
【００５２】
ＥＥＰＲＯＭ１６０は、次のように、フラッシュＲＯＭ１４０の書換え可能残数の管理にも使用することができる。なお、フラッシュＲＯＭ１４０に書き込まれる制御プログラム３２０には、プログラム識別子の初期値３２０Ａに加え、フラッシュＲＯＭ１４０の書換え残数の初期値、例えば、書換え可能残数が１００回である場合、その書き込み後の初期値９９が格納されているものとする。また、ＥＥＰＲＯＭ１６０には、プログラム識別子１６０Ａに加え、制御プログラムＡ及びＢに関するフラッシュＲＯＭ１４０の書換え残数が夫々格納されるものとする。さらに、以下の説明においては、フラッシュＲＯＭ１４０に制御プログラムＡ及びＢが格納されることを前提とするが、その個数は任意である。
【００５３】
フラッシュＲＯＭ１４０に制御プログラムＡ及びＢが初めて書き込まれた直後には、図１０に示すように、制御プログラムＡ及びＢの書換え残数初期値が夫々９９に設定されている。この状態では、ＥＥＰＲＯＭ１６０に格納される、制御プログラムＡ及びＢの書換え残数は未設定になっている。
【００５４】
フラッシュＲＯＭ１４０に制御プログラムＡ及びＢを書き込んで、電子制御装置１００に電源を投入すると、起動プログラム３００により制御プログラムＡ及びＢが夫々起動され、図１１に示すように、制御プログラムＡ及びＢの書換え残数９９がＥＥＰＲＯＭ１６０に転送される。その後、電子制御装置１００に外部機器２２０が接続され、例えば、制御プログラムＡを書き換える場合、図１２に示すように、ＥＥＰＲＯＭ１６０に書き込まれた制御プログラムＡの書換え残数が９８に更新される。制御プログラムＡの書換え残数の更新後、図１３に示すように、フラッシュＲＯＭ１４０の制御プログラムＡの格納領域が消去される。そして、外部機器２２０から電子制御装置１００へと制御プログラムＡ’が転送され、図１４に示すように、フラッシュＲＯＭ１４０に制御プログラムＡ’が書き込まれる。
【００５５】
この状態では、制御プログラムＡ’に格納された書換え残数が９９となっているが、ＥＥＰＲＯＭ１６０における制御プログラムＡの書換え残数は９８のままである。従って、ＥＥＰＲＯＭ１６０の書換え残数を参照することで、フラッシュＲＯＭ１４０に制御プログラムＡを書換え可能な回数を把握することができる。
【００５６】
電子制御装置１００が車両に搭載されて市場に流通した後、例えば、機能向上などを目的として、フラッシュＲＯＭ１４０に書き込まれた制御プログラム３２０を書き換えることが想定される。この場合、電子制御装置１００に接続された外部機器２２０は、フラッシュＲＯＭ１４０の制御プログラム３２０を書き換えると共に、ＥＥＰＲＯＭ１６０に書き込まれた制御プログラム３２０のプログラム識別子１６０Ａを書き換えるようにすればよい。なお、外部機器２２０は、制御プログラム３２０に限らず、起動プログラム３００を書き換えるようにしてもよい。
【００５７】
上記実施形態について、様々な変形例を説明したが、これらを任意に組み合わせ、又は、その一部を組み替えることで、新たな変形例を生み出すことができる。従って、本発明は、上記実施形態に記載された内容に限らず、当業者であればこれらから容易に想起し得る技術的思想を含んだものであることを理解すべきである。
【符号の説明】
【００５８】
１００  電子制御装置
１２０  ＣＰＵ（プロセッサ）
１４０  フラッシュＲＯＭ（第１の不揮発性メモリ）
１６０  ＥＥＰＲＯＭ（第２の不揮発性メモリ）
１６０Ａ  プログラム識別子
３００  起動プログラム
３２０  制御プログラム
３２０Ａ  プログラム識別子の初期値
【図１】
2019061520.tif 000003
【図２】
2019061520.tif 000004
【図３】
2019061520.tif 000005
【図４】
2019061520.tif 000006
【図５】
2019061520.tif 000007
【図６】
2019061520.tif 000008
【図７】
2019061520.tif 000009
【図８】
2019061520.tif 000010
【図９】
2019061520.tif 000011
【図１０】
2019061520.tif 000012
【図１１】
2019061520.tif 000013
【図１２】
2019061520.tif 000014
【図１３】
2019061520.tif 000015
【図１４】
2019061520.tif 000016