(57)【要約】【課題】制御プログラムの有効性を判定して実行する車載電子制御装置を提供する。【解決手段】制御プログラムが異なるタイミングで書き込まれる書換え可能な複数のプログラム領域ＳＡ，ＳＢを有するメモリ２５と、複数のプログラム領域ＳＡ，ＳＢに記憶されている複数の制御プログラムＰＡ，ＰＢの中から実行する制御プログラムを選択するように構成された制御選択部と、を備える。メモリ２５には、プログラム領域ＳＡ，ＳＢのそれぞれに対して、制御プログラムＰＡ，ＰＢの書き込みが完了しているか否かの状態を示す完了フラグＦｌｇＡ，ＦｌｇＢ、及び、当該プログラム領域に記憶されている制御プログラムが何番目に書き込まれたものであるかを示す書込みカウンタＣｎｔＡ，ＣｎｔＢ、が記憶されている。制御選択部は、完了フラグＦｌｇＡ，ＦｌｇＢ及び書込みカウンタＣｎｔＡ，ＣｎｔＢを用いて、実行する制御プログラムを選択する。【選択図】図２
2018092241.tif 000002
【特許請求の範囲】
【請求項１】
車両に搭載された制御対象を制御するためのプログラムを制御プログラムとし、前記制御プログラムが記憶される書換え可能な記憶領域をプログラム領域として、同じ前記制御対象に対する前記制御プログラムが異なるタイミングで書き込まれる複数のプログラム領域（ＳＡ，ＳＢ）を有するメモリ（２５）と、
前記複数のプログラム領域に記憶されている複数の前記制御プログラム（ＰＡ，ＰＢ）の中から実行する前記制御プログラムを選択するように構成された制御選択部（Ｓ１０〜Ｓ４０，Ｓ７０，Ｓ８０）と、を備え、
前記メモリには、前記プログラム領域のそれぞれに対して、前記制御プログラムの書き込みが完了しているか否かの状態を示す完了フラグ（ＦｌｇＡ，ＦｌｇＢ）、及び、当該プログラム領域に記憶されている制御プログラムが何番目に書き込まれたものであるかを示す書込みカウンタ（ＣｎｔＡ，ＣｎｔＢ）、が記憶されており、
前記制御選択部は、前記完了フラグ及び前記書込みカウンタを用いて、実行する前記制御プログラムを選択するように構成されている、車載電子制御装置。
【請求項２】
前記メモリには、電源投入時に実行されるブートプログラムが記憶されており、
前記制御選択部は、前記ブートプログラムを実行する処理により実現される機能である、請求項１に記載の車載電子制御装置。
【請求項３】
前記制御選択部は、前記複数の制御プログラムのうち、前記書込みカウンタの値が他の前記書込みカウンタの値よりも大きく、且つ、前記完了フラグが完了状態を示している前記プログラム領域の前記制御プログラムを、実行対象として選択するように構成されている、請求項２に記載の車載電子制御装置。
【請求項４】
前記メモリには、前記制御プログラムを書き換えるためのリプロプログラムが記憶されており、
前記制御選択部により、前記書込みカウンタの値が他の前記書込みカウンタの値よりも大きくない、あるいは、前記完了フラグが完了状態を示している前記プログラム領域が存在しないと判定された場合に、前記リプロプログラムを実行し、且つ、前記車載電子制御装置に接続された外部装置（７０，８０，９０）へ、エラーステータスを通知するように構成されたエラー対応部（Ｓ５０，Ｓ６０，Ｓ９０，Ｓ１００）を、更に備える、請求項２又は３に記載の車載電子制御装置。
【請求項５】
実行中の前記制御プログラムを実行プログラムとして、前記制御プログラムの実行による制御動作を監視し、前記制御動作の異常を検出するように構成された異常検出部（Ｓ５００）と、
前記異常検出部により前記制御動作の異常が検出された場合に、前記実行プログラムと異なる前記制御プログラムが記憶されている前記プログラム領域に対する前記書込みカウンタの値を、前記実行プログラムが記憶されている前記プログラム領域に対する前記書込みカウンタの値よりも大きな値に更新し、且つ、前記車載電子制御装置に接続された外部装置へ、電源再起動の要求を通知するように構成された異常対応部（Ｓ５１０，Ｓ５２０）と、を更に備える、請求項１〜４のいずれか１項に記載の車載電子制御装置。
【請求項６】
実行中の前記制御プログラムを実行プログラムとして、
前記制御プログラムの実行による制御動作を監視し、前記制御動作の異常を検出するように構成された異常検出部（Ｓ４００）と、
前記異常検出部により前記制御動作の異常が検出された場合に、前記車載電子制御装置に接続された外部装置へ、エラーステータスを通知し、且つ、前記実行プログラムから前記実行プログラムと異なる前記制御プログラムへ実行対象を切替えるように構成された異常対応部（Ｓ４１０，Ｓ４４０，Ｓ４５０）と、を備える、請求項１〜４のいずれか１項に記載の車載電子制御装置。
【請求項７】
前記制御対象は、前記車両の走行制御に関する制御対象であり、
前記制御選択部により、いずれの前記制御プログラムも実行対象として選択されない場合には、前記車両の駆動を制御する他の車載電子制御装置へ制御停止の要求を送信して、前記車両の駆動を停止する制御を実行させるように構成された停止要求部（Ｓ５０，Ｓ９０）を備える、請求項１〜６のいずれか１項に記載の車載電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、書換え可能な記憶領域に複数の制御プログラムが記憶されるメモリを備えた車載電子制御装置に関する。
【背景技術】
【０００２】
この種の電子制御装置として、特許文献１に記載の電子制御装置がある。特許文献１に記載の電子制御装置は、制御プログラムを実行する際に、複数の分割記憶領域のうちの１つを選択し、選択した分割記憶領域である実行領域から制御プログラムを読み込んで実行する。そして、上記電子制御装置は、制御プログラムを書換える際には、実行中の制御プログラムを書き換えて動作に支障が生じないように、実行領域とは異なる分割記憶領域である非実行領域を選択し、その非実行領域の制御プログラムの書換えを実行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−２５４２６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記電子制御装置は、制御プログラムを実行する際に、制御プログラムの有効性を判定することなく、読み込んで実行している。そのため、例えば制御プログラムの書込みが完了していない場合など、有効でない制御プログラムが実行される可能性がある。有効でない制御プログラムが実行されると、意図しない車両制御状態が継続されるおそれがある。
【０００５】
本開示は、上記実情に鑑みてなされたものであり、制御プログラムの有効性を判定して実行する車載電子制御装置を提供する。
【課題を解決するための手段】
【０００６】
本開示は、車載電子制御装置であって、車両に搭載された制御対象を制御するためのプログラムを制御プログラムとし、制御プログラムが記憶される書換え可能な記憶領域をプログラム領域として、同じ制御対象に対する制御プログラムが異なるタイミングで書き込まれる複数のプログラム領域（ＳＡ，ＳＢ）を有するメモリ（２５）と、複数のプログラム領域に記憶されている複数の制御プログラム（ＰＡ，ＰＢ）の中から実行する制御プログラムを選択するように構成された制御選択部（Ｓ１０〜Ｓ４０，Ｓ７０，Ｓ８０）と、を備える。メモリには、プログラム領域のそれぞれに対して、制御プログラムの書き込みが完了しているか否かの状態を示す完了フラグ（ＦｌｇＡ，ＦｌｇＢ）、及び、当該プログラム領域に記憶されている制御プログラムが何番目に書き込まれたものであるかを示す書込みカウンタ（ＣｎｔＡ，ＣｎｔＢ）、が記憶されている。制御選択部は、完了フラグ及び書込みカウンタを用いて、実行する制御プログラムを選択するように構成されている。
【０００７】
本開示によれば、異なるタイミングで書き込まれた制御プログラムが、異なるプログラム領域に記憶されているとともに、メモリには、各プログラム領域に対して、完了フラグと書込みカウンタとが記憶されている。よって、各制御プログラに対応した完了フラグ及び書込みカウンタを用いて各制御プログラムの有効性を判定し、有効な制御プログラムを実行することができる。
【０００８】
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【０００９】
【図１】車載電子制御システムの概略構成を示すブロック図である。
【図２】車載電子制御装置の記憶領域の構成を示す図である。
【図３】ブートプログラムを実行する処理手順を示すフローチャートである。
【図４】第１実施形態に係る制御動作を監視する処理手順を示すフローチャートである。
【図５】リプロプログラムを実行する処理手順を示すフローチャートである。
【図６】制御プログラムの書込みに伴うカウンタ及び完了フラグの更新を説明する説明図である。
【図７】第２実施形態に係る制御動作を監視する処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら、発明を実施するための形態を説明する。
（第１実施形態）
＜１．構成＞
まず、本実施形態に係る車載電子制御システム１０の全体構成について、図１を参照して説明する。車載電子制御システム１０は、車両に搭載されており、接続ノード２０、接続ノード３０、中継装置４０、及び無線通信装置５０を備える。接続ノード２０、接続ノード３０、中継装置４０、及び無線通信装置５０は、ＣＡＮやイーサネットの通信線で接続されて、車両ネットワークを構成している。なお、ＣＡＮ及びイーサネットは登録商標である。
【００１１】
接続ノード２０は、車載電子制御装置（以下、ＥＣＵ）であり、エンジンやブレーキなどの車両に搭載された制御対象の制御を行う。ＥＣＵは、ＣＰＵ２３、ＲＡＭ２４、ＲＯＭ２５、及びデータ送受信部２２を備えたマイクロコンピュータ２１（以下、マイコン２１）を主体として構成されている。ＣＰＵ２３は、演算装置であり、ＲＡＭ２４は、ＣＰＵ２３の演算結果等を一時記憶するための揮発性メモリである。ＲＯＭ２５は、書換え可能な記憶領域を有する不揮発性メモリであり、例えば、ＥＥＰＲＯＭである。ＲＯＭ２５には、ＣＰＵ２３により実行されるプログラムが記憶される。データ送受信部２２は、車両ネットワークを構成する各装置との間で、通信線を介してデータの送受信を行う。なお、ＲＯＭ２５の構成の詳細については後述する。
【００１２】
接続ノード３０は、接続ノード２０と同様に、車両に搭載された制御対象の制御を行うＥＣＵである。図１では省略しているが、車両には多くの制御対象が搭載されており、各制御対象を制御する多くのＥＣＵが接続ノードとして車両ネットワークを構成している。
【００１３】
無線通信装置５０は、車両ネットワーク外の外部装置と無線接続して、データ送受信部５１を介して、データの送受信を行う。無線接続する外部装置としては、センタ８０や携帯端末９０が挙げられる。センタ８０は、車両のユーザが、ディーラに車両を持ち込むことなく、ＲＯＭ２５に記憶されているプログラムをアップデートできるように設置されている。センタ８０は、ＲＯＭ２５に記憶されているプログラムのアップデートが必要になったときに、無線通信装置５０を介して、接続ノード２０へ新しいプログラムを送信する。携帯端末９０は、車両のユーザが所持する機器であり、例えば、スマートフォンやタブレット端末である。携帯端末９０は、無線通信装置５０を介して、接続ノード２０にエラーが発生した時等に通知を受け取る。
【００１４】
中継装置４０は、無線通信装置５０と、各接続ノードとに接続されており、外部装置から無線通信装置５０を介して車両ネットワークに送出されたデータを、接続ノードのいずれかに中継する。また、中継装置４０は、接続ノードのいずれかから車両ネットワークに送出されたデータを、無線通信装置５０へ中継する。さらに、中継装置４０は、外部装置である診断装置７０と有線接続され、診断装置７０と接続ノードと間のデータの送受信を中継する。診断装置７０は、各接続ノードから制御対象に関するデータを受信して、車両の診断を行う。
【００１５】
次に、ＲＯＭ２５の構成について、図２を参照して説明する。ＲＯＭ２５は、書換え可能な記憶領域である書換え領域２５１と、書換え不可能な記憶領域である非書換え領域２５２と、を備える。本実施形態では、ＲＯＭ２５がメモリに相当する。
【００１６】
書換え領域２５１は、異なるタイミング制御プログラムが書込まれる複数のプログラム領域ＳＡ，Ｂを有する。プログラム領域ＳＡには制御プログラムＰＡが記憶されており、プログラム領域ＳＢには制御プログラムＰＢが記憶されている。制御プログラムＰＡ，ＰＢは、車両に搭載された同じ制御対象を制御するためのプログラムである。
【００１７】
また、プログラム領域ＳＡには、プログラム領域ＳＡに対する完了フラグＦｌｇＡ及び書込みカウンタＣｎｔＡ（以下、カウンタＣｎｔＡ）が記憶されている。完了フラグＦｌｇＡは、制御プログラムＰＡの書込みが完了しているか否かの状態を示すフラグである。カウンタＣｎｔＡは、書換え領域２５１において、プログラム領域ＳＡに記憶されている制御プログラムＰＡが何番目に書き込まれたものであるかを示す書込みカウンタである。プログラム領域ＳＡにおいて制御プログラムＰＡの書換えが行われる都度、カウンタＣｎｔＡは増加する。同様に、プログラム領域ＳＢには、完了フラグＦｌｇＢ及びカウンタＣｎｔＢが記憶されている。完了フラグＦｌｇＡ，ＦｌｇＢの値は、ＯＫ又はＮＧであり、ＯＫは書き込みが完了している状態を示し、ＮＧは書き込みが完了していない状態を示す。また、カウンタＣｎｔＡ，ＣｎｔＢは、値が大きい方に対応する制御プログラムが、新しい、つまり後から書き込まれていることを示す。なお、ＣＰＵ２３が制御プログラムＰＡ，ＰＢを実行する処理により、異常検出部及び異常対応部の機能が実現される。
【００１８】
一方、非書換え領域２５２には、ブートプログラムとリプロプログラムが記憶されている。ブートプログラムは、接続ノード２０の電源がオフからオンに切り替わった際に、ＣＰＵ２３により実行される起動プログラムである。リプロプログラムは、書換え領域２５１に記憶されている制御プログラムＰＡ，ＰＢを書き換えるためのプログラムである。なお、ＣＰＵ２３がブートプログラムを実行する処理により、制御選択部、エラー対応部、及び停止要求部の機能が実現される。
【００１９】
＜２．処理＞
＜２−１．ブートプログラムを実行する処理＞
次に、ブートプログラムを実行する処理手順について、図３のフローチャートを参照して説明する。本処理手順は、接続ノード２０の電源がオフからオンに切り替わった際に実行される。
【００２０】
まず、Ｓ５では、ブートプログラムの実行を開始する。続いて、Ｓ１０では、プログラム領域ＳＡのカウンタＣｎｔＡの値と、プログラム領域ＳＢのカウンタＣｎｔＢの値とが等しいか否か判定する。本来、カウンタＣｎｔＡ，ＣｎｔＢの値は、等しくなることはなく、どちらか一方が大きくなるが、データ化け等により等しくなることがある。Ｓ１０において、カウンタＣｎｔＡ，ＣｎｔＢの値が異なる場合は、否定判定をしてＳ２０へ進む。
【００２１】
Ｓ２０では、カウンタＣｎｔＡの値が、カウンタＣｎｔＢの値よりも小さいか否か判定する。Ｓ２０において、カウンタＣｎｔＡの値がカウンタＣｎｔＢの値よりも大きい場合、すなわち、制御プログラムＰＢよりも制御プログラムＰＡの方が新しいと見なせる場合は、否定判定をしてＳ３０へ進む。
【００２２】
Ｓ３０では、プログラム領域ＳＡの完了フラグＦｌｇＡがＯＫか否か判定する。Ｓ３０において、完了フラグＦｌｇＡがＯＫの場合は、肯定判定をしてＳ４０へ進む。Ｓ４０では、相対的に新しく且つ書込みが完了している制御プログラムＰＡを、有効なプログラムと判定して、実行対象に選択する。そして、ブートプログラムの記憶領域から制御プログラムＰＡのスタートアドレスへジャンプし、制御プログラムＰＡを起動し実行する。
【００２３】
一方、Ｓ１０において、カウンタＣｎｔＡの値とカウンタＣｎｔＢの値とが等しい場合は、肯定判定をして、Ｓ５０へ進む。また、Ｓ３０において、完了フラグＦｌｇＡがＮＧの場合は、否定判定をして、Ｓ５０へ進む。
【００２４】
Ｓ５０では、有効なプログラムが記憶されているプログラム領域が存在しないと判定して、どの制御プログラムも実行対象として選択しない。そして、相対的に古い方の制御プログラムを有効なプログラムに書換えるために、ブートプログラムの記憶領域からリプログラムのスタートアドレスへジャンプして、リプロプログラムを起動し実行する。リプロプロプログラムを実行する処理の詳細は後述する。
【００２５】
さらに、Ｓ５０では、接続ノード２０の制御対象が、車両の走行制御に関する制御対象である場合には、車両の駆動を制御する他の接続ノードへ制御停止の要求を送信して、車両の駆動を停止する制御を実行させる。走行制御に関する制御対象とは、走る、止まる、曲がるといった車両の操作を行う制御対象であり、アクセルや、ブレーキ、操舵である。車両の駆動を制御する他の接続ノードとは、エンジンを制御するエンジンＥＣＵ、インジェクタの燃料噴射を制御するインジェクタＥＣＵ等である。例えば、接続ノード２０の制御対象がブレーキで、どの制御プログラムも実行できない状態の場合は、燃料噴射を停止させて、エンジンを停止させる。つまり、接続ノード２０の制御対象が走行制御に関する制御対象であった場合に、制御プログラムＰＡ，ＰＢのいずれも起動できない状態になると、不安定な走行を行うおそれがあるため、車両の駆動を停止させる。
【００２６】
続いて、Ｓ６０では、有線で接続された外部装置である診断装置７０や、無線で接続された外部装置であるセンタ８０及び携帯端末９０へ、エラーステータスとして、どの制御プログラムも実行できない状態を通知し、外部装置にエラーステータスを表示させる。
【００２７】
一方、Ｓ２０において、カウンタＣｎｔＢの値がカウンタＣｎｔＡの値よりも大きい場合、すなわち、制御プログラムＰＡよりも制御プログラムＰＢの方が新しいと見なせる場合は、肯定判定をしてＳ７０へ進む。
【００２８】
Ｓ７０では、プログラム領域ＳＢの完了フラグＦｌｇＢがＯＫか否か判定する。Ｓ７０において、完了フラグＦｌｇＢがＯＫの場合は、肯定判定をしてＳ８０へ進む。Ｓ８０では、相対的に新しく且つ書込みが完了している制御プログラムＰＢを、有効なプログラムと判定して、実行対象に選択する。そして、ブートプログラムの記憶領域から制御プログラムＰＢのスタートアドレスへジャンプし、制御プログラムＰＢを起動し実行する。
【００２９】
一方、Ｓ７０において、完了フラグＦｌｇＢがＮＧの場合は、否定判定をしてＳ９０及びＳ１００へ進む。Ｓ９０では、Ｓ５０と同様の処理を実行し、Ｓ１００では、Ｓ６０と同様の処理を実行する。以上で本処理を終了する。なお、Ｓ１０〜Ｓ４０，Ｓ７０，Ｓ８０の処理により実現される機能が選択部に相当し、Ｓ５０，Ｓ６０，Ｓ９０，Ｓ１００の処理により実現される機能が、エラー対応部に相当する。また、Ｓ５０，Ｓ９０の処理により実現される機能が、停止要求部に相当する。
【００３０】
＜２−２．制御動作の監視処理＞
次に、制御プログラムＰＡを実行した場合における、制御プログラムＰＡの制御動作を監視する処理手順について、図４のフローチャートを参照して説明する。本処理手順は、電源がオフになるまで繰り返し実行される。なお、制御プログラムＰＢを実行した場合における、制御プログラムＰＢの制御動作を監視する処理手順は、図４のフローチャートにおいて、ＡとＢを入れ替えるだけであるので、説明を省略する。
【００３１】
まず、Ｓ４９０では、制御プログラムＰＡの実行を開始する。続いて、Ｓ５００では、制御プログラムＰＡの制御動作の異常を検出したか否か判定する。制御プログラムＰＡに不備がある場合、制御動作に異常が発生し、意図した制御が実現されないおそれがある。例えば、制御プログラムＰＡに不備があり、マイコン２１の通信端子設定等の初期化処理が正しく実行されなかった場合には、通信途絶が発生し、意図した制御を実現できない状態に陥るおそれがある。よって、制御プログラムＰＡに不備がある場合に、不備のある制御プログラムＰＡの実行を継続することは好ましくない。そこで、制御プログラムＰＡの実行による制御動作を監視し、異常を検出したか否か判定する。
【００３２】
詳しくは、制御プログラムＰＡの実行によって故障診断情報、及び制御対象の制御情報の少なくとも一方を監視し、制動動作の異常を検出したか否か判定する。制御情報は、制御対象を駆動する駆動信号や、制御対象の動作をセンサで検出した検出値である。例えば、通信端子設定処理が正しく実行されなかった場合には、制御プログラムＰＡの実行により通信途絶を検出し、故障診断情報に通信途絶検出が含まれる。また、インジェクタからの燃料噴射量の設定処理が正しく実行されなかった場合には、制御情報に噴射制御異常を示す駆動信号や検出値が含まれる。
【００３３】
Ｓ５００において、異常を検出した場合には、肯定判定をしてＳ５１０へ進み、異常を検出していない場合には、否定判定をして本処理を一旦終了する。
Ｓ５１０では、プログラム領域ＳＢに対するカウンタＣｎｔＢの値を、プログラム領域ＳＡに対するカウンタＣｎｔＡの値＋１に更新する。これにより、次にブートプログラムを実行した際には、プログラム領域ＳＢに記憶されている制御プログラムＰＢが、制御プログラムＰＡよりも新しい制御プログラムと見なされる。
【００３４】
続いて、Ｓ５２０では、外部装置へ、エラーステータスとして、制御プログラムＰＡによる制御動作の異常状態及び電源再起動要求を通知し、外部装置にエラーステータスを表示させる。この電源再起動要求を受けたユーザにより、接続ノード２０の電源が一旦オフにされ、再度オンされる。
【００３５】
続いて、Ｓ５３０では、接続ノード２０の電源がオフになったか否か判定する。Ｓ５３０において、電源がオフになっていない場合は、否定判定をして電源がオフになるまで待機し、電源がオフになっている場合は、肯定判定をして本処理を終了する。この後、接続ノード２０の電源が再度オンになると、ブートプログラムが実行され、制御プログラムＰＢの完了フラグがＯＫであれば、制御プログラムＰＢの起動へ切り替わる。なお、Ｓ５００の処理により実現される機能が異常検出部に相当し、Ｓ５１０，Ｓ５２０の処理により実現される機能が異常対応部に相当する。
【００３６】
＜２−３．リプロプログラムを実行する処理＞
次に、リプロプログラムを実行する処理手順について、図５のフローチャートを参照して説明する。リプロプログラムは、上述したように、ブートプログラムの実行時に有効な制御プログラムが選択されなかった場合に、Ｓ５０及びＳ９０において実行される。また、リプロプログラムは、制御プログラムＰＡ又は制御プログラムＰＢの実行中に、外部装置から接続ノード２０がリプロプログラムへの移行要求を受け取った場合にも実行される。
【００３７】
まず、Ｓ１９０では、リプロプログラムの実行を開始する。続いて、Ｓ２００では、外部装置との認証を完了したか否か判定する。この場合の外部装置は、新しい制御プログラムを送信するセンタ８０である。Ｓ２００において、認証を完了していない場合は、否定判定をして認証が完了するまで待機し、認証を完了している場合は、肯定判定をしてＳ２１０へ進む。
【００３８】
Ｓ２１０では、外部装置から消去要求を受信したか否か判定する。Ｓ２１０において、消去要求を受信していない場合は、否定判定をして消去要求を受信するまで待機し、消去要求を受信している場合は、肯定判定をしてＳ２２０へ進む。
【００３９】
Ｓ２２０では、複数のプログラム領域のうち、カウンタ値の最も小さいプログラム領域ＳＸ、すなわち、最も古いと見なせる制御プログラムが記憶されているプログラム領域ＳＸに対する完了フラグＦｌｇＸをＮＧに設定する。本実施形態において、ＸはＡ又はＢである。
【００４０】
続いて、Ｓ２３０では、プログラム領域ＳＸのカウンタＣｎｔＸの値を初期化する。つまり、カウンタＣｎｔＸの値を「０」にする。
続いて、Ｓ２４０では、プログラム領域ＳＸに記憶されている制御プログラムＰＸを消去する。
【００４１】
続いて、Ｓ２５０では、消去完了の応答を外部装置へ送信する。
続いて、Ｓ２６０では、外部装置から書込みプログラム、すなわち新しい制御プログラムを受信したか否か判定する。書込みプログラムを受信していない場合は、否定判定をして書込みプログラムを受信するまで待機し、書込みプログラムを受信している場合は、肯定判定をしてＳ２７０へ進む。
【００４２】
Ｓ２７０では、プログラム領域ＳＸへ、外部装置から受信した新しい制御プログラムを書き込む。
続いて、Ｓ２８０では、書込み完了の応答を外部装置へ送信する。
【００４３】
続いて、Ｓ２９０では、ベリファイがＯＫか否か判定する。Ｓ２９０において、ベリファイがＮＧの場合は、否定判定をしてベリファイがＯＫになるまで待機し、ベリファイがＯＫの場合は、肯定判定をしてＳ３００へ進む。
【００４４】
Ｓ３００では、プログラム領域ＳＸに対する完了フラグＦｌｇＸをＯＫに設定する。
続いて、Ｓ３１０では、プログラム領域ＳＸに対するカウンタＣｎｔＸの値を更新する。詳しくは、もう一方のプログラム領域に対するカウンタ値＋１にする。例えば、Ｘ＝Ａの場合は、カウンタＣｎｔＡの値をカウンタＣｎｔＢの値＋１に更新する。これにより、書換え領域２５１に記憶されているカウンタ値の中で、カウンタＣｎｔＸの値が最も大きな値となり、Ｓ２７０で書き込まれた制御プログラムＰＸが、書換え領域２５１に記憶されている制御プログラムの中で最も新しい制御プログラムであることが示される。
【００４５】
続いて、Ｓ３２０では、ベリファイ完了の応答を外部装置へ送信する。
続いて、Ｓ３３０では、接続ノード２０の電源がオフになったか否か判定する。Ｓ３３０において、電源がオフになっていない場合は、否定判定をして電源がオフになるまで待機し、電源がオフになっている場合は、肯定判定をして本処理を終了する。
【００４６】
＜３．動作＞
次に、制御プログラムの書込みに伴うカウンタ値及び完了フラグの更新動作について、図６を参照して説明する。図６は、１回目にプログラム領域ＳＡ、２回目にプログラム領域ＳＢに制御プログラムが書込まれた状態で、３回目の制御プログラムの書込みを行う場合を示している。
【００４７】
３回目の制御プログラムの書込みを行う前は、プログラム領域ＳＡには、カウンタＣｎｔＡ＝１、完了フラグＦｌｇＡ＝ＯＫが記憶されており、プログラム領域ＳＢには、カウンタＣｎｔＢ＝２、完了フラグＦｌｇＢ＝ＯＫが記憶されている。
【００４８】
そして、接続ノード２０が外部装置から消去要求を受信すると、カウンタ値が小さい方のプログラム領域ＳＡに対する完了フラグＦｌｇＡがＮＧに設定され、カウンタ値ＣｎｔＡが初期値「０」に設定される。続いて、プログラム領域ＳＡに記憶されている相対的に古い制御プログラムＰＡが消去される。
【００４９】
続いて、接続ノード２０が外部装置から新しい制御プログラムを受信すると、プログラム領域ＳＡに新しい制御プログラムが書込まれる。そして、ベリファイがＯＫになると、完了フラグＦｌｇＡがＯＫに設定される。続いて、プログラム領域ＳＡに対するカウンタＣｎｔＡの値が、プログラム領域ＳＢに対するカウンタＣｎｔＢの値「２」よりも１大きい「３」に設定される。これにより、プログラム領域ＳＡに記憶されている制御プログラムＰＡは、プログラム領域ＳＢに記憶されている制御プログラムＰＢよりも新しい制御プログラムと見なされる。したがって、接続ノード２０の電源を再起動すると、ブートプログラムの実行からプログラム領域ＳＡに記憶されている制御プログラムＰＡの実行へ移行する。
【００５０】
そして、制御プログラムＰＡの実行中に、制御動作に異常が検出されると、カウンタＣｎｔＢの値が、カウンタＣｎｔＡの値「３」よりも１大きい「４」に更新される。これにより、次に接続ノード２０の電源を再起動した際には、制御プログラムＰＢの方が、実際には制御プログラムＰＡよりも先に書き込まれた制御プログラムであるにも関わらず、新しい制御プログラムと見なされ実行される。
【００５１】
＜４．効果＞
以上説明した第１実施形態によれば、以下の効果が得られる。
（１）プログラム領域ＳＡ，ＳＢのそれぞれに対して、完了フラグＦｌｇＡ，ＦｌｇＢとカウンタＣｎｔＡ，ＣｎｔＢとが記憶されている。そして、カウンタ値が最も大きく、且つ、完了フラグがＯＫとなっているプログラム領域に記憶されている制御プログラムが、実行対象として選択され実行される。したがって、制御プログラムの中で最新且つ書込み状態が正常であると保証された制御プログラムを、確実に実行することができる。
【００５２】
（２）接続ノード２０の電源投入時にブートプログラムが実行されて、完了フラグＦｌｇＡ，ＦｌｇＢ及びカウンタＣｎｔＡ，ＣｎｔＢが参照されることにより、電源投入後に有効な制御プログラムの実行へ速やかに移行することができる。
【００５３】
（３）複数の制御プログラムの中に有効性が保証された実行対象が存在しない場合には、制御プログラムを書き換えるためのリプロプログラムが実行されるとともに、外部装置へエラーステータスが通知される。これにより、制御プログラムを有効な制御プログラムに更新できるとともに、ユーザやディーラが車載電子制御装置の動作状況を把握することができる。
【００５４】
（４）制御プログラムの実行による制御動作が監視され、制御動作の異常が検出された場合には、実行中の制御プログラムとは異なる制御プログラムに対応するカウンタ値が、実行中の制御プログラムに対応するカウンタ値よりも１つ大きな値に更新されるとともに、電源再起動の要求が外部装置へ通知される。そして、ユーザが電源再起動の要求を受けて電源を再起動すると、前回実行した制御プログラムよりも対応するカウンタ値の大きい制御プログラムが選択されて実行される。これにより、制御動作に異常が検出された制御プログラムを停止して、他の有効な制御プログラムを実行することができる。
【００５５】
（５）車両の走行制御に関する制御対象を制御するための制御プログラムが、いずれも有効でない場合には、他の車載電子制御装置へ制御停止の要求が送信されて、車両の駆動を停止する制御が実行される。これにより、不安定な状態での走行を回避し、ユーザの安全を確保することができる。
【００５６】
（第２実施形態）
＜１．第１実施形態との相違点＞
第２実施形態は、基本的な構成は第１実施形態と同様であるため、共通する構成については説明を省略し、相違点を中心に説明する。なお、第１実施形態と同じ符号は、同一の構成を示すものであって、先行する説明を参照する。
【００５７】
上述した第１実施形態と第２実施形態とでは、制御プログラムＰＡ，ＰＢの実行中における、制御プログラムＰＡ，ＰＢの制御動作を監視する処理手順が異なる。第１実施形態では、制御プログラムの制御動作に異常が検出された場合は、カウンタＣｎｔＢを更新して、外部装置へ電源の再起動を要求した。これに対して、第２実施形態では、カウンタＣｎｔＢを更新した後、電源の再起動を要求することなく、自動的に制御プログラムＰＢを起動する点が異なる。
【００５８】
＜２．処理＞
次に、第２実施形態に係る制御プログラムＰＡの制御動作を監視する処理手順について、図７のフローチャートを参照して説明する。なお、第２実施形態に係る制御プログラムＰＢの制御動作を監視する処理手順は、図７のフローチャートにおいて、ＡとＢを入れ替えるだけであるので、説明を省略する。
【００５９】
まず、Ｓ３９０〜Ｓ４１０では、Ｓ４９０〜Ｓ５１０と同様の処理を実行する。
続いて、Ｓ４２０では、プログラム領域ＳＢに対する完了フラグＦｌｇＢがＯＫか否か判定する。Ｓ４２０において、完了フラグＦｌｇＢがＮＧの場合は、実行できる制御プログラムが存在しないため、Ｓ４３０において、外部装置へ、エラーステータスとして、どの制御プログラムも実行できない状態を通知し、外部装置にエラーステータスを表示させる。その後、Ｓ４６０へ進む。
【００６０】
一方、Ｓ４２０において、完了フラグＦｌｇＢがＯＫの場合は、制御プログラムＰＢを実行できるため、Ｓ４４０において、外部装置へ、エラーステータスとして、制御プログラムＰＢの有効状態を通知し、外部装置にエラーステータスを表示させる。その後、Ｓ４５０において、制御プログラムＰＢを起動して実行する。すなわち、制御プログラムＰＡから制御プログラムＰＢへ実行対象を切り替える。その後、Ｓ４６０へ進む。
【００６１】
Ｓ４６０では、Ｓ５３０と同様の処理を実行する。なお、Ｓ４００の処理により実現される機能が異常検出部に相当し、Ｓ４１０，Ｓ４４０，Ｓ４５０の処理により実現される機能が異常対応部に相当する。
【００６２】
＜３．効果＞
以上詳述した第２実施形態によれば、前述した第１実施形態の効果（１）〜（３），（５）に加え、以下の効果が得られる。
【００６３】
（６）制御プログラムの実行による制御動作が監視され、制御動作の異常が検出された場合には、外部装置へエラーステータスが通知されるとともに、実行中の制御プログラムとは異なる制御プログラムへ実行対象が切替えられる。これにより、制御動作に異常が検出された場合には、ユーザが状況を把握することができる。さらに、制御動作に異常が検出された実行中の制御プログラムの実行継続を停止して、他の制御プログラムの実行へ速やかに切り替えることができる。ひいては、車両制御に対する制御動作の異常の影響を抑制することができる。
【００６４】
（他の実施形態）
以上、本発明を実施するための形態について説明したが、本発明は上述の実施形態に限定されることなく、種々変形して実施することができる。
【００６５】
（ａ）上記実施形態では、ＲＯＭ２５の書換え領域２５１に２つのプログラム領域が設けられている例を示したが、これに限定されるものではない。書換え領域２５１に３つ以上のプログラム領域が設けられていてもよい。３つ以上のプログラム領域が設けられている場合、３つ以上の制御プログラムの中で、最新且つ完了フラグがＯＫの制御プログラムを実行対象として選択すればよい。また、選択した制御プログラムの制御動作に異常が検出された場合には、次に新しく且つ完了フラグがＯＫの制御プログラムへ実行対象を切り替えるようにすればよい。
【００６６】
（ｂ）上記実施形態では、プログラム領域のそれぞれに対する完了フラグ及びカウンタが、プログラム領域のそれぞれに記憶されているが、プログラム領域のそれぞれに記憶されていなくてもよい。書換え領域２５１のどこかに、各プログラム領域に対応付けて、各プログラム領域に対する完了フラグ及びカウンタが記憶されていればよい。
【００６７】
（ｃ）上記実施形態では、ユーザの携帯端末と接続ノード２０とを無線で接続しているが、携帯端末が車両内に存在する場合は、携帯端末と接続ノード２０とを有線で接続してもよい。
【００６８】
（ｄ）上記実施形態における１つの構成要素が有する複数の機能を、複数の構成要素によって実現したり、１つの構成要素が有する１つの機能を、複数の構成要素によって実現したりしてもよい。また、複数の構成要素が有する複数の機能を、１つの構成要素によって実現したり、複数の構成要素によって実現される１つの機能を、１つの構成要素によって実現したりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。なお、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【００６９】
（ｅ）上述した車載電子制御装置の他、当該車載電子制御装置を構成要素とするシステム、当該車載電子制御装置としてコンピュータを機能させるためのプログラム、このプログラムを記録した半導体メモリ等の非遷移的実態的記録媒体など、種々の形態で本発明を実現することもできる。
【符号の説明】
【００７０】
２５…ＲＯＭ、ＣｎｔＡ，ＣｎｔＢ…カウンタ、ＦｌｇＡ，ＦｌｇＢ…完了フラグ、ＰＡ，ＰＢ…制御プログラム、ＳＡ，ＳＢ…プログラム領域。
【図１】
2018092241.tif 000003
【図２】
2018092241.tif 000004
【図３】
2018092241.tif 000005
【図４】
2018092241.tif 000006
【図５】
2018092241.tif 000007
【図６】
2018092241.tif 000008
【図７】
2018092241.tif 000009