(57)【特許請求の範囲】
【請求項１】
書き換え可能な不揮発メモリと、演算部とを有し、
前記不揮発メモリが、
前記演算部が実行可能な制御プログラムを格納する第１の記憶領域及び第２の記憶領域と、
前記演算部が実行している現行の制御プログラムが格納されている記憶領域が、前記第１の記憶領域及び前記第２の記憶領域のいずれであるかを表す現行プログラムエリア情報を含む管理データを格納する複数の管理データ格納領域と、を有する、車両に搭載される車両制御装置と、
前記車両に搭載され、前記車両制御装置と車載ネットワークを通じて接続されて前記車両制御装置の制御プログラムの更新を制御するプログラム書込装置と、
前記車両制御装置の更新用の制御プログラムを含む更新パッケージを前記プログラム書込装置に無線通信を介して配信するサーバと、を備え、
前記プログラム書込装置が、前記現行の制御プログラムを表す識別番号と前記現行プログラムエリア情報とを前記サーバに送信し、
前記サーバが、前記プログラム書込装置から送信された前記識別番号および前記現行プログラムエリア情報に基づいて選択された前記更新パッケージを当該プログラム書込装置に配信することを特徴とするプログラム更新システム。
【請求項２】
前記更新パッケージが、
前記現行の制御プログラムを表す識別番号と、
前記現行プログラムエリア情報と、
更新用の制御プログラムを表す識別番号と、
前記更新用の制御プログラムを格納する記憶領域が第１の記憶領域及び第２の記憶領域のいずれであるかを表す情報と、を含むことを特徴とする請求項１に記載のプログラム更新システム。
【請求項３】
前記プログラム書込装置が、前記サーバに送信した前記識別番号および前記現行プログラムエリア情報と、前記サーバから受信した前記更新パッケージに含まれる前記識別番号および前記現行プログラムエリア情報とが、それぞれ一致したときのみ、前記車両制御装置の前記制御プログラムの更新処理を実行することを特徴とする請求項２に記載のプログラム更新システム。
【請求項４】
前記プログラム書込装置が、前記更新パッケージに含まれる更新用の制御プログラムが前記車両制御装置の前記不揮発メモリに正常に書き込まれ、かつ、前記車両が停車中であると判定したとき、前記車両制御装置に、前記現行プログラムエリア情報を前記更新用の制御プログラムが書き込まれた記憶領域を表す値に切替える要求を送信することを特徴とする請求項１〜請求項３のいずれか一項に記載のプログラム更新システム。
【請求項５】
前記プログラム書込装置が、前記更新パッケージに含まれる更新用の制御プログラムが前記車両制御装置の前記不揮発メモリに正常に書き込まれ、かつ、前記車両が停車中でないと判定したとき、前記車両の停車を促すための処理を実行することを特徴とする請求項４に記載のプログラム更新システム。
【請求項６】
車両に搭載され、車両制御装置と車載ネットワークを通じて接続されて前記車両制御装置の制御プログラムの更新を制御するプログラム書込装置であって、
前記車両制御装置は、前記車両に搭載され、書き換え可能な不揮発メモリと、演算部とを有し、前記不揮発メモリが、前記演算部が実行可能な制御プログラムを格納する第１の記憶領域及び第２の記憶領域と、前記演算部が実行している現行の制御プログラムが格納されている記憶領域が、前記第１の記憶領域及び前記第２の記憶領域のいずれであるかを表す現行プログラムエリア情報を含む管理データを格納する複数の管理データ格納領域と、を有し、
前記プログラム書込装置は、
前記現行の制御プログラムを表す識別番号と前記現行プログラムエリア情報とを無線通信回線を介してサーバに送信し、
前記サーバによって前記識別番号および前記現行プログラムエリア情報に基づいて選択された車両制御装置の更新用の制御プログラムを含む更新パッケージを、前記サーバから受信する
プログラム書込装置。
【請求項７】
前記サーバから受信した前記更新パッケージは、
前記現行の制御プログラムを表す識別番号と、
前記現行プログラムエリア情報と、
更新用の制御プログラムを表す識別番号と、
前記更新用の制御プログラムを格納する記憶領域が第１の記憶領域及び第２の記憶領域のいずれであるかを表す情報と、を含むことを特徴とする請求項６に記載のプログラム書込装置。
【請求項８】
前記サーバに送信した前記識別番号および前記現行プログラムエリア情報と、前記サーバから受信した前記更新パッケージに含まれる前記識別番号および前記現行プログラムエリア情報とが、それぞれ一致したときのみ、前記車両制御装置の前記制御プログラムの更新処理を実行することを特徴とする請求項７に記載のプログラム書込装置。
【請求項９】
前記更新パッケージに含まれる更新用の制御プログラムが前記車両制御装置の前記不揮発メモリに正常に書き込まれ、かつ、前記車両が停車中であると判定したとき、前記車両制御装置に、前記現行プログラムエリア情報を前記更新用の制御プログラムが書き込まれた記憶領域を表す値に切替える要求を送信することを特徴とする請求項６〜請求項８のいずれか一項に記載のプログラム書込装置。
【請求項１０】
前記更新パッケージに含まれる更新用の制御プログラムが前記車両制御装置の前記不揮発メモリに正常に書き込まれ、かつ、前記車両が停車中でないと判定したとき、前記車両の停車を促すための処理を実行することを特徴とする請求項９に記載のプログラム書込装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両制御装置およびプログラム更新システムに関するものである。
【背景技術】
【０００２】
車両制御装置は、車両を制御する動作を実装した制御プログラムを実行する演算部（例えばマイクロコンピュータ）、およびこの演算部に実行される制御プログラムを格納するＦｌａｓｈＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの書き換え可能な不揮発メモリを備える。【０００３】
従来、車両制御装置の制御プログラムの更新は、販売店や整備工場などに持ち込まれた車両に専門の整備員がプログラム書込装置を接続して行うことが多かった。しかし、車両が無線通信によりインターネットに常時接続する、いわゆる「コネクティッド・ビークル」の急速な普及により、カーナビゲーションシステムにおける機能追加や地図データなどの更新と同様に、車両の制御プログラムについても、無線通信を介してユーザ自身で更新を行うことが想定されるようになってきた。【０００４】
その一方で、車両制御装置の制御プログラムの更新時に何らかの要因（通信の途絶、ハードウェア異常発生など）で新バージョンの制御プログラムの書き込みが失敗してしまった場合には、新バージョンの制御プログラムはもちろんのこと、旧バージョンの制御プログラムも使用不能あるいは機能不全を来たすことととなり、最悪の場合、車両を動かせなくなるおそれがある。【０００５】
そこで、例えば下記特許文献１に開示された自動車用制御ユニットでは、現行の制御プログラムを格納する主格納エリアと、更新用の新バージョンの制御プログラムを格納する副格納エリアとをＦｌａｓｈＲＯＭに設け、制御プログラムの更新の際、各エリアに交互に書き込みを行うことにより、新バージョンの制御プログラムの書き込みに失敗しても、旧バージョンの制御プログラムは引き続き使用可能となるようにしている。【０００６】
この自動車制御用ユニットは、更新後の制御プログラムを実行する際、バージョンの異なるプログラムが格納されたそれぞれの格納エリアにアクセスして、各制御プログラムに付与されているバージョン情報を読み出して比較し、新しいバージョンとして識別された方を現行の制御プログラムとして実行する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−３０１９６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述した自動車制御ユニットのように、格納エリアに格納されたバージョンの異なる２つの制御プログラムのうちのより新しいバージョンを現行の制御プログラムとして実行する構成においては、どちらの格納エリアに現行の制御プログラムが格納されているか判断する必要がある。制御プログラムの更新の際にも同様である。そのため、どちらの格納エリアに現行の制御プログラムが格納されているかの判断に用いる情報は重要である。【０００９】
そこで、本発明は、不揮発メモリに格納した複数の制御プログラムの実行及び更新を適切に行うことを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一実施形態に係る車両制御装置は、書き換え可能な不揮発メモリと、演算部とを有し、前記不揮発メモリが、前記演算部が実行可能な制御プログラムを格納する第１の記憶領域及び第２の記憶領域と、前記演算部が実行している現行の制御プログラムが格納されている記憶領域が、前記第１の記憶領域及び前記第２の記憶領域のいずれであるかを表す現行プログラムエリア情報を含む管理データを格納する複数の管理データ格納領域と、を有する。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態に係る車両制御装置を備えたプログラム更新システムの構成図である。
【図２】車両が有する車載ネットワークシステムの構成図である。
【図３】車両制御装置の機能ブロック図である。
【図４】管理データエリアの配置例を示す図である。
【図５】管理データエリアの他の配置例を示す図である。
【図６】更新パッケージを車両にダウンロードする処理の一例を示すシーケンス図である。
【図７】更新パッケージの構成例を示す図である。
【図８】車両制御装置が制御プログラムを更新する処理の一例を示すシーケンス図である。
【図９】車両制御装置によって実行される、現行プログラムエリア情報を取得する処理の一例を示すフローチャートである。
【図１０】多数決判定処理の一例を示すフローチャートである。
【図１１】有効性判定処理の一例を示すフローチャートである。
【図１２】車両制御装置がゲートウェイに現行プログラムエリア情報を送信するための応答メッセージの構成例である。
【図１３】ゲートウェイによって実行される、リプログラミングを開始するか判定する処理の一例を示すフローチャートである。
【図１４】ゲートウェイによって実行される、車両制御装置にプログラムエリア切替え要求を行う処理の一例を示すフローチャートである。
【図１５】プログラムエリア切替え要求のコマンド例である。
【図１６】車両制御装置がプログラムエリア切替えを行う処理の一例を示すフローチャートである。
【図１７】車両制御装置において実行される、制御プログラムを起動する処理の一例を示すフローチャートである。
【図１８】現行プログラムエリア情報を含む複数の情報を有する管理データの構成例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本発明の一実施形態に係るプログラム更新システムについて、各図を参照して説明する。
【００１３】
図１は、本発明の一実施形態に係るプログラム更新システムの構成図である。このプログラム更新システムは、車両１、サーバ２、インターネット回線３、無線基地局４を備える。車両１は、インターネット回線３および無線基地局４を介し、無線通信によりサーバ２と接続し、相互に通信する。無線通信は、例えば、３Ｇ／ＬＴＥなどの公衆回線による携帯電話網やＷｉＦｉなどの回線を用いて実現される。サーバ２は、車両１が有する車両制御装置１１の制御プログラムの更新に必要な更新パッケージ５を、車両１に対して配信する。車両１の車両制御装置１１は、その更新パッケージ５を用いて制御プログラムの更新を行う。
【００１４】
図２は、車両１に搭載された車載ネットワークシステムの構成図である。車両制御装置１１は、車両１の動作を制御する制御プログラムを実行する装置であり、車載ネットワーク１３（例えばＣＡＮ（Ｃａｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ））を介してゲートウェイ１２と接続されている。車両制御装置１１は、ゲートウェイ１２を介して他の車両制御装置１１と通信することができる。
【００１５】
また、ゲートウェイ１２は、車両制御装置１１の制御プログラムの更新を制御するプログラム書込装置としての役割も有する。ゲートウェイ１２は、サーバ２から更新パッケージ５を受信し、車両制御装置１１に対して制御プログラムの更新命令（リプログラミング命令）および更新用の制御プログラムを送信する。ゲートウェイ１２とは別に、プログラム書込装置を設けてもよい。
【００１６】
ゲートウェイ１２は、演算部１２１、ＦｌａｓｈＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１２２、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２３、ＣＡＮトランシーバおよび無線通信モジュールを含む通信装置１２４を有している。演算部１２１は、ＦｌａｓｈＲＯＭ１２２に格納されたプログラムを実行することにより、車載ネットワーク１３上の車両制御装置１１やサーバ２との間で通信を行う。また、車両制御装置１１の制御プログラムの更新時に、ゲートウェイ１２は、サーバ２から更新パッケージ５を受信してＦｌａｓｈＲＯＭ１２２に一時的に格納し、一時的に格納したこの更新パッケージ５を用いて車両制御装置１１の制御プログラムの更新を行う。
【００１７】
また、ＨＭＩ（Ｈｕｍａｎ−Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ）１４は、例えば、車両１のダッシュボート中央に埋め込まれた各種表示用の液晶ディスプレイ装置、その近傍に配置された操作スイッチ類および車載スピーカなどで構成されている。ＨＭＩ１４は、車両１の乗員に対して各種表示を行ったり、各種入力操作を処理したりする。また、ＨＭＩ１４は、車両制御装置１１の制御プログラムの更新に係る表示や操作入力が行われる。
【００１８】
図３は、車両制御装置１１の機能ブロック図である。車両制御装置１１は、演算部１１１、ＦｌａｓｈＲＯＭ１１２、ＳＲＡＭ１１３、通信装置１１４（例えばＣＡＮトランシーバ）を備える。
【００１９】
演算部１１１は、ＦｌａｓｈＲＯＭ１１２が格納している制御プログラムを実行する、例えばマイクロコンピュータなどの演算装置である。以下では記載の便宜上、各プログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのは演算部１１１である。
【００２０】
ＦｌａｓｈＲＯＭ１１２は、書き換え可能な不揮発メモリであって、起動プログラム１１２１、書換プログラム１１２２、多数決判定プログラム１１２６、有効性判定プログラム１１２７を格納している。さらにＦｌａｓｈＲＯＭ１１２は、第１の記憶領域としての第１エリア１１２４と、第２の記憶領域としての第２エリア１１２５と、複数の管理データ格納領域としての複数の管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃと、を有する。
【００２１】
第１エリア１１２４は、演算部１１１が実行可能な制御プログラムを格納する記憶領域である。第２エリア１１２５は、演算部１１１が実行可能でかつ第１エリア１１２４に格納された制御プログラムと異なるバージョンの制御プログラムを格納する記憶領域である。複数の管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃは、演算部１１１に実行されるべき現行の制御プログラムを格納している記憶領域として第１エリア１１２４および第２エリア１１２５のうちの一方の記憶領域を表す現行プログラムエリア情報を含む管理データを格納する記憶領域である。
【００２２】
起動プログラム１１２１は、車両制御装置１１が通常モードで起動したとき演算部１１１が最初に実行するプログラムである。
【００２３】
書換プログラム１１２２は、車両制御装置１１がリプログラミングモード（以下、「リプロモード」という。）に遷移したとき演算部１１１が実行するプログラムである。演算部１１１は、書換プログラム１１２２を実行すると、ゲートウェイ１２からの要求にしたがって、第１エリア１１２４および第２エリア１１２５のうちの一方のエリアに格納されている現行の制御プログラムをそのまま残し、他方のエリアに格納されている現行の制御プログラムでない旧バージョンの制御プログラムまたは空データを更新用の新バージョンの制御プログラム（以下、単に「新制御プログラム」という。）に書換える。本実施形態では、一例として、更新前の状態において、第１エリア１１２４に現行の制御プログラムＰ１が格納されており、第２エリア１１２５に旧バージョンの制御プログラムまたは空データが格納されているものとする。
【００２４】
多数決判定プログラム１１２６および有効性判定プログラム１１２７については後述する。
【００２５】
図４は、管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃの配置例を示す図である。管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃは、ＦｌａｓｈＲＯＭ１１２の消去および書込みの単位ブロックである物理ブロックの１つにまとめて配置されている。管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃは、同一内容の管理データ１、２、３を格納するように構成されている。本実施形態では、管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃは、同一内容の管理データ１、２、３を格納する。管理データ１、２、３は、それぞれに現行プログラムエリア情報を含んでいる。
【００２６】
現行プログラムエリア情報は、第１エリア１１２４および第２エリア１１２５のどちらが現行の制御プログラムを格納しているかを表すフラグである。
【００２７】
図５は、管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃの他の配置例を示す図である。管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃは、ＦｌａｓｈＲＯＭ１１２の異なる物理ブロックに一つずつ分散して配置されている。このようにすることで、特定の物理ブロックでの書込みエラー等により、すべての管理データを失う可能性を低くすることができる。
【００２８】
図６は、更新パッケージ５をサーバ２からゲートウェイ１２にダウンロードする処理の一例を示すシーケンス図である。
【００２９】
車両制御装置１１の制御プログラムの修正が行われると、制御プログラムの更新の準備として、サーバ２への更新パッケージ５の登録が行われる。そして、車両１のイグニッションを起動したタイミングで、ゲートウェイ１２は、車両制御装置１１に対して、現行の制御プログラムの部品番号を要求する部品番号要求メッセージＭ６０１を送信する。車両制御装置１１は、部品番号要求メッセージＭ６０１を受信すると、現行の制御プログラムの部品番号と現行プログラムエリア情報を含む応答メッセージＭ６０２を送信する。部品番号は、制御プログラムを識別する番号（識別番号）であり、各バージョンの制御プログラム毎に一意に付されており、現行の制御プログラムと更新用の新制御プログラムと旧バージョンの制御プログラムとは互いに異なる部品番号を持つ。
【００３０】
次に、ゲートウェイ１２は、サーバ２に対して、更新パッケージ取得要求メッセージＭ６０３を送信する。更新パッケージ取得要求メッセージＭ６０３には、応答メッセージＭ６０２から取得した車両制御装置１１の現行の制御プログラムの部品番号と現行プログラムエリア情報が含まれる。サーバ２は、更新パッケージ取得要求メッセージＭ６０３を受信すると、それに含まれる部品番号と現行プログラムエリア情報に基づき、登録されている更新パッケージの中から該当する更新パッケージ５を選択し、更新パッケージ取得要求メッセージＭ６０３を送信したターゲットの車両１に更新パッケージ５を含む更新パッケージ配信メッセージＭ６０４を送信する（更新パッケージの選択／配信処理Ｓ６０１）。
サーバ２に、現行の制御プログラムの部品番号と現行プログラムエリア情報を送信することで、サーバ２において適切な更新パッケージ５を選択することができる。なお、該当する更新パッケージ５がない場合、サーバ２はその旨を示すメッセージをゲートウェイ１２に送信し、ゲートウェイ１２および車両制御装置１１は更新処理を行わずに通常通り起動する。
【００３１】
ゲートウェイ１２は、配信された更新パッケージ５をＦｌａｓｈＲＯＭ１２２に蓄積し、更新パッケージ５の全データの蓄積が完了すると、サーバ２に対して受信完了メッセージＭ６０５を送信する（更新パッケージ蓄積処理Ｓ６０２）。この後、ゲートウェイ１２は、受信した更新パッケージ５に基づき、車両制御装置１１の制御プログラムの更新を実行する。
【００３２】
図７は、ゲートウェイ１２がサーバ２から取得する更新パッケージ５の構成例である。
更新パッケージ５は、更新制御情報５１と更新データ５２から成る。
【００３３】
更新制御情報５１は、現行の制御プログラムの部品番号５１１、新制御プログラムの部品番号５１２、現行の制御プログラムの格納エリア情報５１３、新制御プログラムの格納先エリア情報５１４、複数のＦｌａｓｈＲＯＭの書込みブロック情報５１５などの情報を含む。
【００３４】
現行の制御プログラムの格納エリア情報５１３は、車両制御装置１１の現行の制御プログラムが第１エリア１１２４および第２エリア１１２５のどちらのエリアに格納されているかを表す情報である。新制御プログラムの格納先エリア情報５１４は、本更新で新制御プログラムを書込む先のエリアを示す情報である。本実施形態では、更新前の状態において、現行の制御プログラムの格納エリア情報５１３「第１エリア１１２４」が格納され、新制御プログラムの格納先エリア情報５１４に「第２エリア１１２５」が格納される。ＦｌａｓｈＲＯＭの書込みブロック情報５１５は、ＦｌａｓｈＲＯＭの物理ブロック毎の先頭アドレスや容量（バイト数）を示す情報である。更新パッケージ５に、現行の制御プログラムの部品番号５１１および現行の制御プログラムの格納エリア情報５１３を含めることで、ゲートウェイ１２においてこれら情報を付き合わせて、要求したデータと受信したデータとの整合性をチェックできる。また、更新パッケージ５に、新制御プログラムの部品番号５１２および新制御プログラムの格納先エリア情報５１４を含めることで、次回更新時の上記整合性チェックに用いることができる。
【００３５】
更新データ５２は、更新用の新制御プログラムである更新データ５２１を含む。更新データ５２は、新制御プログラムそのものに限らず、例えば、新制御プログラムを圧縮処理したデータや、現行の制御プログラムと新制御プログラムとの差分データなどであってもよい。
【００３６】
図８は、車両制御装置１１が制御プログラムを更新する処理の一例を示すシーケンス図である。図８にしたがって、本実施形態における更新シーケンスについて以下に説明する。
【００３７】
ゲートウェイ１２は、制御プログラムの更新を開始（リプロ開始）すると、最初に車両制御装置１１に対して現行プログラム情報要求メッセージＭ８０１を送信して現行の制御プログラムに関する情報を要求する。車両制御装置１１は、現行プログラム情報要求メッセージＭ８０１を受信すると、現行の制御プログラムに関する情報を取得して、結果を情報応答メッセージＭ８０２に含めてゲートウェイ１２に送信する（現行プログラム情報取得処理Ｓ８０１）。ここで取得する現行の制御プログラムに関する情報は、現行の制御プログラムの部品番号と現行プログラムエリア情報である。現行プログラムエリア情報は、複数の管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃに格納されているが、それを取得する現行プログラム情報取得処理Ｓ８０１については後述する。
【００３８】
ゲートウェイ１２は、受信した情報応答メッセージＭ８０２に含まれる現行の制御プログラムの部品番号および現行プログラムエリア情報とゲートウェイ１２自身が持つ現行の制御プログラムの部品番号および現行プログラムエリア情報とを比較して、制御プログラムの更新開始の判定を行う（リプロ開始判定処理Ｓ８０２）。リプロ開始判定処理Ｓ８０２については後述する。比較結果が一致であれば、ゲートウェイ１２は、車両制御装置１１に対してモード遷移要求メッセージＭｍｏｄｅを送信し、車両制御装置１１を通常モードからリプロモードに遷移させる。リプロモードに遷移すると、車両制御装置１１の演算部１１１は、書換プログラム１１２２を実行する。これにより車両制御装置１１およびゲートウェイ１２は、プログラム更新処理を開始する。比較結果が不一致であれば、プログラム更新処理を開始しない。
【００３９】
プログラム更新処理では、ゲートウェイ１２は、車両制御装置１１に対して、書込み先エリアに更新用の新制御プログラムを書き込むよう更新プログラム書込メッセージＭ８０３を送信する。この更新プログラム書込メッセージＭ８０３には、更新パッケージ５の更新データ５２１（更新用の新制御プログラム）および新制御プログラムの格納先エリア情報５１４が含まれている。リプロモードにある車両制御装置１１は、ゲートウェイ１２から更新プログラム書込メッセージＭ８０３を受信すると、第１エリア１１２４および第２エリア１１２５のうちの新制御プログラムの格納先エリア情報５１４に示されるエリアに更新データ５２１を書き込む（書込み処理Ｓ８０３）。この書き込みの際に、車両制御装置１１は、管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃから取得した現行プログラムエリア情報に示されるエリアと、新制御プログラムの格納先エリア情報５１４に示されるエリアとが異なる（すなわち現行の制御プログラムを格納しているエリアとは異なるエリアに対して新制御プログラムの書き込みを行う）ことを確認してから、更新データ５２１を書き込むようにしてもよい。車両制御装置１１は、更新データ５２１の書き込みがすべて完了するとゲートウェイ１２に対して書込完了応答メッセージＭ８０４を送信する。
【００４０】
ゲートウェイ１２は、車両制御装置１１に対して、書き込んだデータの正当性をチェックするようデータ正当性チェックメッセージＭ８０５を送信する。車両制御装置１１は、データ正当性チェックメッセージＭ８０５を受信すると、書き込んだ更新用の新制御プログラムの正当性をチェックする（データ正当性チェック処理Ｓ８０４）。データの正当性チェックでは、書き込まれた新制御プログラムのデータに誤りがないか（更新データが正しく書き込まれたか）を検証する。具体的には、チェックサムやＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）、ハッシュ値を用いた誤り検出手段によってこれを実施する。車両制御装置１１は、データの正当性が確認されると、ゲートウェイ１２にデータ正当応答メッセージＭ８０６を送信する。
【００４１】
データの正当性が確認されると、ゲートウェイ１２は、現行の制御プログラムが格納されているエリアとして第１エリア１１２４および第２エリア１１２５のうちの一方のエリアから他方のエリアへの切替え可否を判定する（現行プログラムエリア切替え判定処理Ｓ８０５）。現行プログラムエリア切替え判定処理Ｓ８０５については後述する。切替え可能と判定した場合、車両制御装置１１に現行プログラムエリア切替え要求メッセージＭ８０７を送信する。車両制御装置１１は、現行プログラムエリア切替え要求メッセージＭ８０７を受信すると、現行の制御プログラムが格納されているエリアの切替えを行う（現行プログラムエリア切替え処理Ｓ８０６）。現行プログラムエリア切替え処理Ｓ８０６については後述する。
【００４２】
ゲートウェイ１２は、車両制御装置１１からエリア切替え完了応答メッセージＭ８０８を受信すると、車両制御装置１１に対してモード遷移要求メッセージＭｍｏｄｅを送信して、車両制御装置１１をリプロモードから通常モードに遷移させ、かつ、車両制御装置１１をリセットさせる。リセットにより車両制御装置１１は通常モードで再起動し、演算部１１１が起動プログラム１１２１を実行して、新たに書き込まれた新制御プログラムを現行の制御プログラムとして実行する。
【００４３】
図９は、現行プログラム情報取得処理Ｓ８０１の一例を示すフローチャートである。図９の各ステップについて以下に説明する。
【００４４】
車両制御装置１１の演算部１１１は、ゲートウェイ１２から現行プログラム情報要求メッセージＭ８０１を受信すると、本フローチャートに示す処理を開始する。
【００４５】
演算部１１１は、現行の制御プログラムの部品番号と管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃに格納される複数の現行プログラムエリア情報を読込む（Ｓ８０１１）。
【００４６】
次に、演算部１１１は、現行プログラムエリア情報の多数決判定を実施し、すべての現行プログラムエリア情報うちの過半数が一致した場合に、当該一致した現行プログラムエリア情報に示される値を正しい情報と判定する（多数決判定処理Ｓ８０１２、詳細は後述する）。現行プログラムエリア情報の過半数が一致した場合、続けて、演算部１１１は、多数決判定の結果得られたデータの有効性判定を行う（有効性判定処理Ｓ８０１３、詳細は後述する）。
【００４７】
有効性判定の結果が「有効」の場合、現行プログラムエリア情報に表される現行の制御プログラムの部品番号および当該現行プログラムエリア情報を含む情報応答メッセージＭ８０２をゲートウェイ１２に送信（応答）する（Ｓ８０１４）。現行プログラムエリア情報に表される現行の制御プログラムの部品番号および当該現行プログラムエリア情報をゲートウェイ１２に送信することで、ゲートウェイ１２においてこれら情報を用いてサーバから更新用の新制御プログラムを取得するとともに、取得した新制御プログラムのチェックを行うことができる。
【００４８】
現行プログラムエリア情報の過半数が一致しない場合または有効性判定の結果が「有効でない」の場合は、エラー情報を含む情報応答メッセージＭ８０２をゲートウェイ１２に送信（応答）する（Ｓ８０１５）。
【００４９】
図１０は、多数決判定処理Ｓ８０１２の一例を示すフローチャートである。図１０の各ステップについて以下に説明する。
【００５０】
演算部１１１は、多数決判定プログラム１１２６を実行することにより、本フローチャートに示す処理を開始する。
【００５１】
最初に、管理データエリア１１２３ａの現行プログラムエリア情報（図１０では「現行プログラムエリア情報＃１」）と管理データエリア１１２３ｂの現行プログラムエリア情報（図１０では「現行プログラムエリア情報＃２」）が一致するか判定する（Ｓ８０１２１）。一致した場合、そのデータを正しい現行プログラムエリア情報として採用し、「過半数が一致」を返す（Ｓ８０１２４）。一致しなかった場合は、次に管理データエリア１１２３ｂの現行プログラムエリア情報と管理データエリア１１２３ｃの現行プログラムエリア情報（図１０では「現行プログラムエリア情報＃３」）が一致するか判定する（Ｓ８０１２２）。一致した場合、そのデータを正しい現行プログラムエリア情報として採用し、「過半数が一致」を返す（Ｓ８０１２４）。一致しなかった場合は、次に「現行プログラムエリア情報＃１」と「現行プログラムエリア情報＃３」が一致するか判定する（Ｓ８０１２３）。一致した場合、そのデータを正しい現行プログラムエリア情報として採用し、「過半数が一致」を返す（Ｓ８０１２４）。
【００５２】
「現行プログラムエリア情報＃１」、「現行プログラムエリア情報＃１」および「現行プログラムエリア情報＃３」のうちの少なくとも２つが一致しない場合は、一致するデータ無しとみなして、「エラー（不一致）」を返す（Ｓ８０１２５）。
【００５３】
このように、複数の現行プログラムエリア情報のうち少なくとも過半数の一致が見られたものを正しい現行プログラムエリア情報として採用とすることで、万一、現行プログラムエリア情報の１つに、異常（データ化け）が発生しても、正しいと推測される他の現行プログラムエリア情報を用いた動作を継続することが可能となる。
【００５４】
なお、本実施形態では、３つの管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃを有する構成を例にとり説明したが、必ずしも３つである必要はなく、それ以上であってもよい。また、管理データエリアの数は、奇数であることが好ましいが偶数であってもよい。管理データエリアの数が偶数の場合は、例えば、複数の現行プログラムエリア情報のうち最も多く一致が見られたものを正しい現行プログラムエリア情報として採用してもよく、このような構成においても多数決と同様の作用効果が得られる。
【００５５】
図１１は、有効性判定処理Ｓ８０１３の一例を示すフローチャートである。図１１の各ステップについて以下に説明する。
【００５６】
演算部１１１は、有効性判定プログラム１１２７を実行することにより、本フローチャートに示される処理を開始する。
【００５７】
上述の多数決判定処理Ｓ８０１２において採用された現行プログラムエリア情報を取得する（Ｓ８０１３１）。次に、取得した現行プログラムエリア情報が、現行の制御プログラムの格納エリアを表す情報として有効な値（現行プログラムエリア情報として取り得る値の範囲に含まれる値）か否かを判定する（Ｓ８０１３２）。本実施形態では、第１エリア１１２４または第２エリア１１２５のいずれかを示す値となる。有効な値であれば、正しい現行プログラムエリア情報として採用し、「有効」を返す（Ｓ８０１３３）。
【００５８】
一方、取得したデータが、有効なデータ範囲内でない場合は、範囲エラーとして、「有効でない」を返す（Ｓ８０１３４）。本実施形態では、第１エリア１１２４または第２エリア１１２５を示す値でなかった場合を指す。
【００５９】
このように、現行プログラムエリア情報について多数決判定処理Ｓ８０１２に加え、当該情報自体の有効性をチェックすることで、異常な情報に基づいた処理を事前に防ぐことができる。
【００６０】
図１２は、車両制御装置１１がゲートウェイ１２に送信する情報応答メッセージＭ８０２の構成例である。情報応答メッセージＭ８０２は、コマンドＭ８０２１、部品番号Ｍ８０２２、現行プログラムエリア情報Ｍ８０２３を有する。
【００６１】
コマンドＭ８０２１は、本メッセージが現行プログラム情報要求メッセージＭ８０１の応答であることを示す情報が格納される。部品番号Ｍ８０２２は、車両制御装置１１の現行の制御プログラムの部品番号が格納される。現行プログラムエリア情報Ｍ８０２３は、車両制御装置１１の現行の制御プログラムが格納されるエリアを表す情報が格納される。
部品番号Ｍ８０２２および現行プログラムエリア情報Ｍ８０２３は、上述の現行プログラム情報取得処理Ｓ８０１にて取得された情報が格納される。
【００６２】
図１３は、ゲートウェイ１２において実行されるリプロ開始判定処理Ｓ８０２の一例を示すフローチャートである。図１３の各ステップについて以下に説明する。
【００６３】
ゲートウェイ１２（具体的には演算部１２１）は、情報応答メッセージＭ８０２を受信すると、本フローチャートに示される処理を開始する。
【００６４】
ゲートウェイ１２は、サーバ２から受信し、ＦｌａｓｈＲＯＭ１２２に蓄積した更新パッケージ５に含まれる現行の制御プログラムの部品番号５１１と車両制御装置１１から受信した情報応答メッセージＭ８０２に含まれる部品番号Ｍ８０２２とを比較する（Ｓ８０２１）。これら部品番号が一致した場合、ゲートウェイ１２は、更新パッケージ５に含まれる現行の制御プログラムの格納エリア情報５１３と車両制御装置１１から受信した情報応答メッセージＭ８０２に含まれる現行プログラムエリア情報Ｍ８０２３とを比較する。
これらが一致する場合、ゲートウェイ１２は、車両制御装置１１に対してリプロモードへの遷移の命令であるモード遷移要求メッセージＭｍｏｄｅを送信し（Ｓ８０２３）、車両制御装置１１を通常モードからリプロモードに遷移させ、プログラムの更新処理を開始する（Ｓ８０２４）。
【００６５】
ステップＳ８０２１およびＳ８０２２の比較処理において、不一致となった場合は、ゲートウェイ１２は、エラーを通知するメッセージをサーバに送信し（Ｓ８０２５）、プログラム更新処理を中止する（開始しない）（Ｓ８０２６）。
【００６６】
このように、リプロモードを開始する前に、ゲートウェイ１２において、車両制御装置１１の現行プログラムエリア情報をチェックすることで、異常を検出することができ、誤ったプログラム更新を事前にゲートウェイ１２側で防ぐことができる。
【００６７】
図１４は、ゲートウェイ１２において実行される現行プログラムエリア切替え判定処理Ｓ８０５の一例を示すフローチャートである。図１４の各ステップについて以下に説明する。
【００６８】
車両制御装置１１の現行の制御プログラムが格納されていない第２エリア１１２５への新制御プログラムの書込み（書込み処理Ｓ８０３）が完了し、更に、書込まれたデータの正当性をチェックするデータ正当性チェック処理Ｓ８０４が完了した後、ゲートウェイ１２は、車両制御装置１１の演算部１１１に実行される制御プログラムを、現行の制御プログラムから書込みした新制御プログラムに切替えるために、本フローチャートに示される処理を実行する。
【００６９】
ゲートウェイ１２は、車両が停車中かどうかを判定（Ｓ８０５１）し、停車中であれば、車両制御装置１１に現行プログラムエリア切替え要求メッセージＭ８０７を送信する（Ｓ８０５２）。一方、車両が停車中でない場合は、現行プログラムエリア切替え要求メッセージは送信しない。なお、車両が停車中でない場合、ＨＭＩ１４により、画面表示や音声によるガイダンスで運転者に車両の停車を促すようにしてもよい。このようにすることで、走行中に制御プログラムを切替えてしまうことを防ぐことができ、走行中の制御プログラムの切替えによる車両の異常動作などを回避することができる。
【００７０】
図１５は、ゲートウェイ１２から車両制御装置１１に送信する現行プログラムエリア切替え要求メッセージＭ８０７の構成例である。図１５に示すように、コマンドＭ８０７１、切替え先エリア情報Ｍ８０７２を有する。
【００７１】
コマンドＭ８０７１は、本メッセージが現行プログラムエリア切替え要求メッセージＭ８０７であることを示す。切替え先エリア情報Ｍ８０７２は、新制御プログラムを書込んだ先のエリアを表す情報であり、本実施形態では、一例として「第２エリア」が格納される。
【００７２】
図１６は、現行プログラムエリア切替え処理Ｓ８０６の一例を示すフローチャートである。図１６の各ステップについて以下に説明する。
【００７３】
車両制御装置１１の演算部１１１は、ゲートウェイ１２から現行プログラムエリア切替え要求メッセージＭ８０７を受信すると、本フローチャートに示される処理を開始する。
【００７４】
演算部１１１は、受信した現行プログラムエリア切替え要求メッセージＭ８０７の切替え先エリア情報Ｍ８０７２に基づき、切替え先が第１エリア１１２４か第２エリア１１２５かを判断する（Ｓ８０６１）。切替え先エリアが「第２エリア」の場合、第２エリア１１２５のデータの正当性チェック結果を読み出し（Ｓ８０６２）、読み出した正当性チェック結果を判定して（Ｓ８０６４）、結果が正常であるとき、すべての管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃの現行プログラムエリア情報に「第２エリア」を格納する（Ｓ８０６５）。または、切替え先エリアが「第１エリア」の場合、第１エリア１１２４のデータの正当性チェック結果を読み出し（Ｓ８０６３）、読み出した正当性チェック結果を判定して（Ｓ８０６６）、結果が正常であるとき、すべての管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃの現行プログラムエリア情報に「第１エリア」を格納する（Ｓ８０６７）。
【００７５】
演算部１１１は、すべての管理データエリア１１２３ａ〜１１２３ｃの更新が完了したら、ゲートウェイ１２にエリア切替え完了応答メッセージＭ８０８を送信する（Ｓ８０６８）。一方、ステップＳ８０６４またはステップＳ８０６６における正当性チェック結果が異常であった場合は、管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃの更新は行わず、ゲートウェイ１２にエリア切替え失敗応答メッセージを送信する（Ｓ８０６９）。
【００７６】
新制御プログラムの書込み処理Ｓ８０３が正常でなかった場合（データの正当性チェックが異常となった場合）は、すべての管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃは更新されずに現行の制御プログラムが格納されている制御エリアを表したままとなる。そのため、次回の起動において、正常に書込みされなかった新制御プログラムが実行されることはなく、現行の制御プログラムが以前と同様に実行される。これにより、正常に書込みされなかった新制御プログラムを実行することを回避して、現行の制御プログラムを実行することができる。
【００７７】
図１７は、起動プログラム１１２１の動作（起動処理Ｓ１７００）の一例を示すフローチャートである。図１７の各ステップについて以下に説明する。
【００７８】
演算部１１１は、例えば割込信号などによってイグニッションが起動された旨を検知すると、起動プログラム１１２１を実行することにより本フローチャートに示される処理を開始する。
【００７９】
演算部１１１は、複数の管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃに格納される現行プログラムエリア情報を読込む（Ｓ１７０１）。
【００８０】
演算部１１１は、現行プログラムエリア情報の多数決判定を実施し、現行プログラムエリア情報の過半数が一致したデータを正しい情報と判定する（多数決判定処理Ｓ１７０２）。続けて、演算部１１１は、多数決判定により正しい情報と判定された現行プログラムエリア情報の有効性判定を行う（有効性判定処理Ｓ１７０３）。多数決判定処理Ｓ１７０２および有効性判定処理Ｓ１７０３の詳細は、図１０および図１１に示す多数決判定処理Ｓ８０１２および有効性判定処理Ｓ８０１３と同様である。
【００８１】
演算部１１１は、有効性判定処理Ｓ１７０３の結果が正常でかつ「第１エリア」だった場合は、第１エリアに格納されている制御プログラムを実行し（Ｓ１７０４）、有効性判定処理Ｓ１７０３の結果が正常でかつ「第２エリア」だった場合は、第２エリアに格納されている制御プログラムを実行する（Ｓ１７０５）。
【００８２】
または、多数決判定処理Ｓ１７０２および有効性判定処理Ｓ１７０３の結果がエラーだった場合は、起動エラーとする（Ｓ１７０６）。
【００８３】
以上説明したように、本実施形態の車両制御装置１１は、ＦｌａｓｈＲＯＭ１１２と、演算部１１１とを有し、ＦｌａｓｈＲＯＭ１１２が、演算部１１１が実行可能な制御プログラムを格納する第１エリア１１２４および第２エリア１１２５と、演算部１１１に実行されるべき現行の制御プログラムを格納している記憶領域として第１エリア１１２４および第２エリア１１２５のうちの一方の記憶領域を表す現行プログラムエリア情報を含む管理データを格納する複数の管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃと、を有している。このようにしたことから、万一１つの管理データが破壊されても、他の管理データを用いて現行の制御プログラムを格納している記憶領域を判断することができる。
したがって、ＦｌａｓｈＲＯＭ１１２に格納した複数の制御プログラムの誤った実行および更新を効果的に抑制できる。
【００８４】
＜変形例について＞
本発明は上記実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換える事が可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について他の構成の追加・削除・置換をすることができる。
【００８５】
上述した実施形態では、制御プログラムを格納する不揮発メモリとしてＦｌａｓｈＲＯＭ１１２を有する構成であったが、これに限定されるものではなく、例えば、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）などその他の書き換え可能な不揮発性記憶装置を用いてもよい。
【００８６】
また、上述した実施形態では、１つのＦｌａｓｈＲＯＭ１１２内に第１エリア１１２４および第２エリア１１２５を有する構成例を説明したが、例えば、２つのＦｌａｓｈＲＯＭなどの記憶装置の一方に第１エリア１１２４を配置し、他方に第２エリア１１２５を配置して実現することもできる。また制御プログラムを格納する記憶領域を３つ以上の複数個設け、上記実施形態と同様の構成を実現することもできる。この構成において、制御プログラムの更新時は、例えば、各記憶領域（または記憶装置）に対して循環的順番で制御プログラムを書き込み（上書き）してもよい。
【００８７】
また、上述した実施形態では、管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃに格納される管理データには、現行の制御プログラムが格納されている記憶領域を表す現行プログラムエリア情報のみを含む構成を説明したが、これに限定されるものではない。
例えば、管理データは、現行プログラムエリア情報に加えて他の情報を含んでいてもよい。管理データの他の構成例を図１８に示す。この例では、管理データは、現行プログラムエリア情報に加えて、制御プログラムの部品番号や、格納した制御プログラムの正当性チェックに使うハッシュ値やチェックサム値なども含んでよい。
【００８８】
また、上述した実施形態では、管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃに格納される管理データには、現行の制御プログラムが格納される記憶領域を表す現行プログラムエリア情報を含む構成を説明したが、例えば、制御プログラムを格納する記憶領域が２つの場合（第１エリア１１２４および第２エリア１１２５）は、管理データに、制御プログラムの更新時における新制御プログラムの書込先の記憶領域を示す情報を含む構成であってもよい。この構成においては、新制御プログラムの書込み先の記憶領域ではない方の記憶領域が現行の制御プログラムを格納しているものとみなして、上記現行プログラムエリア情報と同様に扱うことができる。
【００８９】
また、上述した実施形態では、３つの管理データエリア１１２３ａ、１１２３ｂ、１１２３ｃを有する構成であったが、これに限定されるものではない。たとえば、１つの管理データエリアのみ有する構成であってもよい。この構成においては、管理データエリアの現行プログラムエリア情報が、正常な値（すなわち第１エリア１１２４または第２エリア１１２５のいずれかを表す値）であるときのみ、当該現行プログラムエリア情報が現行の制御プログラムを格納しているエリアを表すものと判断して、制御プログラムの実行や、制御プログラムの更新を行う。正常な値でない場合は、エラーなどの警報をおこなう。このようにすることで、何らかの原因により現行プログラムエリア情報の値が異常な値（第１エリア１１２４および第２エリア１１２５のいずれも表さない値）に書き換わってしまったことを判断できる。
【００９０】
また、制御プログラムの更新処理においては、制御プログラムの最新版を書き込むのが通常であるが、諸事情によっては現行の制御プログラムのバージョンより古いバージョンの制御プログラムに更新する可能性もある。この場合、更新用の新制御プログラムとは、古いバージョンの制御プログラムである。すなわち制御プログラムの更新版とは、直前またはそれ以前の更新シーケンスによって書き込まれた制御プログラムのことを指す。
【００９１】
また、上記各構成、機能、処理部、処理手段等は、それらの一部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に格納することができる。
【符号の説明】
【００９２】
１…車両、２…サーバ、３…インターネット回線、４…無線基地局、５…更新パッケージ、１１…車両制御装置、１２…ゲートウェイ（プログラム書込装置）、１３…車載ネットワーク、１４…ＨＭＩ、１１２１…起動プログラム、１１２２…書換プログラム、１１２３ａ、１１２３ｂ、１１２３ｃ…管理データエリア（管理データ格納領域）、１１２４…第１エリア（記憶領域）、１１２５…第２エリア（記憶領域）、１１２６…多数決判定プログラム、１１２７…有効性判定プログラム。
【図１】
0006682019.tif 000002
【図２】
0006682019.tif 000003
【図３】
0006682019.tif 000004
【図４】
0006682019.tif 000005
【図５】
0006682019.tif 000006
【図６】
0006682019.tif 000007
【図７】
0006682019.tif 000008
【図８】
0006682019.tif 000009
【図９】
0006682019.tif 000010
【図１０】
0006682019.tif 000011
【図１１】
0006682019.tif 000012
【図１２】
0006682019.tif 000013
【図１３】
0006682019.tif 000014
【図１４】
0006682019.tif 000015
【図１５】
0006682019.tif 000016
【図１６】
0006682019.tif 000017
【図１７】
0006682019.tif 000018
【図１８】
0006682019.tif 000019