(57)【要約】【課題】１つの差分データで様々な車種に搭載されている車載制御装置のプログラムを更新する。【解決手段】書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置であって、実行可能な特定プログラムを格納した第１の不揮発性メモリ領域と、実行可能で更新可能なプログラムを格納した第２の不揮発性メモリ領域と、を備えた不揮発性メモリを備え、前記特定プログラムと前記新プログラムとの差分データと、前記第１の不揮発性メモリ領域の特定プログラムを用いて、前記新プログラムを差分復元し、復元した該プログラムを前記第２の不揮発性メモリ領域へ書込む。【選択図】図１
2018160207.tif 000002
【特許請求の範囲】
【請求項１】
書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置であって、
実行可能な特定プログラムを格納した第１の不揮発性メモリ領域と、実行可能で更新可能なプログラムを格納した第２の不揮発性メモリ領域と、を備えた不揮発性メモリを備え、
前記特定プログラムと前記新プログラムとの差分データと、前記第１の不揮発性メモリ領域の特定プログラムを用いて、前記新プログラムを差分復元し、復元した該プログラムを前記第２の不揮発性メモリ領域へ書込む
ことを特徴とする車載制御装置。
【請求項２】
書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置であって、
実行可能で更新可能なプログラムを格納した第１の不揮発性メモリ領域と、第２の不揮発性メモリ領域と、を備えた不揮発性メモリを備え、
前記新プログラムは、第１の不揮発性メモリ領域と第２の不揮発性メモリ領域のいずれかへ書込むことを特徴とする車載制御装置。
【請求項３】
前記特定プログラムは、出荷時に搭載する初期プログラムであることを特徴とする、請求項１又は２記載の車載制御装置。
【請求項４】
書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置のプログラム更新ソフトウェアであって、
実行可能な特定プログラムを格納した第１の不揮発性メモリ領域と、実行可能で更新可能なプログラムを格納した第２の不揮発性メモリ領域と、を備えた不揮発性メモリを備え、
前記特定プログラムと前記新プログラムとの差分データと、前記第１の不揮発性メモリ領域の前記特定プログラムを用いて、前記新プログラムを差分復元し、復元した前記新プログラムを前記第２の不揮発性メモリ領域へ書込む
ことを特徴とする車載制御装置のプログラム更新ソフトウェア。
【請求項５】
書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置のプログラム更新ソフトウェアであって、
実行可能で更新可能なプログラムを格納した第１の不揮発性メモリ領域と、第２の不揮発性メモリ領域と、を備えた不揮発性メモリを備え、
前記新プログラムは、第１の不揮発性メモリ領域と第２の不揮発性メモリ領域のいずれかへ書込むことを特徴とする車載制御装置のプログラム更新ソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車載制御装置、及びプログラム更新ソフトウェアに関する。
【背景技術】
【０００２】
車載制御装置のリプログラミングは、低速なＣＡＮ（Controller Area Network）を介して書込みツールとしてのＰＣ（Personal Computer）または車載書込み装置と、車載制御装置（ＥＣＵ：Electric Control Unit）を接続し、バイナリーデータ（新プログラム）全体を分割転送しながらＥＣＵのフラッシュメモリへ書込みを行っている。
【０００３】
このため、旧プログラムに対する新プログラムの更新部分が小さい場合においても、新プログラム全体をＣＡＮ経由で転送し、新プログラム全体の書込みを行っている。
【０００４】
従って、書込みに要する時間がかかるという問題があった。これに対し、従来から差分によるリプログラミングの考え方が提案されている（例えば、特許文献１参照）。すなわち、特許文献１の段落〔００１９〕には、書き換え方式の１つとして「ブロック単位で新旧プログラムの差分データを作成する手段」が記載されている。さらに段落〔００６４〕には、更新対象ブロックの旧プログラムをＳＤＲＡＭへ転送して、差分データと旧プログラムを用いて新プログラムをＳＤＲＡＭへ復元し、更新対象ブロックを消去してから、新プログラムを書込んでいる。
【０００５】
特許文献２では、移動端末装置の差分によるソフトウェア更新方法が記載されている。
段落〔００１５〕には、移動端末装置の不揮発性メモリ内に、各々、ソフトウェア更新のための更新エンジンを含む本体プログラムを格納する第１および第２のメモリ領域を設け、ソフトウェア更新時に、一方の本体プログラムのバージョンと新たな本体プログラムのバージョンとの差分データをダウンロードし、前記第１および第２のメモリ領域の一方の更新エンジンを作業用メモリ領域に展開し、前記作業用メモリ領域内更新エンジンを実行することによって前記差分データで当該本体プログラムを更新し、更新が成功したとき当該更新後の本体プログラムを現用の本体プログラムとして選択し、更新が失敗したとき前記作業用メモリ領域内の更新エンジン内に含めたダウンロード機能により他方の本体プログラムのバージョンと新たな本体プログラムのバージョンとの差分データをダウンロードし、前記作業用メモリ領域内の更新エンジンを実行することによって前記差分データで当該本体プログラムを更新し、更新が成功したとき当該更新後の本体プログラムを現用の本体プログラムとして選択する手段が記載されている。
【０００６】
しかし、このように第１のメモリ領域と第２のメモリ領域を交互に更新するので、プログラムバージョンの管理が複雑となる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−１９００７５号公報
【特許文献２】特開２００７−１８９３３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、差分更新においてネックとなるプログラムバージョン管理を簡素化することにある。すなわち、第１のメモリ領域に第１のプログラムが配置され、第２のメモリ領域には第２のプログラムが配置されているケースを考える。ここで第２のプログラムは第１のプログラムよりも新しいバージョンであるとする。新たな第３のプログラムを差分更新により車載制御装置へ書込む場合、より近いバージョンの第２のプログラムと新たな第３のプログラムとの差分データを生成し、この差分データと第２のプログラムを用いて差分復元して、第１のメモリ領域の第１のプログラムを新たな第３のプログラムへ差分更新するのが常識的である。なぜなら、一般的に、近いバージョンのプログラムとの差分データは、より小さなサイズになり、かつより古いプログラムが配置されているメモリ領域へ新たなプログラムを書込んだほうが、更新に失敗した場合、より新しいバージョンのプログラムで車載制御装置を動作できるからである。
【０００９】
しかし、このような考えでメモリ領域を選択すると、更新する度に、交互にメモリ領域を選択することになる。つまり、より新しいバージョンのプログラムは第１のメモリ領域なのか、または第２のメモリ領域に存在するのか、さらにそのプログラムのバージョンは何か、などプログラムのバージョンを管理しなければならない。
【００１０】
さらに厄介なことに、車両に搭載された車載制御装置のプログラムは、リコールなどによりディーラーで新しいプログラムへ更新する必要があるが、わざわざディーラーへ行くのは面倒などの理由で、更新されない場合がある。このことは、車両の車載制御装置のプログラムには、いろいろなバージョンのプログラムが搭載されていることを意味するので、上記差分データは、複数のバージョンのプログラムとの差分データを複数個用意しなければ、あらゆる車載制御装置のプログラムを差分更新できないことになる。
【００１１】
このようなプログラムのバージョンに由来する複雑さを簡素化することが課題である。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明の車載制御装置は一例として、書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置であって、実行可能な特定プログラムを格納した第１の不揮発性メモリ領域と、実行可能で更新可能なプログラムを格納した第２の不揮発性メモリ領域と、を備えた不揮発性メモリを備え、前記特定プログラムと前記新プログラムとの差分データと、前記第１の不揮発性メモリ領域の特定プログラムを用いて、前記新プログラムを差分復元し、復元した該プログラムを前記第２の不揮発性メモリ領域へ書込む。
【発明の効果】
【００１３】
本発明によれば、１つの差分データで様々な車種に搭載されている車載制御装置のプログラムを更新できる。
【図面の簡単な説明】
【００１４】
【図１】発明の実施形態による車両の全体構成を示す模式図である。
【図２】図１に示す車載制御装置のＳＲＡＭの内部の構成を示す模式図である。
【図３】図１に示す車載制御装置のＦＬＡＳＨメモリの内部の構成を示す模式図である。
【図４】A面特定プログラム全体とB面ブロック毎の新プログラムからヘッダ付きブロック差分データの生成概要図である。
【図５】A面特定プログラム全体とB#nのブロック差分データからブロックB#nの新プログラム復元概要図である。
【図６】A面更新ソフト３０４Ａのフローチャートである。
【図７Ａ】車載書き込み装置が車載制御装置へ送信する通信コマンドの種類を示す図である。
【図７Ｂ】車載書込み装置の通信コマンドの送信シーケンス図である。
【図８】ブロック差分データ通信ソフトのフローチャートである。
【図９】ブロック差分復元ソフトのフローチャートである。
【図１０】診断ソフトのフローチャートである。
【図１１】面切替えソフトのフローチャートである。
【発明を実施するための形態】
【００１５】
本実施例は、２面構成の不揮発性メモリのそれぞれにプログラムを配置した車載制御装置において、片面には特定のプログラムを配置し、他面には実行可能なプログラムを配置する構成とする。さらに、車載制御装置は、新たな実行可能なプログラムと特定のプログラムの差分データと、片面の特定プログラムから新たな実行可能なプログラムを差分復元して、復元された新たな実行可能なプログラムを他面へ書込む手段を提供する。
【００１６】
この手段により、新たな実行可能なプログラムを書込む面は、常に他面のみであり、さらに常に特定のプログラムとの差分データを１つだけ用意すれば、あらゆる車載制御装置のプログラムを差分更新できることになる。
【００１７】
以下、図面を用いて本発明の実施形態による車載制御装置を含む車両の構成及び動作を説明する。
【００１８】
車両は、車載書き込み装置１００（ゲートウェイ）、複数の車載制御装置２００（２００１〜２００ｎ）を備える。車載書き込み装置１００と車載制御装置２００は、相互に車載ネットワークＣＡＮを介して通信する。
【００１９】
車載制御装置２００は、マイコン２０１、車載制御装置２００毎の用途に応じた各種のＩＣ（Integrated Circuit）２０４、ＣＡＮトランシーバなどの通信装置２０５を備える。マイコン２０１は、ＳＲＡＭ２０２（揮発性メモリ）、ＦＬＡＳＨメモリ２０３（不揮発性メモリ）を内蔵する。
【００２０】
なお、車載書き込み装置１００の構成も車載制御装置２００の構成と基本的に同じであるが、車両の外部のネットワークのプロトコルに応じた通信装置をさらに備える。すなわち、車載書き込み装置１００は、マイコン１０１、各種のＩＣ１０４、ＣＡＮトランシーバなどの通信装置１０５、車両の外部のネットワークのプロトコルに応じた通信装置１０６を備える。マイコン１０１は、ＳＲＡＭ１０２、ＦＬＡＳＨメモリ１０３を内蔵する。
【００２１】
次に、図２を用いて、車載制御装置２００のＳＲＡＭ２０２の構成を説明する。図２は、図１に示すＳＲＡＭ２０２の内部の構成を示す模式図である。
【００２２】
ＳＲＡＭ２０２は、車載書込み装置１００から送信された差分データを一時的に記憶するための受信エリア２０２ａ、差分データを用いて差分復元した復元プログラムを一時的に記憶するための復元エリア２０２ｂを備える。
【００２３】
次に、図３を用いて、ＦＬＡＳＨメモリ２０３の構成を説明する。図３は、図１に示すＦＬＡＳＨメモリ２０３の内部の構成を示す模式図である。ＦＬＡＳＨメモリ２０３は、第１不揮発性メモリ３０１（Ａ面配置プログラム）と、第２不揮発性メモリ３０２（Ｂ面配置プログラム）と、第３不揮発性メモリ３０９（実行面を指示する変数selectareaを格納している）で構成されている。
【００２４】
第１不揮発性メモリ３０１は、プリブート３０３とＡ面ブート３０４とＡ面更新ソフト３０４ＡとＡ面特定プログラム３０５で構成されている。第１不揮発性メモリ３０１には、このように、特定プログラム３０５を配置しており、更新はしない。一方、第２不揮発性メモリ３０２（Ｂ面配置プログラム）は、Ｂ面ブート３０６とＢ面更新ソフト３０７とＢ面プログラム３０８で構成されている。第２不揮発性メモリ３０２には、このように、更新対象のＢ面プログラム３０８を配置している。本発明の実施例では、Ａ面特定プログラム３０５は差分更新時に参照するが、更新しない。一方、Ｂ面プログラム３０８は差分更新によって新プログラムへ更新する。
【００２５】
ここで、第１不揮発性メモリ３０１のプリブート３０３は、車載制御装置がパワーオンまたはイグニッションオンした場合に、最初に実行される初期化プログラムが搭載されており、ＳＲＡＭ２０２などの初期化後に第３不揮発性メモリ３０９の変数selectareaを参照して、その値に従ってＡ面ブート３０４またはＢ面ブート３０６のいずれかに分岐する。すなわち、selectareaには、実行すべき面情報（Ａ面またはＢ面情報）が格納されている。もしＢ面ブート３０６へ分岐した場合は、Ｂ面プログラム３０８のサム値チェックなどの診断を行った後、Ｂ面プログラム３０８内のＯＳ立ち上げに必要な初期化や各種タイマ設定などの処理を行い、更新対象であるＢ面プログラム３０８を実行する。
【００２６】
これにより、車載制御装置２００は正常に動作可能となる。Ａ面更新ソフト３０４ＡはＢ面プログラム３０８実行中にソフトウェア更新指示が通知されると、実行されるプログラムである。Ａ面更新ソフト３０４Ａは、Ｂ面プログラムを新プログラムへ差分更新する場合に、ブロック差分データ通信ソフト６０１とブロック差分復元ソフト６０２と診断ソフト６０４と面切換えソフト６０５で構成されている（図６参照）。
【００２７】
一方、第２不揮発性メモリ３０１のＡ面ブート３０４へ分岐した場合は、同様にＡ面特定プログラム３０５のサム値チェックなどの診断を行った後、Ａ面特定プログラム３０５内のＯＳ立ち上げに必要な初期化や各種タイマ設定などの処理を行い、Ａ面特定プログラム３０５を実行できる。後で詳述するが、Ａ面の特定プログラムが実行されるのは、Ｂ面プログラムの差分更新に失敗した場合である。
【００２８】
これにより、車載制御装置２００は、たとえＢ面の差分更新に失敗してもＡ面特定プログラムを実行することにより、正常に動作可能となる。Ｂ面更新ソフト３０７は、本実施例では動作することはない。
【００２９】
本実施形態では、一例として、ＦＬＡＳＨメモリ２０３のサイズは２ＭＢとしている。ここで、ブロックA#n, B#n（n = 1〜7）とは、消去可能な最小サイズである。例えば、ブロックB#nにデータを書き込む場合、ブロックB#n全体を消去してからデータを書き込む必要がある。
【００３０】
次に図４を用いて、ヘッダ付きブロック差分データの生成概要を説明する。
A面特定プログラム３０５全体とB面ブロック毎の新プログラムからヘッダ付きブロック差分データの生成を説明する。
【００３１】
A面特定プログラム３０５とB面ブロックB#n(n = 1〜7)毎の新プログラムからブロックB#n (n = 1〜7)毎のブロック差分データ４１０を生成する。生成の第１ステップは、ブロックA#nとブロックB#n (n = 1〜7)のデータ一致チェックである。例として、もしA#4とB#4のデータが一致すれば、B#4のブロック差分ヘッダ４２０内のブロック差分本体データサイズを０に設定したブロック差分データを生成する。もちろんブロック差分本体データは付属しない。
【００３２】
もしA#4とB#4のデータが不一致であれば、A面特定プログラム３０５全体とブロックB#4の新プログラムからB#4のブロック差分本体データ４３０を生成し、次にB#4のブロック差分ヘッダ４２０内のブロック差分本体データサイズへそのサイズを設定する。
【００３３】
以上でB#4のブロック差分データが生成できた。この生成処理をブロック毎に繰返すことで、B面新プログラム４００のヘッダ付きブロック差分データを全て生成できる。
【００３４】
次に、図５を用いて車載制御装置が行う差分復元の概要を説明する。
【００３５】
Ａ面配置プログラム３０１は第１不揮発性メモリに配置されたプログラムである。差分復元は、Ａ面特定プログラム３０５とブロックＢ＃ｎ（ｎ＝１〜７）のブロック差分データを用いて行う。ブロックB#nのブロック差分データは、B#nのブロック差分ヘッダ５００とB#nのブロック差分本体データ５１０で構成されている。
【００３６】
更新ソフト３０４Ａの処理概要５３０は、B#nのブロック差分ヘッダ５００内のブロック差分本体データサイズを参照し、もしブロック差分本体データサイズ＝０ならば第１不揮発性メモリのブロックA#nを第２不揮発性メモリのブロックB#nヘコピーする。一方、もしブロック差分本体データサイズ≠０ならば、第１不揮発性メモリのＡ面プログラム３０５全体とB#nのブロック差分本体データ５１０からブロック差分復元手段を用いてブロックB#nの新プログラム５２０を復元する。この操作を各ブロック毎に繰返して第２不揮発性メモリへＢ面の新プログラムを書込むことができる。
【００３７】
以上、差分復元によるＢ面へ新プログラムを書込む概要を説明した。
【００３８】
次に図６〜図１１を用いてその動作を詳しく説明する。
【００３９】
図６は、Ａ面更新ソフト３０４Ａのフローチャートである。
ブロック差分データ通信ソフト６０１は、車載書込み装置１００から送信されたブロック差分データを受信し、そのブロック差分ヘッダ内のブロック差分本体データサイズの値に応じてブロック間のデータコピー処理や、ブロック差分復元ソフト６０２を実行する。次に６０３で全てのブロック差分データを受信完了したか判定し、noならば６０１へ分岐して次のブロック差分データを受信する。一方、yesならば新プログラムが第２不揮発性メモリへ復元完了したので、診断ソフト６０４を実行して正常に書込み完了したかチェックする。もし診断結果が正常ならば面切替えソフト６０５を実行して、第３不揮発性メモリ内の変数selectareaを“Ｂ面”に設定する。以上により、車載制御装置２００をリセットすれば、ＰＲＥＢＯＯＴが起動し、変数selectareaを参照してＢ面の新プログラムを起動できる。
【００４０】
次に、図７Aを用いて車載書込み装置１００から送信され、ブロック差分データ通信ソフト６０１が受信する通信コマンドの種類を説明する。
【００４１】
７００の通信コマンド$00は、Ａ面の特定プログラムのバージョンを要求するコマンドである。本通信コマンドの応答により、車載書き込み装置１００は、現在実行しているＡ面の特定プログラムが想定していたバージョンであることを知ることができる。またそのプログラムバージョンを確認した上で正しいＢ＃ｎ（ｎ＝１〜７）のブロック差分データを車載制御装置２００へ送信することができる。
【００４２】
７１０の通信コマンド$10は、ブロック差分データ送信開始コマンドである。本通信コマンド以降に送信するデータがブロック差分データであることを車載制御装置２００へ通知するために使用する。
【００４３】
７２０の通信コマンド$20 MA MSは、差分復元対象エリアを車載制御装置２００へ通知するコマンドである。MAはエリアの先頭アドレスであり、MSはエリアのサイズである。
【００４４】
７３０の通信コマンド$30 DATAは、ブロック差分データ送信コマンドである。DATAは、ブロック差分ヘッダとブロック差分本体データである。
【００４５】
７４０の通信コマンド$40は、ブロック差分データ送信終了コマンドである。
このように、１つのブロック差分データは、７２０、７３０、７４０の３つの通信コマンドで送信され、この３つの通信コマンドが繰返し送信することで全てのブロック差分データが車載制御装置２００へ送信する。
【００４６】
７５０の通信コマンド$50 MA MSは、診断開始コマンドである。MAは診断エリアの先頭アドレスであり、MSは診断エリアのサイズである。診断は、サム値チェックで行う。新プログラムの正しいサム値は、新プログラムの定められたアドレスに書き込まれており、車載制御装置２００は、そのアドレスを知っているものとする。
【００４７】
７６０の通信コマンド$60は、面切替え指示コマンドである。本コマンドにより変数selectareaの値を反対の面へ切替える。
【００４８】
図７Ａ、図７Bを用いて、車載書込み装置１００が送信する通信コマンドのシーケンスを説明する。
【００４９】
７７０は、通信コマンド Ａ面の特定プログラムバージョン要求 ＄００を送信する。
通信コマンド＄００の応答として、車載制御装置２００から特定プログラムのバージョン情報が返信される。
【００５０】
７７１は、通信コマンド ブロック差分データ送信開始 ＄１０を送信する。
【００５１】
７７２は、通信コマンド 差分復元対象エリア指定 ＄２０を送信する。
【００５２】
７７３は、通信コマンド 差分復元対象エリアのブロック差分データ ＄３０を送信する。
【００５３】
７７４は、通信コマンド ブロック差分データ送信終了 ＄４０を送信する。
【００５４】
７７５は、全てのブロックの差分データを送信したか判定し、もしyesならば７７６を実行し、もしnoならば７７２〜７７５を繰返し実行する。
【００５５】
７７６は、通信コマンド 診断開始 ＄５０を送信する。
【００５６】
７７７は、通信コマンド 面切替え指示 ＄６０を送信する。
以上で、車載書込み装置１００は、通信コマンドを車載制御装置２００へ送信できた。
以上の通信コマンドを受信してブロック差分データ通信ソフト６０１は動作する。
【００５７】
図８は、ブロック差分データ通信ソフト６０１のフローチャートである。
【００５８】
８００で、車載書込み装置１００から通信コマンドＣＭＤを受信する。
【００５９】
８０１では、通信コマンドＣＭＤが$00であるか判定し、yesならば８０５を実行し、noならば８１０を実行する。
【００６０】
８０５は、第３不揮発性メモリの変数selectareaの値と、selectarea指示面に配置されているプログラムのバージョンを読み出し、車載書込み装置１００へ返信する。
【００６１】
８１０では、通信コマンドＣＭＤが$10であるか判定し、yesならば８１５を実行し、noならば８２０を実行する。
【００６２】
８１５ではブロック差分本体データを格納するための受信エリア202aと復元エリア202bを初期化する。
【００６３】
８２０では、通信コマンドＣＭＤが$20であるか判定し、yesならば８２５を実行し、noならば８３０を実行する。
【００６４】
８２５では、差分復元対象エリアの先頭アドレスMAとサイズMSを記憶する。
８３０では、通信コマンドＣＭＤが$30であるか判定し、yesならば８３５を実行し、noならば８４０を実行する。
【００６５】
８３５では、ＤＡＴＡ内のブロック差分本体データを受信エリア202aヘ格納し、ブロック差分ヘッダ内のブロック差分本体データサイズを読み出して変数ＳＩＺＥに記憶する。
【００６６】
８４０では、通信コマンドＣＭＤが$40であるか判定し、yesならば８４５を実行し、noならば８５０を実行する。
【００６７】
８４５は、変数ＳＩＺＥ＝０ならば第１不揮発性メモリのブロックA#nのデータを第２不揮発性メモリB#nヘコピーし、ＳＩＺＥ≠０ならばブロック差分復元ソフト６０２を実行して、その復元結果を復元エリア202bヘ格納する。さらに復元エリア202bの復元データを第２不揮発性メモリのブロックB#n（先頭アドレスMA, サイズMS）ヘ書込む。
【００６８】
８５０では、通信コマンドＣＭＤが$50であるか判定し、yesならば８５５を実行し、noならば８６０を実行する。
【００６９】
８５５では先頭アドレスMAとサイズMSで指示された診断エリアを診断ソフト６０４を実行してサム値による診断を行う。診断結果が正常ならば“正常”を記憶し、診断結果が異常ならば“異常”を記憶する。
【００７０】
８６０では通信コマンドＣＭＤが$60であるか判定し、yesならば８６５を実行し、noならば１つのブロック差分データによる新プログラムは書込み完了したので、通信コマンド処理を終了する。しかし図６の６０３から、全てのブロック差分データを受信完了するまでブロック差分データ通信ソフト６０１は実行されることがわかる。
【００７１】
８６５は、第３不揮発性メモリの変数selectareaの値を設定するため、面切替えソフト６０５を実行する。
【００７２】
図９は、ブロック差分復元ソフト６０２のフローチャートである。
【００７３】
最初に、一般的な差分生成・差分復元ソフトの概要について説明する。差分生成ソフトは、差分抽出処理部において、新プログラムの部分命令列と類似の部分命令列を旧プログラムから検索して見つけ出し、その部分命令列を短い符号に置き換えてコピーコマンドに付属させる。一方、類似の部分命令列が見つからない場合には、追加コマンドにその部分命令列を付属させる。このコピーコマンドと追加コマンドの列が差分データである。このように、差分データとは、単に新プログラムから旧プログラムを減算した結果では無く、類似部分名列を短い符号に置き換えたコピーコマンドや追加コマンドなどの列で構成されている。
【００７４】
以上の準備を踏まえて、ブロック差分復元ソフト６０２の動作を説明する。
【００７５】
９００は、受信エリア２０２aのブロック差分本体データから差分コマンドを読み出す。
【００７６】
９１０で差分コマンドを解析し、９２０で差分コマンドがコピーコマンドか判定し、yesならば９２５で付属する符号から変数selectareaで指示された面のプログラムの部分命令列を復元エリア２０２bへ書込む。もしnoならば、９３０を実行する。
【００７７】
９３０では差分コマンドが追加コマンドか判定し、yesなら９３５の追加コマンドに付属するデータ（部分命令列）を復元エリア２０２bヘ追加書込みをする。もしnoならば、９４０を実行する。
【００７８】
９４０では、受信エリア２０２aの差分コマンドを全て読み出したか判定し、yesなら、差分復元処理は終了である。もしnoならば、９００へ戻って処理を繰返す。
【００７９】
以上で、差分復元した復元プログラムが復元リア２０２bに格納できたことになる。
【００８０】
図１０は、診断ソフト６０４のフローチャートである。
【００８１】
１０００では、新プログラム内の予め定められた特定アドレスに配置されている“新プログラムのサム値”を読み出し、変数ＳＵＭへ記憶する。
【００８２】
１０１０では、先頭アドレスＭＡ，サイズＭＳのエリアに書き込まれた新プログラムのデータを４バイト単位で加算し、その加算結果を変数Ｓへ記憶する。
【００８３】
１０２０では、変数ＳＵＭと変数Ｓの一致チェックを行い、一致した場合１０２５を実行し、不一致の場合１０３０を実行する。１０２５では、診断結果が正常なので、診断結果として“正常”を記憶する。１０３０では、診断結果が異常なので、診断結果として“異常”を記憶して終了する。
【００８４】
図１１は、面切替えソフト６０５のフローチャートである。
【００８５】
１１００では、診断結果が“異常”か判定し、もしyesならば１１２０を実行し、もしnoならば１１２０を実行する。１１２０では、変数selectareaに“Ａ面”を設定する。１１３０では、変数selectareaに“Ｂ面”を設定する。
【００８６】
これにより、異常であればＡ面の特定プログラムを実行することになり、正常であればＢ面の新プログラムを実行することになる。
【００８７】
以上で、実行可能なプログラムを２面用意した場合において、片面に特定のプログラムを配置し、片面の特定のプログラムと新しいプログラムとの差分データと、片面の特定のプログラムを用いて、新しいプログラムを差分復元し、復元した新しいプログラムを他の面へ書込むことができた。
【００８８】
これにより、差分データを片面の特定のプログラムと新しいプログラムから生成すれば、異なるバージョンのプログラムで動作している全ての車載制御装置を、前記差分データを用いて差分更新可能となる。
【符号の説明】
【００８９】
１００…車載書込み装置（ゲートウェイ）
１０１…マイコン（演算装置）
１０２…ＳＲＡＭ（揮発性メモリ）
１０３…ＦＬＡＳＨメモリ（不揮発性メモリ）
１０４…各種のＩＣ
１０５…通信装置（ＣＡＮプロトコル）
１０６…通信装置（車両の外部のネットワークのプロトコル）
２００…車載制御装置（ＥＣＵ）
２０１…マイコン（演算装置）
２０２…ＳＲＡＭ（揮発性メモリ）
２０３…ＦＬＡＳＨメモリ（不揮発性メモリ）
２０４…各種のＩＣ
２０５…通信装置（ＣＡＮプロトコル）
２０２a…受信エリア
２０２b…復元エリア
３０１…第１不揮発性メモリ（Ａ面配置プログラム）
３０２…第２不揮発性メモリ（Ｂ面配置プログラム）
３０３…プリブート（変数selectareaを参照してＡ面またはＢ面へ分岐するプログラム）
３０４…Ａ面ブート（Ａ面配置プログラムの初期化処理プログラム）
３０４Ａ…Ａ面更新ソフト
３０５…Ａ面特定プログラム
３０６…Ｂ面ブート（Ｂ面配置プログラムの初期化処理プログラム）
３０７…Ｂ面更新ソフト
３０８…Ｂ面プログラム（Ｂ面の更新対象プログラム）
３０９…第３不揮発性メモリ（実行面を指示する変数selectarea格納エリア）
４００…Ｂ面の新プログラム
４１０…ブロック差分データ
４２０…ブロックB#nのブロック差分ヘッダ
４３０…ブロックB#nのブロック差分本体データ
５００…ブロックB#nのブロック差分ヘッダ
５１０…ブロックB#nのブロック差分本体データ
５２０…ブロックB#nの新プログラム
５３０…Ａ面更新ソフト３０４Ａの処理概要図
６０１…ブロック差分データ通信ソフト
６０２…ブロック差分復元ソフト
６０４…診断ソフト
６０５…面切替えソフト
【図１】
2018160207.tif 000003
【図２】
2018160207.tif 000004
【図３】
2018160207.tif 000005
【図４】
2018160207.tif 000006
【図５】
2018160207.tif 000007
【図６】
2018160207.tif 000008
【図７Ａ】
2018160207.tif 000009
【図７Ｂ】
2018160207.tif 000010
【図８】
2018160207.tif 000011
【図９】
2018160207.tif 000012
【図１０】
2018160207.tif 000013
【図１１】
2018160207.tif 000014