(57)【要約】      （修正有）【課題】更新前のプログラムへの切り替えによって運転者などが違和感を覚えることを防ぐ電子制御装置及びプログラム更新方法を提供する。【解決手段】アクティブ状態とインアクティブ状態とを排他的に切り替え可能な２つのバンクＡ及びＢが不揮発性メモリに確保された電子制御装置は、アクティブ状態の記憶領域（アクティブＲＯＭ）にプログラムが書き込まれた状態で、外部からの指示に応答して、インアクティブ状態の記憶領域（インアクティブＲＯＭ）にプログラムを書き込んで更新し、アクティブＲＯＭをインアクティブＲＯＭに切り替え、インアクティブＲＯＭをアクティブＲＯＭに切り替える。そして、電子制御装置は、アクティブＲＯＭに書き込まれたプログラムとインアクティブＲＯＭに書き込まれたプログラムとが異なる場合、アクティブＲＯＭに書き込まれたプログラムをインアクティブＲＯＭにコピーする。【選択図】図７
2020119419.tif 000002
【特許請求の範囲】
【請求項１】
アクティブ状態とインアクティブ状態とを排他的に切り替え可能な２つの記憶領域が不揮発性メモリに確保され、前記アクティブ状態の記憶領域にプログラムが書き込まれた状態で、外部からの指示に対応して、前記インアクティブ状態の記憶領域にプログラムを書き込んで更新し、前記アクティブ状態の記憶領域をインアクティブ状態に切り替え、前記インアクティブ状態の記憶領域をアクティブ状態に切り替える電子制御装置であって、
前記アクティブ状態の記憶領域に書き込まれたプログラムと前記インアクティブ状態の記憶領域に書き込まれたプログラムとが異なる場合、前記アクティブ状態に切り替えられた記憶領域に書き込まれたプログラムを前記インアクティブ状態の記憶領域にコピーする、
電子制御装置。
【請求項２】
前記アクティブ状態の記憶領域に書き込まれたプログラムに異常が発生した場合、前記アクティブ状態の記憶領域をインアクティブ状態に切り替え、前記インアクティブ状態の記憶領域をアクティブ状態に切り替え、前記アクティブ状態に切り替えた記憶領域に書き込まれているプログラムにより制御対象を継続して制御する、
請求項１に記載の電子制御装置。
【請求項３】
ソフトウエアリセットを契機として、前記アクティブ状態の記憶領域をインアクティブ状態に切り替え、前記インアクティブ状態の記憶領域をアクティブ状態に切り替える、
請求項２に記載の電子制御装置。
【請求項４】
前記アクティブ状態の記憶領域に書き込まれたプログラムに異常が発生した場合、前記インアクティブ状態の記憶領域に書き込まれたプログラムを前記アクティブ状態の記憶領域にコピーして修復する、
請求項１〜請求項３のいずれか１つに記載の電子制御装置。
【請求項５】
前記プログラムの修復は、起動時に実行される、
請求項４に記載の電子制御装置。
【請求項６】
前記インアクティブ状態の記憶領域は、複数のプログラムの中から所定規則によって選定された少なくとも１つのプログラムの専用領域と、他の少なくとも１つのプログラムで共用する共用領域と、に区画される、
請求項１〜請求項５に記載の電子制御装置。
【請求項７】
前記所定規則は、プログラムの重要度である、
請求項６に記載の電子制御装置。
【請求項８】
前記インアクティブ状態の記憶領域に書き込まれるプログラムは、無線通信によって取得される、
請求項１〜請求項７のいずれか１つに記載の電子制御装置。
【請求項９】
前記インアクティブ状態の記憶領域が未使用である場合、前記インアクティブ状態の記憶領域に任意のデータが書き込まれる、
請求項１〜請求項８のいずれか１つに記載の電子制御装置。
【請求項１０】
アクティブ状態とインアクティブ状態とを排他的に切り替え可能な２つの記憶領域が不揮発性メモリに確保され、前記アクティブ状態の記憶領域にプログラムが書き込まれた状態で、外部からの指示に応答して、前記インアクティブ状態の記憶領域にプログラムを書き込んで更新し、前記アクティブ状態の記憶領域をインアクティブ状態に切り替え、前記インアクティブ状態の記憶領域をアクティブ状態に切り替える電子制御装置が、前記アクティブ状態の記憶領域に書き込まれたプログラムと前記インアクティブ状態の記憶領域に書き込まれたプログラムとが異なる場合、前記アクティブ状態に切り替えられた記憶領域に書き込まれたプログラムを前記インアクティブ状態の記憶領域にコピーする、
プログラム更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子制御装置及びプログラム更新方法に関する。
【背景技術】
【０００２】
自動車などの車両に搭載された電子制御装置は、機能追加、不具合改修などによってプログラムが更新される場合がある。従来では、車両をディーラなどに持ち込んで、電子制御装置のプログラムを更新していた。この場合、車両ユーザの利便性が良くないことから、特開２０１８−８６８９４号公報（特許文献１）に記載されるように、無線通信を使用したＯＴＡ（Over The Air）によって、ユーザの手元でプログラムを更新する技術が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１８−８６８９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＯＴＡによってプログラムを更新する場合、車両走行中などにもプログラムを更新できることが望ましい。これを実現するため、電子制御装置の不揮発性メモリに確保された２つの記憶領域を交互に使用し、一方の記憶領域に実行対象のプログラムを書き込んでおき、他方の記憶領域をプログラムの更新用の予約領域とすることが考えられる。そして、予約領域に更新プログラムを書き込み、例えば、再起動時などのタイミングで更新プログラムに切り替えることで、車両走行中などにもプログラムを更新できるようになる。
【０００５】
このようにした場合、更新プログラムに不具合が発生したとき、更新前のプログラムに切り替えることで、制御対象を継続して制御することができる。しかしながら、２つの記憶領域に格納されているプログラムが異なっているため、更新プログラムから更新前のプログラムに切り替えると、車両の運転者などが違和感を覚えてしまうおそれがある。
【０００６】
そこで、本発明は、プログラムの切り替えによる違和感を覚え難くした、電子制御装置及びプログラム更新方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
アクティブ状態とインアクティブ状態とを排他的に切り替え可能な２つの記憶領域が不揮発性メモリに確保された電子制御装置は、アクティブ状態の記憶領域にプログラムが書き込まれた状態で、外部からの指示に応答して、インアクティブ状態の記憶領域にプログラムを書き込んで更新し、アクティブ状態の記憶領域をインアクティブ状態に切り替え、インアクティブ状態の記憶領域をアクティブ状態に切り替える。そして、電子制御装置は、アクティブ状態の記憶領域に書き込まれたプログラムとインアクティブ状態の記憶領域に書き込まれたプログラムとが異なる場合、アクティブ状態に切り替えられた記憶領域に書き込まれたプログラムをインアクティブ状態の記憶領域にコピーする。
【発明の効果】
【０００８】
本発明によれば、アクティブ状態の記憶領域に書き込まれたプログラムとインアクティブ状態の記憶領域に書き込まれたプログラムとが同一となるので、プログラムの切り替えによる違和感を覚え難くすることができる。
【図面の簡単な説明】
【０００９】
【図１】電子制御装置のプログラムを更新するシステム図である。
【図２】電子制御装置の一例を示す内部構成図である。
【図３】コードフラッシュメモリのデータ構造図である。
【図４】従来技術によるプログラムの更新方法の説明図である。
【図５】プログラム更新処理の一例を示すフローチャートである。
【図６】第１の初期化処理の一例を示すフローチャートである。
【図７】２つの記憶領域でプログラムのリビジョンを同一とする方法の説明図である。
【図８】第２の初期化処理の一例を示すフローチャートである。
【図９】アクティブＲＯＭ診断処理の一例を示すフローチャートである。
【図１０】異常が発生したプログラムを修復する方法の説明図である。
【図１１】コードフラッシュメモリの他のデータ構造図である。
【図１２】プログラム書き込み処理の一例を示すフローチャートである。
【図１３】プログラムＡ１〜Ｆ１が書き込まれた初期状態における記憶領域のデータ構造図である。
【図１４】プログラムＡ２〜Ｄ２を書き込んで更新した状態における記憶領域のデータ構造図である。
【図１５】プログラムＥ２を書き込んで更新した状態における記憶領域のデータ構造図である。
【図１６】プログラムＦ２を書き込んで更新した状態における記憶領域のデータ構造図である。
【発明を実施するための形態】
【００１０】
以下、添付された図面を参照し、本発明を実施するための実施形態について詳述する。
図１は、ＯＴＡを利用して、車両ＶＨに搭載された電子制御装置のプログラムを更新するシステムの一例を示している。更新プログラムは、ＯＴＡセンターと呼ばれるデータセンター（図示せず）に接続された基地局ＢＳから無線通信で車両ＶＨに配信される。車両ＶＨに配信された更新プログラムは、無線送受信機、ゲートウェイ及び車載ネットワークを介して電子制御装置に送られ、電子制御装置の不揮発性メモリに書き込まれる。ここで、基地局ＢＳが、外部の一例として挙げられる。
【００１１】
図２は、車両ＶＨに搭載された電子制御装置１００の一例を示している。
電子制御装置１００は、プロセッサ１２０と、コードフラッシュメモリ１４０と、データフラッシュメモリ１６０と、ＲＡＭ（Random Access Memory）１８０と、入出力回路２００と、通信回路２２０と、これらを相互通信可能に接続する内部バス２４０と、を備えている。ここで、コードフラッシュメモリ１４０が、不揮発性メモリの一例として挙げられる。なお、図２においては、１つの電子制御装置１００のみが図示されているが、車両ＶＨには、ＣＡＮ（Controller Area Network）などの車載ネットワークに接続された、複数の電子制御装置１００が搭載されている。
【００１２】
プロセッサ１２０は、プログラムに記述された命令セット（データの転送、演算、加工、制御、管理など）を実行するハードウエアであって、演算装置、命令や情報を格納するレジスタ、周辺回路などから構成されている。コードフラッシュメモリ１４０は、電気的にデータを書き換え可能な不揮発性メモリからなり、例えば、エンジン、自動変速機、燃料噴射装置などを制御するプログラムなどを格納する。データフラッシュメモリ１６０は、電気的にデータを書き換え可能な不揮発性メモリからなり、例えば、学習値などのデータを格納する。ＲＡＭ１８０は、電源供給遮断によってデータが消失する揮発性メモリからなり、プロセッサ１２０の一時的な記憶領域を提供する。
【００１３】
入出力回路２００は、Ａ／Ｄコンバータ、Ｄ／Ａコンバータ、Ｄ／Ｄコンバータなどからなり、外部機器に対するアナログ信号及びデジタル信号の入出力機能を提供する。通信回路２２０は、ＣＡＮトランシーバなどからなり、車載ネットワークに接続する機能を提供する。内部バス２４０は、各デバイス間でデータを交換するための経路であって、アドレスを転送するためのアドレスバス、データを転送するためのデータバス、アドレスバスやデータバスで実際に入出力を行うタイミングや制御情報を遣り取りするコントロールバスを含んでいる。
【００１４】
また、電子制御装置１００の通信回路２２０は、ゲートウェイ２６０を介して、基地局ＢＳと無線通信する無線送受信機２８０に接続されている。ここで、ゲートウェイ２６０は、基地局ＢＳから送信されたデータのプロトコルを通信回路２２０で処理可能なプロトコルに変換すると共に、電子制御装置１００で処理されるデータのプロトコルを基地局ＢＳで処理可能なプロトコルに変換する機能を提供する。
【００１５】
従って、基地局ＢＳから配信された更新プログラムは、車両ＶＨに搭載された無線送受信機２８０で受信され、ゲートウェイ２６０によってプロトコル変換されつつ、通信回路２２０及び内部バス２４０を介してプロセッサ１２０に送られる。そして、プロセッサ１２０は、例えば、コードフラッシュメモリ１４０に予め格納された書き換えプログラムに従って、以下で詳細に説明するように、コードフラッシュメモリ１４０のプログラムを更新する。なお、コードフラッシュメモリ１４０に予め格納された書き換えプログラム自体も、更新対象となり得る。
【００１６】
コードフラッシュメモリ１４０には、ここに書き込まれる各プログラムについて、図３に示すように、アクティブ状態とインアクティブ状態とを排他的に切り替え可能な２つの記憶領域として、バンクＡとバンクＢとが予め確保されている。図示の例では、アクティブ状態のバンクＡに、電子制御装置１００の制御対象を制御するためのプログラムＡ〜Ｆが書き込まれ、インアクティブ状態のバンクＢにデータが書き込まれていない状態を示している。ここで、インアクティブ状態のバンクＢは、プログラムＡ〜Ｆを更新するための予約領域として使用される。なお、以下の説明においては、アクティブ状態のバンクを「アクティブＲＯＭ」、インアクティブ状態のバンクを「インアクティブＲＯＭ」と呼ぶこととする。
【００１７】
ここで、従来技術の問題点について説明する。
電子制御装置１００の初期状態では、図４に示すように、アクティブＲＯＭにリビジョン１．０のプログラムが書き込まれ、インアクティブＲＯＭが未使用となっている。この初期状態において、アクティブＲＯＭに書き込まれているプログラムを更新する場合、インアクティブＲＯＭにリビジョン２．０のプログラムが書き込まれ、例えば、電子制御装置１００の再起動時などの所定のタイミングで、アクティブＲＯＭがインアクティブＲＯＭに切り替えられ、インアクティブＲＯＭがアクティブＲＯＭに切り替えられる。従って、電子制御装置１００は、その後、アクティブＲＯＭに書き込まれたリビジョン２．０のプログラムを実行し、例えば、機能追加、不具合改修などが行われた制御を実行することができる。
【００１８】
そして、アクティブＲＯＭに書き込まれているリビジョン２．０のプログラムを更に更新する場合、インアクティブＲＯＭにリビジョン３．０のプログラムが書き込まれ、所定のタイミングで、アクティブＲＯＭがインアクティブＲＯＭに切り替えられ、インアクティブＲＯＭがアクティブＲＯＭに切り替えられる。このようにすることで、車両ＶＨが走行中であってもプログラムを更新することができる。
【００１９】
しかしながら、図４から明確なように、アクティブＲＯＭに書き込まれているプログラムは、インアクティブＲＯＭに書き込まれているプログラムとはリビジョンが異なっている。このため、アクティブＲＯＭに書き込まれているプログラムに異常が発生して、アクティブＲＯＭとインアクティブＲＯＭとが切り替えられると、制御内容が微妙に異なることから車両運転者が違和感を覚えてしまうおそれがある。そこで、以下で詳細に説明するように、電子制御装置１００は、アクティブＲＯＭに書き込まれているプログラムとインアクティブＲＯＭに書き込まれているプログラムとが異なる場合、アクティブＲＯＭに書き込まれているプログラムをインアクティブＲＯＭにコピーすることで、アクティブＲＯＭ及びインアクティブＲＯＭに書き込まれているプログラムのリビジョンを同一にする。
【００２０】
図５は、電子制御装置１００のプロセッサ１２０が、プログラムの更新要求を受信したことを契機として、コードフラッシュメモリ１４０に書き込まれている更新プログラムに従って実行する、プログラム更新処理の一例を示している。ここで、電子制御装置１００のデータフラッシュメモリ１６０には、起動バンク情報及びコピー要求を格納する領域が予め確保され、図３に示すデータ構造においては、初期値として、起動バンク情報が「バンクＡ」にセットされ、コピー要求が「要求なし」にセットされている。なお、起動バンク情報及びコピー要求を格納する領域は、データフラッシュメモリ１６０に限らず、コードフラッシュメモリ１４０に予め確保されていてもよい。
【００２１】
ステップ１（図では「Ｓ１」と略記する。以下同様。）では、電子制御装置１００のプロセッサ１２０が、データフラッシュメモリ１６０から起動バンク情報を読み込む。ここで、起動バンク情報は、アクティブＲＯＭを特定可能な情報であって、アクティブＲＯＭを特定することでインアクティブＲＯＭも特定することができる。
【００２２】
ステップ２では、電子制御装置１００のプロセッサ１２０が、起動バンク情報に基づいてインアクティブＲＯＭを特定する。即ち、電子制御装置１００のプロセッサ１２０は、起動バンク情報に「バンクＡ」が設定されていれば、インアクティブＲＯＭは「バンクＢ」であると特定し、起動バンク情報に「バンクＢ」が設定されていれば、インアクティブＲＯＭは「バンクＡ」であると特定する。
【００２３】
ステップ３では、電子制御装置１００のプロセッサ１２０が、基地局ＢＳから配信されたプログラムを受信し、これをインアクティブＲＯＭに書き込む。このとき、プログラムのサイズが大きい場合、電子制御装置１００のプロセッサ１２０は、所定サイズに分割されたプログラムを順次受信し、これをインアクティブＲＯＭに順次書き込むようにしてもよい。また、基地局ＢＳから配信されたプログラムは、共通キーにより暗号化されていてもよく、所定規則により圧縮されていてもよい。さらに、基地局ＢＳから配信されたプログラムは、アクティブＲＯＭに書き込まれているプログラムの差分であってもよい。なお、電子制御装置１００のプロセッサ１２０は、例えば、ＣＲＣ（Cyclic Redundancy Check）やチェックサムなどを使用して、プログラムの受信及び書き込みが正常に行われたかを判断し、必要に応じてプログラムの再送を要求するようにしてもよい。
【００２４】
ステップ４では、電子制御装置１００のプロセッサ１２０が、例えば、電子制御装置１００の起動時などの所定タイミングでインアクティブＲＯＭをアクティブＲＯＭに切り替えることで、そこに書き込まれたプログラムによって制御を開始できるように起動バンク情報をセットする。具体的には、電子制御装置１００のプロセッサ１２０は、バンクＡにプログラムを書き込んだ場合には、起動バンク情報に「バンクＡ」をセットし、バンクＢにプログラムを書き込んだ場合には、起動バンク情報に「バンクＢ」をセットする。なお、インアクティブＲＯＭをアクティブＲＯＭに切り替える所定タイミングは、電子制御装置１００の起動時に限らず、アイドリングストップ時やリセット時などであってもよい（以下の処理についても同様）。
【００２５】
ステップ５では、電子制御装置１００のプロセッサ１２０が、アクティブＲＯＭに書き込まれているプログラムとインアクティブＲＯＭに書き込まれているプログラムのリビジョンが同一となるように、アクティブＲＯＭに書き込まれているプログラムをインアクティブＲＯＭにコピーするコピー要求をセットする。
【００２６】
かかるプログラム更新処理によれば、電子制御装置１００のプロセッサ１２０は、プログラムの更新要求を受信すると、インアクティブＲＯＭに更新プログラムを書き込み、起動バンク情報の更新、及びコピー要求をセットする。従って、電子制御装置１００のプロセッサ１２０は、その後の処理において、最新のプログラムを使用した制御対象の制御、並びにアクティブＲＯＭ及びインアクティブＲＯＭのプログラムの整合性をとる準備をすることができる。
【００２７】
図６は、電子制御装置１００が起動されたことを契機として、電子制御装置１００のプロセッサ１２０が、コードフラッシュメモリ１４０に書き込まれている初期化プログラムに従って実行する、第１の初期化処理の一例を示している。また、電子制御装置１００のプロセッサ１２０は、第１の初期化処理に続いて、制御対象であるエンジン、自動変速機、モータなどを制御する通常制御を実行する。
【００２８】
ステップ１１では、電子制御装置１００のプロセッサ１２０が、データフラッシュメモリ１６０から起動バンク情報を読み込む。
【００２９】
ステップ１２では、電子制御装置１００のプロセッサ１２０が、起動バンク情報に応じて、アクティブＲＯＭ及びインアクティブＲＯＭを特定する。具体的には、電子制御装置１００のプロセッサ１２０は、起動バンク情報が「バンクＡ」であれば、アクティブＲＯＭは「バンクＡ」であり、インアクティブＲＯＭが「バンクＢ」であると特定する。また、電子制御装置１００のプロセッサ１２０は、起動バンク情報が「バンクＢ」であれば、アクティブＲＯＭは「バンクＢ」であり、インアクティブＲＯＭは「バンクＡ」であると特定する。
【００３０】
ステップ１３では、電子制御装置１００のプロセッサ１２０が、コードフラッシュメモリ１４０のコピー要求を参照し、コピー要求がセットされているか否か、要するに、コピー要求があるか否かを判定する。そして、電子制御装置１００のプロセッサ１２０は、コピー要求があると判定すれば（Ｙｅｓ）、処理をステップ１４へと進める。一方、電子制御装置１００のプロセッサ１２０は、コピー要求がないと判定すれば（Ｎｏ）、第１の初期化処理を終了させて通常制御へと移行する。
【００３１】
ステップ１４では、電子制御装置１００のプロセッサ１２０が、コピー要求があったので、アクティブＲＯＭのプログラム、即ち、更新プログラムをインアクティブＲＯＭにコピーする。従って、アクティブＲＯＭのプログラムとインアクティブＲＯＭのプログラムを同一とすることができる。
【００３２】
ステップ１５では、電子制御装置１００のプロセッサ１２０が、コピー要求に応答したので、コピー要求をリセット、要するに、データフラッシュメモリ１６０に格納されているコピー要求を「要求なし」に変更する。その後、電子制御装置１００のプロセッサ１２０は、第１の初期化処理を終了させて通常制御へと移行する。
【００３３】
かかる第１の初期化処理によれば、図７に示すように、アクティブＲＯＭであるバンクＡにリビジョン１．０のプログラムが書き込まれている初期状態において、外部からの更新指示に応答して、インアクティブＲＯＭであるバンクＢにリビジョン２．０のプログラムが書き込まれる。その後、電子制御装置１００が起動すると、アクティブＲＯＭがインアクティブＲＯＭに切り替えられると共に、インアクティブＲＯＭがアクティブＲＯＭに切り替えられ、アクティブＲＯＭであるバンクＢに書き込まれているリビジョン２．０のプログラムがインアクティブＲＯＭであるバンクＡにコピーされる。
【００３４】
また、この状態において、外部からの更新指示が再度あると、その更新指示に応答して、インアクティブＲＯＭであるバンクＡにリビジョン３．０のプログラムが書き込まれる。その後、電子制御装置１００が起動すると、アクティブＲＯＭがインアクティブＲＯＭに切り替えられると共に、インアクティブＲＯＭがアクティブＲＯＭに切り替えられ、アクティブＲＯＭであるバンクＡに書き込まれているリビジョン３．０のプログラムがインアクティブＲＯＭであるバンクＢにコピーされる。
【００３５】
従って、車両ＶＨの走行中にもプログラムを更新可能としつつ、アクティブＲＯＭのプログラムとインアクティブＲＯＭのプログラムを同一とすることができ、例えば、アクティブＲＯＭの異常によってインアクティブＲＯＭに切り替えても、車両運転者などが違和感を覚え難くすることができる。また、アクティブＲＯＭに異常が発生しても、インアクティブＲＯＭに書き込まれているプログラムによって同一の制御が継続されるため、例えば、フェイルセーフモードなどの縮退運転を回避することができる。
【００３６】
ところで、アクティブＲＯＭに書き込まれているプログラムは、例えば、ノイズなどによって書き換わって所要の機能を発揮できなくなる可能性がある。そこで、以下説明するように、電子制御装置１００の起動時にアクティブＲＯＭのプログラムを診断し、そのプログラムに異常が発生していれば、異常が発生していないと考えられるプログラムをコピーして修復するようにする。
【００３７】
図８は、電子制御装置１００が起動されたことを契機として、電子制御装置１００のプロセッサ１２０が、コードフラッシュメモリ１４０に書き込まれている初期化プログラムに従って実行する、第２の初期化処理の一例を示している。ここで、電子制御装置１００のデータフラッシュメモリ１６０には、起動バンク情報及びコピー要求を格納する領域に加え、修復要求を格納する領域が予め確保され、その初期値として、修復要求が「要求なし」にセットされている。修復要求を格納する領域は、データフラッシュメモリ１６０に限らず、コードフラッシュメモリ１４０に予め確保されていてもよい。また、電子制御装置１００のプロセッサ１２０は、第２の初期化処理に続いて、制御対象であるエンジン、自動変速機、モータなどを制御する通常制御を実行する。なお、第１の初期化処理と共通する処理については、重複説明を排除する目的でその説明を簡単にする。必要があれば、第１の初期化処理の説明を参照されたい。
【００３８】
ステップ２１では、電子制御装置１００のプロセッサ１２０が、データフラッシュメモリ１６０から起動バンク情報を読み込む。
【００３９】
ステップ２２では、電子制御装置１００のプロセッサ１２０が、起動バンク情報により特定されるアクティブＲＯＭについて、そこに書き込まれているプログラムに異常が発生しているか否かを診断する、アクティブＲＯＭ診断を行うサブルーチンをコールする。ここで、アクティブＲＯＭ診断においては、詳細を後述するように、アクティブＲＯＭに異常が発生していれば、アクティブＲＯＭがインアクティブＲＯＭに切り替えられ、インアクティブＲＯＭがアクティブＲＯＭに切り替えられ、かつ修復要求がセットされる。なお、アクティブＲＯＭ診断は、サブルーチン形式に限らず、第２の初期化処理に組み込むようにしてもよい。
【００４０】
ステップ２３では、電子制御装置１００のプロセッサ１２０が、コピー要求があるか否かを判定する。そして、電子制御装置１００のプロセッサ１２０は、コピー要求があると判定すれば（Ｙｅｓ）、処理をステップ２４へと進める。一方、電子制御装置１００のプロセッサ１２０は、コピー要求がないと判定すれば（Ｎｏ）、処理をステップ２６へと進める。
【００４１】
ステップ２４では、電子制御装置１００のプロセッサ１２０が、コピー要求があったので、アクティブＲＯＭのプログラムをインアクティブＲＯＭにコピーする。
【００４２】
ステップ２５では、電子制御装置１００のプロセッサ１２０が、コピー要求をリセットする。その後、電子制御装置１００のプロセッサ１２０は、第２の初期化処理を終了させて通常制御へと移行する。
【００４３】
ステップ２６では、電子制御装置１００のプロセッサ１２０が、コードフラッシュメモリ１４０の修復要求を参照し、修復要求がセットされているか否か、要するに、修復要求があるか否かを判定する。そして、電子制御装置１００のプロセッサ１２０は、修復要求があると判定すれば（Ｙｅｓ）、処理をステップ２７へと進める。一方、電子制御装置１００のプロセッサ１２０は、修復要求がないと判定すれば（Ｎｏ）、第２の初期化処理を終了させて通常制御へと移行する。
【００４４】
ステップ２７では、電子制御装置１００のプロセッサ１２０が、修復要求があったので、アクティブＲＯＭのプログラム、即ち、異常が発生していないと考えられるプログラムをインアクティブＲＯＭにコピーして修復する。従って、異常が発生したプログラムが修復され、アクティブＲＯＭのプログラムとインアクティブＲＯＭのプログラムを同一とすることができる。
【００４５】
ステップ２８では、電子制御装置１００のプロセッサ１２０が、修復要求に応答したので、修復要求をリセット、要するに、データフラッシュメモリ１６０に格納されている修復要求を「要求なし」に変更する。その後、電子制御装置１００のプロセッサ１２０は、第２の初期化処理を終了させて通常制御へと移行する。
【００４６】
図９は、サブルーチン形式をとるアクティブＲＯＭ診断処理の一例を示している。
ステップ３１では、電子制御装置１００のプロセッサ１２０が、起動バンク情報により特定されるアクティブＲＯＭについて、例えば、ＣＲＣやチェックサムなどを使用して、アクティブＲＯＭに書き込まれているプログラムに異常が発生しているか否かを判定する。そして、電子制御装置１００のプロセッサ１２０は、アクティブＲＯＭに書き込まれているプログラムに異常が発生していると判定すれば（Ｙｅｓ）、処理をステップ３２へと進める。一方、電子制御装置１００のプロセッサ１２０は、アクティブＲＯＭに書き込まれているプログラムに異常が発生していない、即ち、そのプログラムは正常であると判定すれば（Ｎｏ）、アクティブＲＯＭ診断処理を終了させて第２の初期化処理へとリターンする。
【００４７】
ステップ３２では、電子制御装置１００のプロセッサ１２０が、異常が発生していない可能性が高いインアクティブＲＯＭに書き込まれているプログラムにより制御対象を制御すべく、起動バンク情報をインアクティブＲＯＭに更新する。要するに、電子制御装置１００のプロセッサ１２０は、アクティブＲＯＭに書き込まれたプログラムに異常が発生した場合、後の処理において、アクティブＲＯＭとインアクティブＲＯＭとを切り替え、アクティブＲＯＭに書き込まれているプログラムにより制御対象を継続して制御すべく、起動バンク情報を更新する。なお、プログラムのコピーによって異常が修復され得ることを鑑み、起動バンク情報を更新しなくてもよい。
【００４８】
ステップ３３では、電子制御装置１００のプロセッサ１２０が、異常が発生していないプログラムを異常が発生したプログラムに上書きして修復することを要求する、修復要求をセット、要するに、修復要求に「要求あり」をセットする。
【００４９】
ステップ３４では、電子制御装置１００のプロセッサ１２０が、第２の初期化処理を最初から実行すべく、ソフトウエアリセットを実行する。ソフトウエアリセットを実行すると、本明細書で説明していない初期化処理が再実行され、予期せぬ処理が行われることを回避することができる。なお、ソフトウエアリセットの実行により、必然的に、アクティブＲＯＭ診断処理が終了する。
【００５０】
かかる第２の初期化処理及びアクティブＲＯＭ診断処理によれば、第１の初期化処理の作用及び効果に加え、アクティブＲＯＭに書き込まれているプログラムに異常が発生すると、これに異常が発生していないと考えられるプログラムが上書きされ、その異常が修復される。従って、プログラムの更新後において、何らかの理由によってアクティブＲＯＭに書き込まれているプログラムに異常が発生しても、アクティブＲＯＭに書き込まれているプログラムとインアクティブＲＯＭに書き込まれているプログラムのリビジョンを同一とすることができる。また、アクティブＲＯＭに書き込まれているプログラムに異常が発生するとソフトウエアリセットが実行されるので、これを契機として、アクティブＲＯＭとインアクティブＲＯＭとが切り替えられ、アクティブＲＯＭに書き込まれているプログラムにより制御対象が継続して制御される。
【００５１】
図１０に示す具体的な事例を参照し、アクティブＲＯＭに書き込まれているプログラムに異常が発生した場合、これをどのようにして修復するかについて説明する。アクティブＲＯＭであるバンクＡ及びインアクティブＲＯＭであるバンクＢにリビジョン１．０のプログラムが夫々書き込まれている初期状態において、何らかの理由によってアクティブＲＯＭであるバンクＡに格納されているプログラムに異常が発生した場合を考察する。バンクＡのプログラムに異常が発生したことが検知されると、起動バンク情報が「バンクＢ」に切り替えられると共に修復要求がセットされ、その後、ソフトウエアリセットが実行される。そして、第２の初期化処理が最初から実行され、修復要求のセットに応答して、異常が発生していないと考えられるバンクＢに書き込まれているプログラムをバンクＡにコピーし、異常が発生しているプログラムを正常なプログラムで上書きして修復する。
【００５２】
コードフラッシュメモリ１４０に確保されたインアクティブＲＯＭは、プログラムを更新するためだけに使用されるため、コードフラッシュメモリ１４０の利用可能な記憶領域が小さくなってしまう欠点がある。そこで、コードフラッシュメモリ１４０を効率的に利用することを目的として、インアクティブＲＯＭが未使用である場合、そこに故障情報などの任意のデータを書き込むようにしてもよい。
【００５３】
また、コードフラッシュメモリ１４０に確保されたバンクＡ及びＢの一方、例えば、バンクＢは、図１１に示すように、複数のプログラムの中から所定規則によって選定された少なくとも１つのプログラムの専用領域と、他の少なくとも１つのプログラムで共用する共用領域と、に区画されていてもよい。図示の例では、バンクＢは、プログラムＡの専用領域Ａ、プログラムＢの専用領域Ｂ、及びプログラムＣ〜Ｆで共用する共用領域に区画されているが、そのデータ構造は任意とすることができる。さらに、所定規則としては、車両ＶＨを制御するプログラムの重要度、例えば、安全性に関する重要度などとすることができる。なお、バンクＡ及びＢは、各プログラムについて、一方をアクティブＲＯＭ、他方をインアクティブＲＯＭに排他的に切り替えることができる。
【００５４】
図１２は、電子制御装置１００のプロセッサ１２０が、コードフラッシュメモリ１４０に書き込まれている書き込みプログラムに従って、インアクティブＲＯＭにプログラムを書き込むときに実行するプログラム書き込み処理の一例を示している。
【００５５】
ステップ４１では、電子制御装置１００のプロセッサ１２０が、例えば、各プログラムについて専用領域又は共用領域に書き込むかを定義したテーブルを参照し、書き込み対象のプログラムを共用領域に書き込むか否かを判定する。ここで、テーブルは、プログラムの重要度などを考慮して作成され、例えば、コードフラッシュメモリ１４０に予め格納されている。そして、電子制御装置１００のプロセッサ１２０は、書き込み対象のプログラムを共用領域に書き込むと判定したならば（Ｙｅｓ）、処理をステップ４２へと進める。一方、電子制御装置１００のプロセッサ１２０は、書き込み対象のプログラムを共用領域に書き込まない、即ち、その重要度が高いために専用領域に書き込むと判定したならば（Ｎｏ）、処理をステップ４６へと進める。
【００５６】
ステップ４２では、電子制御装置１００のプロセッサ１２０が、コードフラッシュメモリ１４０のバンクＢを参照し、その共用領域に空きがあるか否か、即ち、書き込み対象のプログラムを書き込むことができるか否かを判定する。そして、電子制御装置１００のプロセッサ１２０は、共用領域に空きがないと判定したならば（Ｙｅｓ）、処理をステップ４３へと進める。一方、電子制御装置１００のプロセッサ１２０は、共用領域に空きがあると判定したならば（Ｎｏ）、処理をステップ４５へと進める。
【００５７】
ステップ４３では、電子制御装置１００のプロセッサ１２０が、バンクＢの共用領域に書き込まれているプログラムの中から、例えば、重要度の低いもの、タイムスタンプが最古のもの、プログラムサイズが近いものなどを考慮し、消去する少なくとも１つのプログラムを選択する。なお、消去する少なくとも１つのプログラムは、上記の例に限らず、任意の規則によって選定することができる。
【００５８】
ステップ４４では、電子制御装置１００のプロセッサ１２０が、バンクＢの共用領域に書き込まれているプログラムの中から、ステップ４３で選択された少なくとも１つのプログラムを消去する。従って、バンクＢの共用領域には、書き込み対象のプログラムを書き込むためのスペースが生まれる。
【００５９】
ステップ４５では、電子制御装置１００のプロセッサ１２０が、バンクＢの共用領域に書き込み対象のプログラムを書き込む。その後、電子制御装置１００のプロセッサ１２０は、プログラム書き込み処理を終了させ、これに続く処理を引き続いて実行する。
【００６０】
ステップ４６では、電子制御装置１００のプロセッサ１２０が、バンクＢの専用領域に書き込み対象のプログラムを書き込む。その後、電子制御装置１００のプロセッサ１２０は、プログラム書き込み処理を終了させ、これに続く処理を引き続いて実行する。
【００６１】
かかるプログラム書き込み処理によれば、重要度の高いプログラムは、これと一対一に関連付けられた専用領域を使用して更新され、重要度の低いプログラムは、複数のプログラムで共用する共用領域を使用して更新される。このとき、共用領域に書き込み対象のプログラムを書き込む余裕がなければ、例えば、プログラムの重要度などに応じて選定された少なくとも１つのプログラムが消去され、そこにプログラムが書き込まれる。従って、コードフラッシュメモリ１４０に確保された予約領域が小さくなり、コードフラッシュメモリ１４０の記憶領域を効率的に利用することができる。
【００６２】
ここで、具体的な事例を想定し、バンクＢの共用領域をどのように使用して、プログラムを更新するかについて説明する。
コードフラッシュメモリ１４０の初期状態では、図１３に示すように、バンクＡにプログラムＡ１、Ｂ１、Ｃ１、Ｄ１、Ｅ１及びＦ１が書き込まれており、バンクＢにプログラムＡ及びＢの専用領域とプログラムＣ〜Ｆで共用する共用領域が確保されている。そして、外部からの更新要求に応じて、プログラムＡ２、Ｂ２、Ｃ２及びＤ２を書き込んで更新すると、図１４に示すように、バンクＢの専用領域にプログラムＡ２及びＢ２が書き込まれ、バンクＢの共用領域にプログラムＣ２及びＤ２が書き込まれる。この状態では、バンクＢの共用領域には空きがなく、ここに他のプログラムを書き込んで更新することができない。
【００６３】
外部からの更新要求に応じてプログラムＥ２を書き込んで更新する場合、バンクＢの共用領域に空きがないため、プログラムＣ２及びＤ２の少なくとも一方を消去しなければならない。そこで、図１５に示すように、バンクＢの共用領域について、例えば、タイムスタンプが最古のプログラムＣ２を消去し、そこにプログラムＥ２を書き込んで更新する。
【００６４】
その後、外部からの更新要求に応じてプログラムＦ２を書き込んで更新する場合、バンクＢの共用領域に空きがないため、プログラムＤ２及びＥ２の少なくとも一方を消去しなければならない。そこで、図１６に示すように、バンクＢの共用領域について、例えば、タイムスタンプが最古のプログラムＤ２を消去し、そこにプログラムＦ２を書き込んで更新する。
【００６５】
なお、当業者であれば、上記実施形態の様々な技術的思想について、その一部を省略したり、その一部を適宜組み合わせたり、その一部を置換したりすることで、新たな実施形態を生み出せることを容易に理解できるであろう。
【符号の説明】
【００６６】
１００  電子制御装置
１２０  プロセッサ
１４０  コードフラッシュメモリ（不揮発性メモリ）
【図１】
2020119419.tif 000003
【図２】
2020119419.tif 000004
【図３】
2020119419.tif 000005
【図４】
2020119419.tif 000006
【図５】
2020119419.tif 000007
【図６】
2020119419.tif 000008
【図７】
2020119419.tif 000009
【図８】
2020119419.tif 000010
【図９】
2020119419.tif 000011
【図１０】
2020119419.tif 000012
【図１１】
2020119419.tif 000013
【図１２】
2020119419.tif 000014
【図１３】
2020119419.tif 000015
【図１４】
2020119419.tif 000016
【図１５】
2020119419.tif 000017
【図１６】
2020119419.tif 000018