(57)【要約】      （修正有）【課題】異なるバージョンの実行プログラムで動作している車載制御装置でも、同一の差分データで新たな実行プログラムへ更新する。【解決手段】書き換え可能な実行用プログラムと特定プログラム３００を配置した不揮発性メモリを備え、新たな実行用プログラム３３０と特定プログラム３００との差分データ３５０と、不揮発性メモリの特定プログラム３００から、新たな実行用プログラム３３０を復元して不揮発性メモリへ書き込むことにより実行用プログラムを更新する。【選択図】図３Ｂ
2019175024.tif 000002
【特許請求の範囲】
【請求項１】
書き換え可能な実行用プログラムと特定プログラムを配置した不揮発性メモリを備え、新たな前記実行用プログラムと前記特定プログラムとの差分データと、前記不揮発性メモリの前記特定プログラムから、新たな前記実行用プログラムを復元して前記不揮発性メモリへ書き込むことにより前記実行用プログラムを更新することを特徴とする車載制御装置。
【請求項２】
前記不揮発性メモリは、前記実行用プログラムを格納する第１不揮発性メモリと、前記特定プログラムと前記差分データを格納する第２不揮発性メモリと、を含むことを特徴とする請求項１の車載制御装置。
【請求項３】
前記第１不揮発性メモリは、マイコン内蔵であり、前記第２不揮発性メモリは、前記マイコンの外付けであることを特徴とする請求項２記載の車載制御装置。
【請求項４】
前記第２不揮発性メモリは、新たな前記差分データを格納する第１差分データ格納エリアと、前の前記差分データを格納する第２差分データ格納エリアとを備え、
新たな前記実行用プログラムへの更新が失敗した場合、前記第２差分データ格納エリアに格納された前記前の差分データと前記特定プログラムから、前の前記実行用プログラムを復元して、前記第１不揮発性メモリへ書き込むことを特徴とする請求項２又は３記載の車載制御装置。
【請求項５】
前記第２不揮発性メモリは、前記特定プログラムを圧縮データの形態で配置され、前記圧縮データを解凍して前記特定プログラムを生成してから、新たな前記実行用プログラムを復元して前記不揮発性メモリへ書き込むことを特徴とする請求項１〜４のいずれか記載の車載制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車載制御装置に関する。
【背景技術】
【０００２】
従来から差分によるリプログラミングの考え方が提案されている。特許文献１の段落〔００１９〕には、書き換え方式の１つとして、ブロック単位で新旧プログラムの差分データを作成することが記載されている。
【０００３】
特許文献２では、段落〔０００６〕に、少ないＲＡＭ使用量で差分更新を実現することが記載されている。
【０００４】
特許文献３では、現バージョンのプログラムを圧縮して第２メモリに記憶してから、第１メモリのプログラム更新を行い、次に診断異常があった場合、第２メモリの圧縮データを解凍して現バージョンのプログラムを第１メモリへ書込むことでマイコンを動作可能にすることが記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−１９００７５号公報
【特許文献２】特開２０１１−８１５６１号公報
【特許文献３】特開２０１６−１１８８７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
差分更新は、一般的には新プログラムと１つ前のバージョンから差分データを生成する。しかしながら、数百万台のリコールのケースを考えると全ての車両が１つ前のバージョンのプログラムが搭載されているとは考えにくい。運転者は所有車に異常を感じていない場合、リコールによるプログラム更新をしないケースやディーラーへ行くのが面倒などの理由で更新しないことがある。このため、差分更新には、複数バージョンとの差分データを用意する必要がある。このためバージョン管理が複雑になる。
【０００７】
上記課題を解決するために本発明は、異なるバージョンの実行プログラムで動作している車載制御装置でも、同一の差分データで新たな実行プログラムへ更新することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明は、書き換え可能な実行用プログラムと特定プログラムを配置した不揮発性メモリを備え、新たな前記実行用プログラムと前記特定プログラムとの差分データと、前記不揮発性メモリの前記特定プログラムから、新たな前記実行用プログラムを復元して前記不揮発性メモリへ書き込むことにより前記実行用プログラムを更新する。
【発明の効果】
【０００９】
本発明によれば、異なるバージョンの実行プログラムで動作している車載制御装置でも、同一の差分データで新たな実行プログラムへ更新できる。
【図面の簡単な説明】
【００１０】
【図１】発明の実施形態による車両の全体構成を示す模式図
【図２】図１に示す車載制御装置のＳＲＡＭの内部の構成を示す模式図
【図３Ａ】本発明の実施形態の概念を説明するパソコンの圧縮ソフト、差分生成ソフトのフローチャート
【図３Ｂ】本発明の実施形態の概念を説明する車載制御装置の解凍ソフト、差分復元ソフトのフローチャート
【図４Ａ】図１に示す車載制御装置のＦＬＡＳＨメモリの内部の構成を示す模式図
【図４Ｂ】図１に示す車載制御装置のＦＬＡＳＨメモリをマイコン内蔵ＦＬＡＳＨメモリと外付けＦＬＡＳＨメモリで構成した構成の模式図
【図４Ｃ】図４Ｂに示す外付けＦＬＡＳＨメモリの内部構成の模式図
【図５】リプロソフト全体構成図
【図６】図１の車載書込み装置と車載制御装置の通信コマンドの種類を示す図
【図７】図６の通信コマンドを用いてプログラム書込み装置が差分データを送信するフローチャート
【図８】図６の通信コマンドを用いて車載制御装置が差分データを受信するフローチャート
【図９】図６の通信コマンドを用いてプログラム書込み装置が差分復元実行と診断実行コマンドを送信するフローチャート
【図１０Ａ】車載制御装置の差分復元ソフトのフローチャート
【図１０Ｂ】車載制御装置の解凍ソフトが使用する解凍コマンド
【図１１】車載制御装置の解凍ソフトの処理フロー
【図１２】車載制御装置の第１差分復元ソフトと第２差分復元ソフトが使用する差分コマンド
【図１３】車載制御装置の第１差分復元ソフトのフローチャート
【図１４】車載制御装置の診断ソフトのフローチャート
【図１５】車載制御装置の第２差分復元ソフトのフローチャート
【発明を実施するための形態】
【００１１】
車載制御装置のリプログラミングは、低速なＣＡＮ（Controller Area Network）を介して書込みツールとしてのＰＣ（Personal Computer）または車載書込み装置と、車載制御装置（ＥＣＵ：Electric Control Unit）を接続し、バイナリーデータ（新プログラム）全体を分割転送しながらＥＣＵのフラッシュメモリへ書込みを行っている。
【００１２】
このため、旧プログラムに対する新プログラムの更新部分が小さい場合においても、新プログラム全体をＣＡＮ経由で転送し、新プログラム全体の書込みを行っている。
【００１３】
従って、書込みに要する時間がかかるという問題があった。
【００１４】
特許文献１から３のリプログラミングでは、いくつかの課題がある。
【００１５】
第１の課題として、差分更新は、一般的には新プログラムと１つ前のバージョンから差分データを生成する。しかしながら、数百万台のリコールのケースを考えると全ての車両が１つ前のバージョンのプログラムが搭載されているとは考えにくい。運転者は所有車に異常を感じていない場合、リコールによるプログラム更新をしないケースやディーラーへ行くのが面倒などの理由で更新しないことがある。このため、差分更新には、複数バージョンとの差分データを用意する必要がある。このためバージョン管理が複雑になる。このバージョン管理の複雑さを簡素化する手段を提供することが第１の課題である。
【００１６】
第２の課題は、もし差分更新後の診断結果が異常であった場合、例えば不揮発性メモリFLASHには既に旧プログラムが存在しないので、差分によるリプログラミングが不可能になってしまうという点である。
【００１７】
車載制御装置は、数メガバイトの不揮発性メモリFLASHと１メガバイト以下の小さな揮発性メモリSRAMで構成した記憶装置で構成されることが多い。これはマイコンに内蔵されているメモリだけで制御を実現することで安価な車載制御装置を実現するためである。このため不揮発性メモリFLASHに記憶されている旧プログラムと差分データを入力として、差分復元ソフトにより新プログラムを差分復元し、新プログラムを不揮発性メモリFLASHへ書込むことでソフトウェア更新を実現する。しかしながら、復元した新プログラムが正しく復元できたか診断する必要がある。例えば、新プログラム全体のサム値やハッシュ値などを前記書込みツールや車載書込み装置から受信し、車載制御装置自身が復元した新プログラムのサム値やハッシュ値を計算して、受信した値と一致するかチェックすることで診断が可能となる。
【００１８】
特許文献３では、現バージョンのプログラムを第２メモリに圧縮して格納する必要があるため、車載制御装置は圧縮手段を必要とすることが記載されている。しかし一般的に、圧縮処理は複雑で処理時間も長く、使用するメモリも非常に多い。このため車載制御装置への搭載は困難である。
【００１９】
最初に、第１の課題を解決する構成の概念を図３Ａ、図３Ｂ、図４Ａ、図４Ｂ、図４Ｃを用いて説明する。
【００２０】
図３Ａは、パソコンに搭載されている圧縮ソフト３１０と差分生成ソフト３４０を用いて、新プログラムの差分データを生成する処理フローである。
【００２１】
まず、（a）パソコンの圧縮ソフトで特定プログラムを圧縮するフローチャートで示すように、特定プログラム３００を圧縮して圧縮データ３２０を生成する。ここで特定プログラムとは、特に限定する必要は無いが、理解しやすくするために、車載制御装置を工場から初出荷する時に搭載するプログラムと想定する。
【００２２】
次に（b）パソコンの差分生成ソフトで特定プログラムと新プログラムから差分データを生成するフローチャートに示すように、特定プログラム３００と新プログラム３３０を差分生成ソフト３４０へ入力して差分データ３５０を生成する。
【００２３】
ここで、車載制御装置のプログラム更新の概念を図３Ｂを用いて説明する。
【００２４】
前提として、全ての車載制御装置には、工場出荷時に圧縮データ３２０が不揮発性メモリへ書込んであるものとする。
【００２５】
車載制御装置のプログラム更新を差分データ３５０を用いて実行する動作を説明する。まず、車載書込み装置は、車両走行中に、差分データ３５０を車載制御装置へ送信する。車載制御装置は、差分データ３５０を自装置内の不揮発性メモリへ保存する。
【００２６】
次に、（c）車載制御装置の解凍ソフトで圧縮データから特定プログラムを復元するフローチャートと、（d）車載制御装置の差分復元ソフトで特定プログラムと差分データから新プログラムを復元するフローチャートを用いて説明する。
【００２７】
まず、最初に解凍ソフト３６０が圧縮データ３２０から特定プログラム３００を復元する。
【００２８】
次に、差分復元ソフト３７０が特定プログラム３００と差分データ３５０から新プログラム３３０を復元する。ここで差分データ３５０とは図３Ａ(b)からわかるように、特定プログラム３００と新プログラム３３０から生成されたものである。このため、車載制御装置は特定プログラム３００さえあれば、差分データ３５０を用いて新プログラム３３０を復元できることがわかる。
【００２９】
このように本実施例は、車載制御装置の現バージョンのプログラムとの差分データを用いて差分更新するのではなく、全ての車載制御装置に搭載した特定のプログラムとの差分データを用いて差分更新する。
【００３０】
また、本実施例では車載制御装置に圧縮データの形態で特定プログラムを保持しているが、不揮発性メモリ容量が十分にあれば、特定プログラムそのままの形態で保持しても良い。
【００３１】
次に第２の課題を解決する構成を説明する。
【００３２】
まず復元した新プログラム３３０を車載制御装置の不揮発性メモリへ書込み、現バージョンのプログラム（実行用プログラム３３１）を新プログラム３３０ヘ更新する。次に新プログラム３３０のサム値やハッシュ値などの計算を行い、新プログラム３３０の診断を行う。ここで診断結果に異常がなければ、車載制御装置は新プログラム３３０を用いて制御可能である。しかし、診断異常があった場合、前述したように差分更新によって現バージョンのプログラム（実行用プログラム３３１）へ戻すことはできない。そこで、本実施例では、差分データの格納エリアを最新の差分データ格納エリアと前回の差分データ格納エリアの２面用意し、差分データを格納しておく。この結果、診断異常があった場合は前回の差分データと特定のプログラムを用いて、現バージョンのプログラムを復元することができる。このように、特定プログラムとの差分データを最新版と前回版の２つを保持しておくことがポイントである。
【００３３】
以上のように本実施例は、第１の課題を解決するために、車載制御装置内の現バージョンプログラムでは無く、特定のプログラム（例えば、初出荷時のプログラム）と新プログラムを用いて差分データを生成している。すなわち、異なるバージョンのプログラムで動作している車載制御装置であっても、本実施例の差分データだけで、全ての車載制御装置を差分更新できるようになる。このように本実施例により、複数のバージョンのプログラムとの差分データを管理しなくて済むので、プログラムのバージョン管理を簡素化できる。
【００３４】
第２の課題を解決するために、診断の結果、異常があった場合でも、前回版の差分データと特定のプログラムから現バージョンのプログラムを復元できる。この結果、車載制御装置を動作可能にできる。
【００３５】
以下、図面を用いて実施例の詳細を説明する。まず、図１を用いて車載制御装置を含む車両の構成及び動作を説明する。
【００３６】
車両は、車載書き込み装置１００（ゲートウェイ）、複数の車載制御装置２００（２００１〜２００ｎ）を備える。車載書き込み装置１００と車載制御装置２００は、相互に車載ネットワークＣＡＮを介して通信する。
【００３７】
車載制御装置２００は、マイコン２０１、車載制御装置２００毎の用途に応じた各種のＩＣ（Integrated Circuit）２０４、ＣＡＮトランシーバなどの通信装置２０５を備える。マイコン２０１は、ＳＲＡＭ２０２（揮発性メモリ）、ＦＬＡＳＨメモリ２０３（不揮発性メモリ）を内蔵する。
【００３８】
なお、車載書き込み装置１００の構成も車載制御装置２００の構成と基本的に同じであるが、車両の外部のネットワークのプロトコルに応じた通信装置をさらに備える。すなわち、車載書き込み装置１００は、マイコン１０１、各種のＩＣ１０４、ＣＡＮトランシーバなどの通信装置１０５、車両の外部のネットワークのプロトコルに応じた通信装置１０６を備える。マイコン１０１は、ＳＲＡＭ１０２（揮発性メモリ）、ＦＬＡＳＨメモリ１０３（不揮発性メモリ）を内蔵する。
【００３９】
次に、図２を用いて、車載制御装置２００のＳＲＡＭ２０２の構成を説明する。図２は、図１に示すＳＲＡＭ２０２の内部の構成を示す模式図である。
【００４０】
ＳＲＡＭ２０２は、車載書込み装置１００から送信された差分データを一時的に記憶するための受信エリア２０２ａ、車載制御装置２００のＦＬＡＳＨメモリ２０３に予め内蔵された圧縮データを解凍して復元した特定のプログラムを一時的に記憶するための解凍エリア２０２c、差分データと特定のプログラムを用いて差分復元した新プログラムを一時的に記憶するための復元エリア２０２ｂを備える。
【００４１】
次に、図４Ａを用いて、ＦＬＡＳＨメモリ２０３の構成を説明する。図４Ａは、図１に示すＦＬＡＳＨメモリ２０３の内部の構成を示す模式図である。ＦＬＡＳＨメモリ２０３は、複数のサイズのブロックB#n (n=1〜B)とリプロソフト４００から構成される。ここで現バージョンのプログラムのバイナリーデータ(旧プログラムのバイナリーデータ）を格納する第１不揮発性メモリ４１０は、ブロックB#n (n=1〜7)のエリアである。また、本実施例の特定プログラムの圧縮データを格納する第２不揮発性メモリ４２０は、ブロックB#n (n=8〜B)のエリアである。さらに車載書込み装置１００から受信した差分データを格納するための差分データ格納エリア４３０は、B#n (n=C, D)のエリアである。
【００４２】
ここで、ブロックB#nとは、消去可能な最小サイズである。例えば、ブロックB#nにデータを書き込む場合、ブロックB#n全体を消去してからデータを書き込む必要がある。
さらにＦＬＡＳＨメモリ２０３の先頭のブロックには、差分更新を実行するリプロソフト４００が搭載されている。また、ＦＬＡＳＨメモリ２０３を複数のサイズのブロックB#n (n=1〜B)で構成しているが、ブロック数は本発明を制約するものではない。
【００４３】
図４Ｂは、ＦＬＡＳＨ２０３をマイコン内蔵ＦＬＡＳＨ 203aと外付けFLASH 203bに分割した構成例である。内蔵FLASH 203aはリプロソフト４００と第１不揮発性メモリ４１０で構成し、外付けFLASH 203bは第２不揮発性メモリ４２０（特定プログラムの圧縮データ）と差分データ格納エリア４３０で構成している。差分更新に必要なデータを外付けFLASH 203bに配置した構成である。
【００４４】
図４Ｃは、図４Ｂの外付けFLASH 203bの差分データ格納エリア４３０を第１差分データ格納エリア４３０a (最新の差分データ)と第２差分データ格納エリア４０３b (前回の差分データ)の２つのエリアで構成した構成図である。前回の差分データは、診断異常時に使用する。
【００４５】
次に実施例の全体構成を示す図５を用いて、リプロソフト４００の動作を説明する。
【００４６】
リプロソフト４００には、一定周期で動作する通信ソフト５００がある。差分データ受信ソフト５１０は、通信ソフト５００から起動される。差分データ受信ソフト５１０は車載書込み装置１００から受信した差分データをＳＲＡＭ２０２の受信エリア２０２ａに一時的に記憶し、さらに受信エリア２０２ａの内容を第１差分データ格納エリア４３０ａへ格納する手段である。次に通信ソフト５００は差分復元ソフト５２０を起動する。差分復元ソフト５２０は、解凍ソフト５４０と第１差分復元ソフト５５０を起動する。解凍ソフト５４０は第２不揮発性メモリ４２０の圧縮データを解凍して特定プログラムを解凍エリア２０２ｃへ格納する。第１差分復元ソフト５５０は第１差分データ格納エリア４３０ａの最新の差分データと解凍エリア２０２ｃの特定プログラムを入力として、差分更新を実行し、復元した新プログラムを復元エリア２０２ｂへ格納する。
【００４７】
次に第１不揮発性メモリ４１０のブロックB#n (n=1〜7)を消去して現バージョンのプログラム（旧プログラム、実行用プログラム３３１）を削除し、復元エリア２０２ｂの新プログラムを第１不揮発性メモリ４１０へ書込む。これで新プログラムが第１不揮発性メモリ４１０へ格納できたことになる。次に通信ソフト５００は診断ソフトを起動させて、新プログラムが正しく復元され、かつ正しく書き込めたか診断を行う。もし診断結果が正常であれば、リプロソフト４００によるソフトウェア更新は終了となる。一方、診断結果が異常であれば、解凍ソフト５４０を起動して、第２不揮発性メモリ４２０の圧縮データを解凍して特定プログラムをＳＲＡＭ２０２の解凍エリア２０２cへ格納する。
【００４８】
次に第２差分復元ソフト５６０は第２差分データ格納エリア４３０ｂの前回の差分データと解凍エリア２０２ｃの特定プログラムを入力として、差分更新を実行し、復元した旧プログラム（現バージョンのプログラム、実行用プログラム３３１）を復元エリア２０２ｂへ格納する。
【００４９】
次に第１不揮発性メモリ３０２のブロックB#n (n=1〜7)を消去することにより不正な新プログラムを削除し、復元エリア２０２bの旧プログラムを第１不揮発性メモリ３０２へ書込む。これで旧プログラムが第１不揮発性メモリ３０２へ格納できたことになる。
【００５０】
このように、差分復元に失敗した場合でも、特定プログラムの圧縮データと前回の差分データを用いて、解凍ソフト５４０と第２差分復元ソフト５６０を組み合わせて動作させることにより、旧プログラムを車載制御装置へ書込むことができた。
【００５１】
以下、具体的な通信コマンドの種類、プログラム書込み装置１００が通信コマンドを使って車載制御装置へ差分データを送信する送信処理、車載制御装置の差分データ受信処理、プログラム書込み装置１００の差分復元実行通信コマンドと診断実行通信コマンド送信処理、車載制御装置の差分復元実行通信コマンドと診断実行通信コマンド受信処理のフローチャートを図６〜図１０Ｂを用いて説明し、次に解凍処理のコマンド、解凍ソフトの処理、差分処理のコマンド、第１差分復元ソフトの処理、診断ソフトの処理、第２差分復元ソフトの処理の詳細な説明を図１０Ａ〜図１５を用いて説明する。
【００５２】
図６は、車載書込み装置１００から車載制御装置２００へ送信される通信コマンドである。この通信コマンドを用いて差分データを車載制御装置２００へ送信する。
【００５３】
通信コマンド$10  ６００は車載制御装置２００へ差分データの送信開始を通知するコマンドである。車載制御装置２００はこのコマンドを受信することで、受信エリア２０２ａへ差分データを格納することができる。
【００５４】
通信コマンド$20  ６１０は、第１差分データ格納エリア４３０ａを指定するコマンドである。付属するＭＡは第１差分データ格納エリア４３０ａの先頭アドレス、ＭＳは第１差分データ格納エリア４３０ａのサイズである。
【００５５】
通信コマンド$30  ６２０は、差分データDATAを付属したコマンドである。
【００５６】
通信コマンド$40  ６３０は、差分データ送信終了を示すコマンドである。
【００５７】
以上の通信コマンドを用いて、プログラム書込み装置１００から車載制御装置２００へ差分データを送信し、車載制御装置２００は差分データを第１差分格納エリア４３０aへ格納する。
【００５８】
通信コマンド$50  ６４０は、差分復元実行コマンドである。差分データを第１差分格納エリア４３０aへ格納した後に、プログラム書込み装置１００から車載制御装置２００へ送信される通信コマンドである。車載制御装置２００は本通信コマンドを受信すると解凍ソフトと第１差分復元ソフトを起動して第１不揮発性メモリ４１０へ新プログラムを生成する。
【００５９】
通信コマンド$60  ６５０は、診断コマンドである。付属するＭＡは第１不揮発性メモリ４１０の先頭アドレス、ＭＳはそのサイズである。車載制御装置２００は、指定された先頭アドレスＭＡから、サイズＭＳのエリアのサム値を計算し、第１不揮発性メモリ４１０内新プログラムの所定のアドレスに格納されているサム値と一致することを診断する。もし一致すれば診断正常と判断してリプロ正常終了となる。一方、不一致の場合は診断異常と判断して解凍ソフトと第２差分復元ソフトを起動し、特定のプログラムと第２差分データ格納エリア４３０ｂの前回の差分データを用いて旧プログラムを復元し、第１不揮発性メモリ４１０へ書込むことで車載制御装置２００を動作可能にする。
【００６０】
図７は、プログラム書込み装置１００が、車載制御装置２００へ通信コマンドを用いて差分データをブロック単位に送信するフローチャートである。
【００６１】
７００で通信コマンド 差分データ送信開始＄１０を送信する。
【００６２】
７１０で通信コマンド 第１差分データ格納エリア４３０aを指定し、＄２０を送信する。
【００６３】
７２０で通信コマンド 差分データDATA  ＄３０を送信する。
【００６４】
７３０で通信コマンド 差分データ送信終了  ＄４０を送信する。
【００６５】
７４０は、全てのブロックの差分データを送信完了したか判定する。もし判定結果がnoならば７１０へ戻って次のブロックの差分データを７１０〜７４０を繰返すことで送信する。
【００６６】
一方、もし判定結果がyesならば差分データ送信終了である。
【００６７】
以上で、プログラム書込み装置１００は全てのブロックの差分データを車載制御装置２００へ送信したことになる。
【００６８】
図８は、車載制御装置２００の差分データ受信ソフト５１０の動作を示している。
【００６９】
８００は、車載書込み装置１００から通信コマンドＡを受信する処理である。
【００７０】
８１０は、受信した通信コマンドＡが$10か判定し、もしyesなら８１５を実行して受信エリア２０２ａを初期化する。一方、もしnoならば８２０を実行する。
【００７１】
８１５は、受信エリア２０２ａと、復元エリア２０２ｂを初期化して差分更新の準備をする。
【００７２】
８２０は、コマンドＡが$20か判定し、もしyesなら８２５を実行して第１差分データ格納エリア４３０aの先頭アドレスMAと、そのサイズMSを記憶する。一方、もしnoならば８３０を実行する。
【００７３】
８３０は、コマンドＡが$30か判定し、もしyesなら８３５を実行してコマンドに付属する差分データDATAをMAで指示された第１差分データ格納エリア４３０aへ追加格納する。一方、もしnoならば８４０を実行する。
【００７４】
８４０は、コマンドＡが$40か判定し、もしyesなら８４５を実行してブロックの差分データの受信完了であり、一方、もしnoならば８５０を実行する。
【００７５】
８５０は、全てのブロックの差分データを受信したか判定し、もしyesならば終了である。一方、もしnoならば８２０へ戻り、次のブロックの差分データを受信する処理を繰り返す。
【００７６】
以上で、差分データを第１差分データ格納エリア４３０aに格納できる。
【００７７】
図９は、プログラム書込み装置１００から車載制御装置２００へ通信コマンドを用いて差分復元実行と診断を指示するフローチャートである。
９００は、通信コマンド$10による通信コマンド送信開始通知である。
９１０は、通信コマンド$50による差分復元実行通知である。
９２０は、通信コマンド$60による診断実行通知である。
【００７８】
図１０Ａは、図９の９１０の差分復元実行コマンド受信によって起動される差分復元ソフト５２０のフローである。
【００７９】
１０００は、解凍ソフト５４０を実行して第２不揮発性メモリ４２０の圧縮データを解凍して特定のプログラムを解凍エリア２０２cへ復元する処理である。
【００８０】
１１００は、第１差分復元ソフト５５０を実行して第１差分データ格納エリア４３０aの差分データと解凍エリア２０２cの特定のプログラムから新プログラムを生成して復元エリア２０２bへ格納する。さらに復元エリア２０２bの新プログラムを第１不揮発性メモリ４１０へ書込む処理である。
【００８１】
以上で、旧プログラムを新プログラムへ更新できる。
【００８２】
図１０Ｂは、解凍ソフト５４０が用いる解凍コマンドである。
【００８３】
解凍ソフトを説明する前に、まず圧縮ソフトの概要について説明する。圧縮ソフトは、圧縮処理において、プログラム中の部分命令列と同一の部分命令列をプログラムの他の部分に存在するか検索して見つけ出し、その部分命令列を短い符号に置き換える。同一の部分命令列が数多く存在すれば、短い符号に数多く置き換えられるので、より圧縮できることになる。このため圧縮ソフトは、プログラムを検索して同一の部分命令列が見つからない場合には、１０００Ａの解凍追加コマンドnewにその部分命令列DATAを付属させる。一方、同一の部分命令列が見つかった場合は、１０１０Ａの解凍コピーコマンドcopyのように符号化する。プログラムのアドレスMAとサイズMSのペアで部分命令列を表現する。圧縮データとは、このように、解凍追加コマンドnewと解凍コピーコマンドcopyの列で構成されている。
【００８４】
以上の準備を踏まえて、解凍ソフト５４０の動作を説明する。
【００８５】
図１１は、解凍ソフト５４０の動作を示すフローチャートである。
【００８６】
１１００は第２不揮発性メモリ４２０の圧縮データを読み出す。
【００８７】
１１１０は読み出した圧縮コマンドを解析する。
【００８８】
１１２０はコマンドが解凍追加コマンドnewか判定し、もしyesならば１１２５を実行して解凍追加コマンドnewに付属するデータDATAを解凍エリア２０２ｃへ追記する。一方、noならば１１３０を実行する。
【００８９】
１１３０はコマンドが解凍コピーコマンドcopyか判定し、もしyesならば１１３５を実行して解凍コピーコマンドcopyに付属するMAとMSを用いて解凍エリア２０２c内のアドレスMAからサイズMSの部分命令列を解凍エリア２０２cへ追記する。一方、noならば１１４０を実行する。
【００９０】
１１４０は全ての差分データを第２不揮発性メモリ４２０から読み出し終えたか判定し、もしyesならば終了である。すなわち特定のプログラムが解凍エリア２０２cに復元できたことになる。一方、noならば１１００へ戻り、第２不揮発性メモリ４２０から圧縮データを読み出し、処理を繰り返し実行する。
【００９１】
次に、図１２を用いて、第１差分復元ソフト５５０と第２差分復元ソフト５６０が用いる差分コマンドを説明する。
【００９２】
差分復元ソフトを説明する前に、まず差分生成ソフトの概要について説明する。差分生成ソフトは、差分生成処理において、新プログラム３３０の部分命令列が旧プログラム３３１に存在するか検索して見つけ出し、その部分命令列を短い符号に置き換える。新プログラムと旧プログラム３３１が類似していれば同一の部分命令列が数多く存在することになり、短い符号に数多く置き換えることができる。このため差分生成ソフトは、旧プログラム３３１を検索して同一の部分命令列が見つからない場合には、１２００の差分追加コマンドnewにその部分命令列DATAを付属させる。一方、同一の部分命令列が旧プログラム３３１中に見つかった場合は、１２１０の差分コピーコマンドcopyのように符号化する。旧プログラムのアドレスMAとサイズMSのペアで部分命令列を表現する。差分データとは、このように、差分追加コマンドnewと差分コピーコマンドcopyの列で構成されている。
【００９３】
以上の準備を踏まえて、第１差分復元ソフト５５０の動作を説明する。
【００９４】
１３００は、第１差分データ格納エリア４３０aの差分データから差分コマンドを読み出す。
【００９５】
１３１０は、差分コマンドを解析し、１３２０で差分コマンドが差分追加コマンドnewか判定し、もしyesなら１３２５を実行し、一方、もしnoならば１３３０を実行する。
【００９６】
１３２５は、差分追加コマンドnewに付属する部分命令列DATAを復元エリア２０２bへ書込む。
【００９７】
１３３０は、差分コマンドが差分コピーコマンドcopyか判定し、もしyesなら１３３５を実行し、一方、もしnoならば１３４０を実行する。
【００９８】
１３３５は、差分コピーコマンドcopyに付属するMAとMSを用いて、旧プログラムのアドレスMAからサイズMSの部分命令列を復元エリア２０２bへ追加書き込む。
【００９９】
１３４０は、第１差分データ格納エリア４３０aから差分データを全て読み出したか判定し、もしyesならば１３５０を実行する。一方、もしnoならば１３００へ戻って処理を繰返す。
【０１００】
１３５０は、復元エリア２０２bに生成された新プログラムを第１不揮発性メモリ４１０へ書込む。
【０１０１】
以上で、差分復元した新プログラムを第１不揮発性メモリ４１０に格納できたことになる。
【０１０２】
図１４は、診断ソフト５３０のフローチャートである。
【０１０３】
前提として、新プログラムの定められたアドレスに新プログラム自身のサム値４バイトが存在しているものとする。診断は、このサム値を利用して行う。
【０１０４】
１４００は、第１不揮発性メモリ４１０の新プログラム中に存在するサム値を読み出して変数ＳＵＭへ設定している。
【０１０５】
１４１０は、第１不揮発性メモリ４１０の先頭アドレスＭＡからサイズＭＳまでのエリアのデータ（第１不揮発性メモリ４１０の新プログラム）を４バイト単位に加算した値を変数Ｓへ設定する。
【０１０６】
１４２０は、変数ＳＵＭと変数Ｓの一致判定を行い、もしyesなら１４２５を実行し、一方、もしnoならば１４３０を実行する。
【０１０７】
１４２５は、診断結果が正常なのでプログラム更新は、正常終了となる。
【０１０８】
１４３０は、診断結果が異常なので、旧プログラムを復元することを目的に、まず解凍ソフト５４０を実行して特定のプログラムを解凍エリア２０２cへ生成する。
【０１０９】
１４４０は、第２差分復元ソフト５６０を起動して、第２差分データ格納エリア４３０bの前回の差分データと解凍エリア２０２cの特定のプログラムから旧プログラムを復元する。
【０１１０】
ここで、第１差分データ格納エリア４３０aと第２差分データ格納エリア４３０bの関係は、常に最新の差分データ格納エリアを第１差分データ格納エリアと呼び、前回の差分データを格納しているエリアを第２差分データ格納エリアと呼んでいる。また、前回の差分データと特定のプログラムから生成したプログラムは、明らかに、旧プログラムである。
【０１１１】
解凍ソフト５４０の処理内容は、既に図１１のフローチャートで詳しく説明したので、省略する。
【０１１２】
最後に、図１５を用いて第２差分復元ソフト５６０のフローチャートを説明する。
【０１１３】
１５００は、第２差分データ格納エリア４３０bの差分データから差分コマンドを読み出す。
【０１１４】
１５１０は、差分コマンドを解析し、１５２０で差分コマンドが差分追加コマンドnewか判定し、もしyesなら１５２５を実行し、一方、もしnoならば１５３０を実行する。
【０１１５】
１５２５は、差分追加コマンドnewに付属する部分命令列DATAを復元エリア２０２bへ書込む。
【０１１６】
１５３０は、差分コマンドが差分コピーコマンドcopyか判定し、もしyesなら１５３５を実行し、一方、もしnoならば１５４０を実行する。
【０１１７】
１５３５は、差分コピーコマンドcopyに付属するMAとMSを用いて、解凍エリア２０２cの特定のプログラムのアドレスMAからサイズMSの部分命令列を復元エリア２０２bへ追加書き込む。
【０１１８】
１５４０は、第２差分データ格納エリア４３０bから差分データを全て読み出したか判定し、もしyesならば１５５０を実行する。一方、もしnoならば１５００へ戻って処理を繰返す。
【０１１９】
１５５０は、復元エリア２０２bに生成された旧プログラムを第１不揮発性メモリ４１０へ書込む。
【０１２０】
以上で、差分復元した旧プログラムを第１不揮発性メモリ４１０に格納できたことになる。
【０１２１】
本実施例では、特定のプログラムを圧縮して、その圧縮データを第２不揮発性メモリ４２０へ格納していた。しかし当然ながら、不揮発性メモリ２０３や外付けＦＬＡＳＨ２０３bの容量が大きければ、圧縮データの形態では無く、特定のプログラム自身を第２不揮発性メモリ４２０へ保存しておいても良い。この形態が可能であれば、図５のリプロソフト４００は、解凍ソフト５４０の代わりに、第２不揮発性メモリ４２０の特定のプログラムを解凍エリア２０２cへ転送する転送ソフトへ置き換えれば良い。この結果、差分復元ソフト５２０は、転送ソフトを実行して次に第１差分復元ソフト５５０を実行する。診断ソフト５３０も同様に、転送ソフトを実行して次に第２差分復元ソフト５６０を実行することで実現できる。
【符号の説明】
【０１２２】
１００…車載書込み装置（ゲートウェイ）
１０１…マイコン（演算装置）
１０２…ＳＲＡＭ（揮発性メモリ）
１０３…ＦＬＡＳＨメモリ（不揮発性メモリ）
１０４…各種のＩＣ
１０５…通信装置（ＣＡＮプロトコル）
１０６…通信装置（車両の外部のネットワークのプロトコル）
２００…車載制御装置（ＥＣＵ）
２０１…マイコン（演算装置）
２０２…ＳＲＡＭ（揮発性メモリ）
２０３…ＦＬＡＳＨメモリ（不揮発性メモリ）
２０３a…マイコン内蔵ＦＬＡＳＨメモリ
２０３b…外付けＦＬＡＳＨメモリ
２０４…各種のＩＣ
２０５…通信装置（ＣＡＮプロトコル）
２０２a…受信エリア
２０２b…復元エリア
２０２c…解凍エリア
３００…特定プログラム
３１０…圧縮ソフト
３２０…特定プログラムの圧縮データ
３３０…新プログラム（新たな実行用プログラム）
３３１…旧プログラム（実行用プログラム）
３４０…差分生成ソフト
３５０…特定プログラムと新プログラムの差分データ
３６０…解凍ソフト
３７０…差分復元ソフト
４００…リプロソフト
４１０…第１不揮発性メモリ（実行可能なプログラムの格納エリア）
４２０…第２不揮発性メモリ（特定プログラムの圧縮データ格納エリア）
４３０…差分データ格納エリア
４３０a…第１差分データ格納エリア（最新の差分データ格納エリア）
４３０b…第２差分データ格納エリア（前回の差分データ格納エリア）
５００…通信ソフト
５１０…差分データ受信ソフト
５２０…差分復元ソフト
５３０…診断ソフト
５４０…解凍ソフト
５５０…第１差分復元ソフト
５６０…第２差分復元ソフト
６００…差分データ送信開始通信コマンド
６１０…差分データ格納エリア指定通信コマンド
６２０…差分データ通信コマンド
６３０…差分データ送信終了通信コマンド
６４０…復元実行通信コマンド
６５０…診断実行通信コマンド
１０００A…解凍追加コマンド
１０１０A…解凍コピーコマンド
１２００…差分追加コマンド
１２１０…差分コピーコマンド
【図１】
2019175024.tif 000003
【図２】
2019175024.tif 000004
【図３Ａ】
2019175024.tif 000005
【図３Ｂ】
2019175024.tif 000006
【図４Ａ】
2019175024.tif 000007
【図４Ｂ】
2019175024.tif 000008
【図４Ｃ】
2019175024.tif 000009
【図５】
2019175024.tif 000010
【図６】
2019175024.tif 000011
【図７】
2019175024.tif 000012
【図８】
2019175024.tif 000013
【図９】
2019175024.tif 000014
【図１０Ａ】
2019175024.tif 000015
【図１０Ｂ】
2019175024.tif 000016
【図１１】
2019175024.tif 000017
【図１２】
2019175024.tif 000018
【図１３】
2019175024.tif 000019
【図１４】
2019175024.tif 000020
【図１５】
2019175024.tif 000021