(57)【特許請求の範囲】
【請求項１】
旧プログラムを新プログラムに更新可能な車両用電子制御装置であって、
前記旧プログラムを記憶する記憶部と、
前記旧プログラムと前記新プログラムとの差分に基づくデータ部と、前記データ部を前記旧プログラムに反映して前記新プログラムを生成するための命令部と、を含む差分データ、または前記差分データを圧縮した差分圧縮データを、所定のデータ長ごとに分割してなる複数の分割データを順次受信する受信部と、
前記受信部により受信された各分割データおよび前記旧プログラムに基づいて前記新プログラムを復元するための復元処理を実行する復元部と、を備え、
前記復元部は、前記受信部により受信された分割データにおいて前記命令部と前記データ部の少なくとも一部とが揃わない場合に、前記復元処理を保留して次の分割データの受信を待つ車両用電子制御装置。
【請求項２】
請求項１に記載の車両用電子制御装置において、
前記差分データには、互いに対応する前記命令部と前記データ部とを組み合わせた差分パケットが複数配列されており、
前記差分パケットには、互いに対応する前記命令部と前記データ部とが、前記命令部から前記データ部の順に配列されており、
前記復元部は、前記受信部により受信された分割データの終端が前記命令部に対応する場合に、前記復元処理を保留して次の分割データの受信を待つ車両用電子制御装置。
【請求項３】
請求項２に記載の車両用電子制御装置において、
前記復元部は、前記受信部により受信された分割データの終端が前記データ部に対応する場合に、当該データ部に対応する前記命令部の内容に基づいて前記復元処理を実行する車両用電子制御装置。
【請求項４】
請求項３に記載の車両用電子制御装置において、
前記分割データは、前記差分圧縮データを前記所定のデータ長ごとに分割したものであり、
前記復元部は、前記受信部により受信された分割データに基づいて前記差分圧縮データの一部を前記差分データの一部に戻すための解凍処理を、前記復元処理において実行し、
前記復元部は、前記受信部により受信された分割データにおいて前記解凍処理に必要なデータが揃わない場合に、前記解凍処理を保留して次の分割データの受信を待つ車両用電子制御装置。
【請求項５】
請求項３または４に記載の車両用電子制御装置において、
前記復元部は、前記命令部の内容に基づき、前記データ部をそのまま前記新プログラムの一部とする挿入処理と、前記データ部と前記旧プログラムの一部とを加算して前記新プログラムの一部とする加算処理と、のいずれか少なくとも一つを、前記復元処理において実行する車両用電子制御装置。
【請求項６】
請求項５に記載の車両用電子制御装置において、
前記復元処理によって部分的に復元された前記新プログラムのデータサイズが所定値に達した場合に、前記新プログラムの当該部分を、前記記憶部において前記旧プログラムが記憶されているのとは別の記憶領域に書き込む車両用電子制御装置。
【請求項７】
請求項６に記載の車両用電子制御装置において、
前記新プログラムを前記記憶部に書き込む前に、前記分割データの送信を待機させるための待機応答を前記分割データの送信元に送信する車両用電子制御装置。
【請求項８】
電子制御装置の記憶部に記憶された旧プログラムを新プログラムに更新するためのプログラム更新方法であって、
前記旧プログラムと前記新プログラムとの差分に基づくデータ部と、前記データ部を前記旧プログラムに反映して前記新プログラムを生成するための命令部と、を含む差分データ、または前記差分データを圧縮した差分圧縮データを、所定のデータ長ごとに分割してなる複数の分割データを、前記電子制御装置により順次受信し、
受信した各分割データおよび前記旧プログラムに基づいて前記新プログラムを復元するための復元処理を、前記電子制御装置により実行し、
受信した分割データにおいて前記命令部と前記データ部の少なくとも一部とが揃わない場合に、前記電子制御装置による前記復元処理を保留して次の分割データの受信を待つプログラム更新方法。
【請求項９】
請求項８に記載のプログラム更新方法において、
前記差分データには、互いに対応する前記命令部と前記データ部とを組み合わせた差分パケットが複数配列されており、
前記差分パケットには、互いに対応する前記命令部と前記データ部とが、前記命令部から前記データ部の順に配列されており、
受信した分割データの終端が前記命令部に対応する場合に、前記電子制御装置による前記復元処理を保留して次の分割データの受信を待つプログラム更新方法。
【請求項１０】
請求項９に記載のプログラム更新方法において、
受信した分割データの終端が前記データ部に対応する場合に、当該データ部に対応する前記命令部の内容に基づいて、前記電子制御装置により前記復元処理を実行するプログラム更新方法。
【請求項１１】
請求項１０に記載のプログラム更新方法において、
前記分割データは、前記差分圧縮データを前記所定のデータ長ごとに分割したものであり、
受信した分割データに基づいて前記差分圧縮データの一部を前記差分データの一部に戻すための解凍処理を、前記復元処理において前記電子制御装置により実行し、
受信した分割データにおいて前記解凍処理に必要なデータが揃わない場合に、前記電子制御装置による前記解凍処理を保留して次の分割データの受信を待つプログラム更新方法。
【請求項１２】
請求項１０または１１に記載のプログラム更新方法において、
前記命令部の内容に基づき、前記データ部をそのまま前記新プログラムの一部とする挿入処理と、前記データ部と前記旧プログラムの一部とを加算して前記新プログラムの一部とする加算処理と、のいずれか少なくとも一つを、前記復元処理において前記電子制御装置により実行するプログラム更新方法。
【請求項１３】
請求項１２に記載のプログラム更新方法において、
前記復元処理によって部分的に復元された前記新プログラムのデータサイズが所定値に達した場合に、前記電子制御装置により、前記新プログラムの当該部分を、前記記憶部において前記旧プログラムが記憶されているのとは別の記憶領域に書き込むプログラム更新方法。
【請求項１４】
請求項１３に記載のプログラム更新方法において、
前記新プログラムを前記記憶部に書き込む前に、前記電子制御装置により、前記分割データの送信を待機させるための待機応答を前記分割データの送信元に送信するプログラム更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両用電子制御装置およびプログラム更新方法に関する。
【背景技術】
【０００２】
近年、運転支援機能や自動運転技術の進展により、自動車用の電子制御装置（ＥＣＵ：Ｅｌｅｃｔｒｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）に搭載されるソフトウェアの規模が増大している。それに伴って、ソフトウェア不具合に起因するリコールの回数およびリコール１回あたりに対応が必要な台数規模が増加している。また、通信ネットワークの進展に伴って、自動車が無線でセンタシステム等とつながるコネクテッドカーが普及の兆しを見せている。このような状況のなか、従来携帯電話やテレビに使われていた無線での遠隔ソフト更新技術を自動車に適用し、自動車のＥＣＵソフトウェアを遠隔で更新する自動車向け遠隔ソフト更新技術へのニーズが高まっている。
【０００３】
上記の遠隔ソフト更新技術に関して、たとえば特許文献１には、携帯端末のプログラムを差分更新によりアップデートするためのＯＴＡ（Ｏｖｅｒ  ｔｈｅ  Ａｉｒ）技術が開示されている。特許文献１の技術では、更新前後のプログラム間の差分を受信装置にダウンロードして更新前のプログラムと共にメモリに記憶し、これらの情報を用いて受信装置のプログラムを更新している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−６９１３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示の技術では、更新前後のプログラム間の差分を全てダウンロードして受信装置のメモリに記憶する必要がある。しかしながら、一般に車両用電子制御装置はメモリ容量が小さく、プログラム更新のためのメモリ領域を十分に確保できない。そのため、特許文献１に開示された差分更新を車両用電子制御装置のプログラム更新に適用するのは困難である。
【課題を解決するための手段】
【０００６】
本発明による旧プログラムを新プログラムに更新可能な車両用電子制御装置は、前記旧プログラムを記憶する記憶部と、前記旧プログラムと前記新プログラムとの差分に基づくデータ部と、前記データ部を前記旧プログラムに反映して前記新プログラムを生成するための命令部と、を含む差分データ、または前記差分データを圧縮した差分圧縮データを、所定のデータ長ごとに分割してなる複数の分割データを順次受信する受信部と、前記受信部により受信された各分割データおよび前記旧プログラムに基づいて前記新プログラムを復元するための復元処理を実行する復元部と、を備え、前記復元部は、前記受信部により受信された分割データにおいて前記命令部と前記データ部の少なくとも一部とが揃わない場合に、前記復元処理を保留して次の分割データの受信を待つ。
本発明による電子制御装置の記憶部に記憶された旧プログラムを新プログラムに更新するためのプログラム更新方法は、前記旧プログラムと前記新プログラムとの差分に基づくデータ部と、前記データ部を前記旧プログラムに反映して前記新プログラムを生成するための命令部と、を含む差分データ、または前記差分データを圧縮した差分圧縮データを、所定のデータ長ごとに分割してなる複数の分割データを、前記電子制御装置により順次受信し、受信した各分割データおよび前記旧プログラムに基づいて前記新プログラムを復元するための復元処理を、前記電子制御装置により実行し、受信した分割データにおいて前記命令部と前記データ部の少なくとも一部とが揃わない場合に、前記電子制御装置による前記復元処理を保留して次の分割データの受信を待つ。
【発明の効果】
【０００７】
本発明によれば、車両用電子制御装置のプログラム更新において差分更新を適用することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施形態に係るソフトウェア更新システムの構成例を示すブロック図である。
【図２】ソフト更新装置のハードウェア構成例およびソフトウェア構成例を示すブロック図である。
【図３】ＥＣＵのハードウェア構成例およびソフトウェア構成例を示すブロック図である。
【図４】サーバのハードウェア構成例およびソフトウェア構成例を示すブロック図である。
【図５】本発明の一実施形態に係るソフトウェア更新システムにおけるプログラム更新の流れを示すシーケンス図である。
【図６】差分生成処理の流れを示すフロー図である。
【図７】差分データの構成例を示す図である。
【図８】差分圧縮データの構成例を示す図である。
【図９】本発明の第１の実施形態における分割データの構成例を示す図である。
【図１０】ソフト更新処理の流れを示すシーケンス図である。
【図１１】ソフト更新装置とＥＣＵ間でやりとりされるコマンドの構成例を示す図である。
【図１２】本発明の第１の実施形態における管理テーブルの構成を示す図である。
【図１３】本発明の第１の実施形態における復元処理のフロー図である。
【図１４】本発明の第１の実施形態による復元処理におけるデータの流れの概要を示す図である。
【図１５】本発明の第２の実施形態における分割データおよび管理テーブルの構成例を示す図である。
【図１６】本発明の第２の実施形態における復元処理のフロー図である。
【図１７】本発明の第２の実施形態による復元処理におけるデータの流れの概要を示す図である。
【発明を実施するための形態】
【０００９】
−第１の実施形態−
以下、本発明の第１の実施形態について、図面を参照して説明する。なお、本発明は、以下で説明する実施形態に限定されるものではない。また、以下の実施形態では、本発明を車両用ＥＣＵのプログラム更新に適用した場合について説明する。しかし、本発明は、各種パラメータやデータなど、ＥＣＵにおいて用いられるプログラム以外の制御情報全般の更新に適用可能である。また、車両用ＥＣＵ以外の電子制御装置におけるプログラムや制御情報の更新にも適用可能である。
【００１０】
＜システム構成＞
図１は、本発明の一実施形態に係るソフトウェア更新システムの構成例を示すブロック図である。図１に示すように、本実施形態のソフトウェア更新システムは、車両１に搭載されたソフト更新装置１０およびＥＣＵ１１、１２、１３と、インターネット３およびアクセスネットワーク４を介してソフト更新装置１０と接続されたサーバ２から構成される。アクセスネットワーク４は、通信サービスプロバイダが提供する無線通信網であり、ソフト更新装置１０がインターネット３に接続するために利用される。
【００１１】
車両１において、ソフト更新装置１０と、ＥＣＵ１１、１２、１３とは、車内ネットワーク１４によって互いに接続されている。車内ネットワーク１４は、車両１内に設けられた通信網であり、たとえばＣＡＮ（Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）（登録商標）、ＬＩＮ（Ｌｏｃａｌ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｎｅｔｗｏｒｋ）、ＦｌｅｘＲａｙ、Ｅｔｈｅｒｎｅｔ（登録商標）などで構成される。以下では、車内ネットワーク１４はＣＡＮで構成されるものとして説明するが、他の通信形式の場合でも同様である。
【００１２】
ソフト更新装置１０は、インターネット３およびアクセスネットワーク４を介してサーバ２と接続され、ＥＣＵ１１、１２、１３のプログラム更新に必要なデータである差分パッチＤ６をサーバ２からダウンロードする。ソフト更新装置１０は、ＥＣＵ１１、１２、１３のうちプログラムの更新対象に指定されたＥＣＵに対して、サーバ２からダウンロードした差分パッチＤ６を、車内ネットワーク１４を介して送信する。また、ソフト更新装置１０は、自身のプログラム更新に必要なデータをサーバ２からダウンロードし、そのデータを用いて自身のプログラム更新を行うこともできる。
【００１３】
ＥＣＵ１１、１２、１３は、車両１に搭載された各種車載機器に対応してそれぞれ設けられており、車両１が走行等の機能を実現するために必要な制御をそれぞれ行う。なお、図１ではＥＣＵ１１、１２、１３のみを図示しているが、車両１には他にも多数のＥＣＵが搭載されている。しかし、以下では説明を分かりやすくするため、ＥＣＵ１１、１２、１３を代表例として説明を行う。また、図１では図示していないが、ソフト更新装置１０やＥＣＵ１１、１２、１３などの車両１内の各構成要素は、電力線で蓄電池にそれぞれ接続されており、蓄電池から電力供給を受けているものとする。
【００１４】
図１に構成を示した本実施形態のソフトウェア更新システムでは、ＥＣＵ１１、１２、１３のプログラム更新に必要な差分パッチＤ６がサーバ２からソフト更新装置１０経由でＥＣＵ１１、１２、１３にそれぞれ配布される。この差分パッチＤ６に基づいて、後で説明するような処理をＥＣＵ１１、１２、１３においてそれぞれ実行することで、新たなプログラムがＥＣＵ１１、１２、１３に適用される。
【００１５】
なお、本実施形態では、インターネット３やアクセスネットワーク４のネットワークプロトコルとして、たとえばＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）を使用することができる。また、上位のトランスポートプロトコルには、たとえばＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）や、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）を用いることができる。なお、ＩＰにはバージョンの違いとしてＩＰｖ４とＩＰｖ６が有るが、本実施形態ではそのどちらを使用してもよい。
【００１６】
＜ソフト更新装置の構成＞
図２は、ソフト更新装置１０のハードウェア構成例およびソフトウェア構成例を示すブロック図である。図２（ａ）のハードウェアブロック図は、ソフト更新装置１０のハードウェア構成例を示している。図２（ａ）に示すように、ソフト更新装置１０は、マイコン１０１、通信装置（ＣＡＮ）１０２、通信装置（ＷＡＮ：Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１０３、ＦＲＯＭ１０４を備える。
【００１７】
マイコン１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１１、ＳＲＡＭ１０１２、ＦＲＯＭ１０１３を備える。ＣＰＵ１０１１は、ＳＲＡＭ１０１２を作業領域に用いて、ＦＲＯＭ１０１３に格納された制御プログラムを実行することで、ソフト更新装置１０を機能させる。ＣＰＵ１０１１は、たとえば、ソフト更新装置１０内の他の構成要素の制御を行ったり、通信装置（ＣＡＮ）１０２に対して、車内ネットワーク１４を介してソフト更新装置１０と接続された他の機器とのデータ送受信指示を行ったり、通信装置（ＷＡＮ）１０３に対して、インターネット３およびアクセスネットワーク４を介してソフト更新装置１０と接続されたサーバ２とのデータ送受信指示を行ったりする。ＦＲＯＭ１０１３は、制御プログラムや必要なパラメータなど、ソフト更新装置１０を動作させるための制御情報を格納する。ＳＲＡＭ１０１２は、ＣＰＵ１０１１の演算処理に応じて、制御プログラムの一部や制御プログラムの動作に必要なデータなどを一時的に格納する。
【００１８】
ＦＲＯＭ１０４は、不揮発性メモリ（ＲＯＭ：Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）で構成され、サーバ２から配布された差分パッチＤ６や、ソフト更新装置１０の新プログラムを格納する。また、ＦＲＯＭ１０４は、マイコン１０１の指示に従い、たとえばソフト更新装置１０に接続された装置の情報などのデータを保持する。
【００１９】
通信装置（ＷＡＮ）１０３は、マイコン１０１の指示により、インターネット３およびアクセスネットワーク４を介して接続されたサーバ２との間でデータの送受信を行う。通信装置（ＷＡＮ）１０３は、たとえばＥｔｈｅｒｎｅｔなどの有線通信部、または３Ｇ、ＷｉＭＡＸ（登録商標）、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）などの無線通信部により構成される。
【００２０】
通信装置（ＣＡＮ）１０２は、マイコン１０１の指示により、車内ネットワーク１４を介して接続されたＥＣＵ１１、１２、１３との間でデータの送受信を行う。
【００２１】
図２（ｂ）のソフトウェアブロック図は、ソフト更新装置１０上で動作する制御プログラム１００の構成例を示している。ソフト更新装置１０の機能を実現するための制御プログラム１００は、図２（ａ）のＦＲＯＭ１０１３上または、ＳＲＡＭ１０１２に展開されてＣＰＵ１０１１で実行されるものであり、図２（ｂ）に示すように、更新制御部１００１、データ送受信部（ＣＡＮ）１００２、データ送受信部（ＷＡＮ）１００３により構成される。また、ＦＲＯＭ１０４には、差分パッチＤ６が保持されている。なお、図２（ｂ）の例では、制御プログラム１００をその機能に応じて、更新制御部１００１、データ送受信部（ＣＡＮ）１００２、データ送受信部（ＷＡＮ）１００３のブロックに分割しているが、これらの各ブロックをさらに分割したり、いずれか２つ以上のブロックを統合したりしてもよい。また、制御プログラム１００は、１つのプログラムで実現する必要はなく、２つ以上のプログラムの組合せによって実現してもよい。
【００２２】
更新制御部１００１は、データ送受信部（ＷＡＮ）１００３を介して、サーバ２から差分パッチＤ６を取得したり、車両１の状態やＥＣＵ１１、１２、１３におけるソフト更新処理の状況をサーバ２に送信したりする。また、データ送受信部（ＣＡＮ）１００２を介して、車両１に搭載されたソフト更新装置１０以外の構成要素の状態を取得し、その状態に応じてソフト更新装置１０のソフト更新処理を実施する。さらに、サーバ２から配布された差分パッチＤ６を所定のデータ長ごとに分割することで、ＥＣＵ１１、１２、１３のうち更新対象とするＥＣＵのプログラムを更新するための分割データを生成し、その分割データを当該ＥＣＵに順次送信する。その後、更新対象のＥＣＵにおいてプログラムの更新が終了したら、更新後の状態確認を行う。
【００２３】
データ送受信部（ＷＡＮ）１００３は、更新制御部１００１からの指示に従って、通信装置（ＷＡＮ）１０３を操作し、アクセスネットワーク４とインターネット３を介して、サーバ２とデータ送受信を行う。なお、データ送受信部（ＷＡＮ）１００３は、ＴＣＰ／ＩＰまたはＵＤＰ／ＩＰなどのパケットを解析・構成する機能を有してもよい。
【００２４】
通信装置（ＣＡＮ）１０２は、更新制御部１００１からの指示に従って、通信装置（ＣＡＮ）１０２を操作し、車内ネットワーク１４を介して、車両１に搭載されたソフト更新装置１０以外の機器との間でデータ送受信を行う。
【００２５】
＜ＥＣＵの構成＞
図３は、ＥＣＵ１１のハードウェア構成例およびソフトウェア構成例を示すブロック図である。図３（ａ）のハードウェアブロック図は、ＥＣＵ１１のハードウェア構成例を示している。図３（ａ）に示すように、ＥＣＵ１１は、マイコン１１１、通信装置（ＣＡＮ）１１２を備え、センサ１１３、アクチュエータ１１４と接続されている。なお、図３（ａ）ではＥＣＵ１１のハードウェアブロック図を示しているが、ＥＣＵ１２、１３も同様の構成を有している。
【００２６】
マイコン１１１は、ＣＰＵ１１１１、ＳＲＡＭ１１１２、ＦＲＯＭ１１１３を備える。ＣＰＵ１１１１は、ＳＲＡＭ１１１２を作業領域に用いて、ＦＲＯＭ１１１３に格納された制御プログラムを実行することで、ＥＣＵ１１を動作させ、車両１の機能の一部を実現する。ＣＰＵ１１１１は、たとえば、センサ１１３の読み出しやアクチュエータ１１４の操作を行ったり、通信装置（ＣＡＮ）１１２を介して車内ネットワーク１４で接続された他の機器とのデータ送受信を行ったりする。
【００２７】
センサ１１３は、マイコン１１１の指示によって車両１の制御に必要となるデータを取得する。アクチュエータ１１４は、マイコン１１１の指示によって車両１の制御に必要な構成要素、たとえばブレーキなどを駆動する。
【００２８】
なお、ＳＲＡＭ１１１２、ＦＲＯＭ１１１３、通信装置（ＣＡＮ）１１２の機能は、ソフト更新装置１０のＳＲＡＭ１０１２、ＦＲＯＭ１０１３、通信装置（ＣＡＮ）１０２とそれぞれ同様であるため、説明を省略する。
【００２９】
図３（ｂ）のソフトウェアブロック図は、ＥＣＵ１１上で動作する制御プログラム１１０の構成例を示している。ＥＣＵ１１の機能を実現するための制御プログラム１１０は、図３（ａ）のＦＲＯＭ１０１３上または、ＳＲＡＭ１１１２に展開されてＣＰＵ１１１１で実行されるものであり、図３（ｂ）に示すように、制御部１１０１、データ送受信部１１０２、復元部１１０３、Ｆｌａｓｈ書き込み制御部１１０４により構成される。また、ＳＲＡＭ１１１２には、受信バッファ１１１２１、復元バッファ１１１２３、管理テーブル１１１２２、辞書領域１１１２４が保持されている。制御プログラム１１０は、ソフト更新装置１０から受信して受信バッファ１１１２１に記憶されている差分パッチＤ６の分割データに基づいて、ＦＲＯＭ１１１３に保持されている旧プログラムＤ１を新プログラムＤ２に書き換える。このプログラムの書き換えに際しては、Ｆｌａｓｈ書き込み制御部１１０４により、ＦＲＯＭ１１１３において旧プログラムＤ１が記憶されているのとは別の記憶領域である一時領域１１１２５が利用される。なお、図３（ｂ）の例では、制御プログラム１１０をその機能に応じて、制御部１１０１、データ送受信部１１０２、復元部１１０３、Ｆｌａｓｈ書き込み制御部１１０４のブロックに分割しているが、これらの各ブロックをさらに分割したり、いずれか２つ以上のブロックを統合したりしてもよい。また、制御プログラム１１０は、１つのプログラムで実現する必要はなく、２つ以上のプログラムの組合せによって実現してもよい。
【００３０】
制御部１１０１は、センサ１１３からの読み出しや、アクチュエータ１１４の操作を行う。また、通信装置（ＣＡＮ）１１２を介して、車内ネットワーク１４で接続されたＥＣＵ１１以外の機器とのデータ送受信を行う。これにより、ＥＣＵ１１を動作させ、車両１で必要な機能の一部を実現する。さらに、制御部１１０１は、データ送受信部１１０２、復元部１１０３、Ｆｌａｓｈ書き込み制御部１１０４をそれぞれ制御して、旧プログラムＤ１を新プログラムＤ２に更新する。
【００３１】
データ送受信部１１０２は、制御部１１０１からの指示に従って、通信装置（ＣＡＮ）１１２を操作し、車内ネットワーク１４を介して、ＥＣＵ１１以外の他の機器との間でデータ送受信を行う。
【００３２】
復元部１１０３は、ソフト更新装置１０から受信して受信バッファ１１１２１に格納された差分パッチＤ６の分割データと、ＦＲＯＭ１１１３に保持された旧プログラムＤ１とに基づき、新プログラムＤ２の一部を復元して復元バッファ１１１２３に格納する。
【００３３】
Ｆｌａｓｈ書き込み制御部１１０４は、制御部１１０１からの指示に従って、ＦＲＯＭ１１１３に記憶されたデータの消去や、ＦＲＯＭ１１１３へのデータ書き込みを行う。旧プログラムＤ１を新プログラムＤ２に更新する際に、Ｆｌａｓｈ書き込み制御部１１０４は、復元バッファ１１１２３に格納されているデータをＦＲＯＭ１１１３の一時領域１１１２５にコピーする。
【００３４】
＜サーバの構成＞
図４は、サーバ２のハードウェア構成例およびソフトウェア構成例を示すブロック図である。図４（ａ）のハードウェアブロック図は、サーバ２のハードウェア構成例を示している。図４（ａ）に示すように、サーバ２は、ＣＰＵ２０１、記憶部２０２、通信部２０３、表示部２０４、入力部２０５を備える。
【００３５】
ＣＰＵ２０１は、記憶部２０２に蓄積されたサーバ用プログラムを実行することで、差分パッチＤ６の生成や配信の制御を行う。
【００３６】
記憶部２０２は、差分パッチＤ６の生成に用いられる旧プログラムＤ１および新プログラムＤ２や、生成された差分パッチＤ６を蓄積する。
【００３７】
通信部２０３は、ＣＰＵ２０１からの指示に従って、インターネット３およびアクセスネットワーク４を介して、車両１に搭載されたソフト更新装置１０との間でデータの送受信を行う。
【００３８】
表示部２０４は、ＣＰＵ２０１からの指示に従って、サーバ２を操作するオペレータに必要な情報を表示する。たとえば、差分パッチＤ６の生成や配信に関する情報を表示することで、これらの情報をサーバ２のオペレータに提供する。
【００３９】
入力部２０５は、サーバ２を操作するオペレータからの入力操作を受け付け、その入力操作に応じた入力情報をＣＰＵ２０１に出力する。
【００４０】
図４（ｂ）のソフトウェアブロック図は、サーバ２上で動作するサーバ用プログラム２００の構成例を示している。サーバ２の機能を実現するためのサーバ用プログラム２０２は、図４（ａ）のＣＰＵ２０１で実行されるものであり、図４（ｂ）に示すように、差分生成部２００１、データ配信部２００２により構成される。なお、図４（ｂ）の例では、サーバ用プログラム２０２をその機能に応じて、差分生成部２００１、データ配信部２００２のブロックに分割しているが、これらの各ブロックをさらに分割したり、これらのブロックを統合したりしてもよい。また、サーバ用プログラム２０２は、１つのプログラムで実現する必要はなく、２つ以上のプログラムの組合せによって実現してもよい。
【００４１】
差分生成部２００１は、記憶部２０２に格納された旧プログラムＤ１と新プログラムＤ２から、差分パッチＤ６を生成する。
【００４２】
データ配信部２００２は、通信部２０３を操作し、インターネット３およびアクセスネットワーク４を介して、記憶部２０２に格納された差分パッチＤ６を、車両１に搭載されたソフト更新装置１０に配信する。
【００４３】
なお、以上説明したサーバ２の構成は、１台のサーバで実現してもよいし、複数台のサーバを連携して実現してもよい。
【００４４】
＜プログラム更新の流れ＞
図５は、本発明の一実施形態に係るソフトウェア更新システムにおけるプログラム更新の流れを示すシーケンス図である。本実施形態のソフトウェア更新システムでは、図１のＥＣＵ１１、１２、１３のいずれかをプログラムの更新対象として、図５のシーケンス図に示す流れに従ってプログラム更新を行う。なお、以下ではＥＣＵ１１がプログラムの更新対象である場合の例を説明するが、ＥＣＵ１２、１３がプログラムの更新対象である場合も同様である。
【００４５】
最初に、サーバ２は、ステップＳ１００において、旧プログラムＤ１と新プログラムＤ２から車両１に配信する差分パッチＤ６を生成するための差分生成処理を行う。この差分生成処理の詳細については、後で図７を参照して説明する。
【００４６】
次に、ソフト更新装置１０は、ステップＳ２００において、ステップＳ１００で生成された差分パッチＤ６をサーバ２からダウンロードするためのダウンロード処理を行う。このダウンロード処理は、たとえば車両１のエンジン起動時などに行われる。ダウンロード処理では、差分パッチＤ６がサーバ２からソフト更新装置１０に送信されることにより、差分パッチＤ６がダウンロードされる。ダウンロードされた差分パッチＤ６は、ソフト更新装置１０のＦＲＯＭ１０４に保持される。
【００４７】
その後、ソフト更新装置１０とＥＣＵ１１は、ステップＳ３００において、前処理を行う。この前処理は、車両１のエンジンが動作状態から停止状態に遷移したときなどに行われる。前処理では、たとえばＥＣＵ１１における旧プログラムＤ１のバージョンチェックや、ＥＣＵ１１の異常診断等を行う。
【００４８】
続いて、ソフト更新装置１０とＥＣＵ１１は、ステップＳ４００において、ステップＳ２００でダウンロードした差分パッチＤ６を用いて、ＥＣＵ１１の旧プログラムＤ１を新プログラムＤ２に更新するためのソフト更新処理を行う。このソフト更新処理では、ソフト更新装置１０において差分パッチＤ６はブロック毎の差分圧縮データＤ５に分解され、差分圧縮データＤ５が所定のデータサイズごとに分割されて、各分割データがソフト更新装置１０からＥＣＵ１１に順次送信される。ＥＣＵ１１は、ソフト更新装置１０から送信された各分割データを順次受信し、その分割データに基づいて旧プログラムＤ１を新プログラムＤ２に更新する。なお、ステップＳ４００で行われるソフト更新処理の詳細については、後で図１１を参照して説明する。
【００４９】
最後に、ソフト更新装置１０とＥＣＵ１１は、ステップＳ５００において、後処理を行う。後処理では、たとえばステップＳ４００のソフト更新処理が正常に完了したか否かの確認や、ソフト更新処理で使用されたフラグの消去等を行う。
【００５０】
以上説明したステップＳ１００〜Ｓ５００の処理を実施することで、本実施形態のプログラム更新が完了する。なお、ステップＳ３００〜Ｓ５００の実行タイミングは、車両１のエンジンが停止されたとき以外であってもよい。たとえば、ステップＳ２００のダウンロード処理が完了した直後や、所定の時刻となったときに、ステップＳ３００〜Ｓ５００の処理を実行することが考えられる。
【００５１】
図６は、図５のステップＳ１００で実行される差分生成処理の流れを示すフロー図である。図６に示す処理は、サーバ２において、図４（ｂ）の差分生成部２００１により実行される。
【００５２】
最初に、差分生成部２００１は、ステップＳ１０１において、記憶部２０２から新プログラムＤ２、付加情報Ｄ３を読み込む。付加情報Ｄ３は、新プログラムＤ２から図５のステップＳ４００で行われるソフト更新処理で用いるのに適切な差分パッチＤ６を生成するための情報である。たとえば、ソフト更新装置１０からＥＣＵ１１へ送信されるデータブロックのサイズを表すブロック情報などが、付加情報Ｄ３に含まれる。差分生成部２００１は、この付加情報Ｄ３に基づいて、新プログラムＤ２を複数のデータブロックに分割する。ステップＳ１０１を実行したら、差分生成部２００１は、内部的に設定されているブロック処理カウンタの値をｉ＝０に設定した後、処理をステップＳ１０２に進める。
【００５３】
次に、差分生成部２００１は、ステップＳ１０２において、ステップＳ１０１で新プログラムＤ２から分割された複数のデータブロックのうち、現在のブロック処理カウンタの値に応じたデータブロックである新プログラムＤ２のブロックｉを選択し、このブロックｉに対応した部分を旧プログラムＤ１から切り出す。このとき差分生成部２００１は、付加情報Ｄ３を参照することで、旧プログラムＤ１においてどの部分がブロックｉに対応するかを特定する。このとき、旧プログラムＤ１の対応ブロックは、新プログラムＤ２の対象ブロックと同一のアドレスのブロックだけではなく、複数のブロックからなる構成としてもよい。
【００５４】
次に、差分生成部２００１は、ステップＳ１０３において、ステップＳ１０２で選択した新プログラムＤ２のブロックｉと、ステップＳ１０２で旧プログラムＤ１から切り出した部分とを比較し、その比較結果に基づいて差分データＤ４を抽出する。この差分データＤ４には、旧プログラムＤ１には存在しないが新プログラムＤ２には存在するデータと、旧プログラムＤ１と新プログラムＤ２の間でソースコード上は同じであるが、実行モジュール上はその値が異なるデータとが含まれる。前者のデータの場合は、新プログラムＤ２のデータ内容がそのまま差分データＤ４として抽出され、後者のデータの場合は、旧プログラムＤ１と新プログラムＤ２の間の差分値が差分データＤ４として抽出される。
【００５５】
次に、差分生成部２００１は、ステップＳ１０４において、ステップＳ１０３で抽出された差分データＤ４を圧縮し、差分圧縮データＤ５を生成する。生成された差分圧縮データＤ５は、記憶部２０２に格納される。
【００５６】
次に、差分生成部２００１は、ステップＳ１０５において、現在のブロック処理カウンタの値がｉ＝Ｎであるか否かを判定することで、差分データＤ４の抽出を最後のデータブロックまで行ったかどうかを確認する。なお、ＮはステップＳ１０１で新プログラムＤ２から分割されたデータブロックの数、すなわち差分データＤ４を抽出すべきデータブロックの相数を表す。その結果、ｉ＝Ｎである場合は、差分データＤ４の抽出を最後のデータブロックまで行ったと判断し、処理をステップＳ１０６に進める。一方、ｉ＝Ｎでない場合、すなわちｉ＜Ｎである場合は、差分データＤ４の抽出を最後のデータブロックまで行っていないと判断し、ブロック処理カウンタの値に１を加えて処理をステップＳ１０２に戻す。これにより、次のデータブロックについて差分データＤ４の抽出が引き続き行われるようにする。プログラムの変更内容に応じて、差分生成の順番はｉ＝Ｎから逆順に実施してもよい。
【００５７】
差分生成部２００１は、ステップＳ１０６において、各データブロックに対してこれまでに生成された差分圧縮データＤ５を記憶部２０２から読み出し、それらを順に連結することで差分パッチＤ６を生成する。生成された差分パッチＤ６は、記憶部２０２に格納される。
【００５８】
以上説明したステップＳ１０１〜Ｓ１０６の処理を実施することで、差分生成部２００１による差分生成処理が完了する。
【００５９】
＜データ構成＞
図７は、図６のステップＳ１０３で生成される差分データＤ４の構成例を示す図である。図７に示すように、差分データＤ４は、複数の差分パケットＤ４２、Ｄ４３、Ｄ４４等から構成される。なお、図７では差分パケットＤ４２、Ｄ４３、Ｄ４４のみを図示しているが、差分データＤ４にはこれ以外にも多数の差分パケットが含まれている。
【００６０】
差分パケットＤ４２は、命令部Ｄ４２１とデータ部Ｄ４２２から構成される。同様に、差分パケットＤ４３は、命令部Ｄ４３１とデータ部Ｄ４３２から構成され、差分パケットＤ４４は、命令部Ｄ４４１とデータ部Ｄ４４２から構成される。他の差分パケットについても同様に、命令部とデータ部から構成される。
【００６１】
命令部Ｄ４２１は、データ部Ｄ４２２を旧プログラムＤ１に反映して新プログラムＤ２を生成するためのデータであり、加算命令Ｄ４２１１、挿入命令Ｄ４２１２、移動命令Ｄ４２１３から構成される。データ部Ｄ４２２は、旧プログラムＤ１と新プログラムＤ２との差分に基づくデータであり、加算データＤ４２２１、挿入データＤ４２２２から構成される。
【００６２】
加算命令Ｄ４２１１は、加算データＤ４２２１の値を旧プログラムＤ１の一部に加算することで新プログラムＤ２の一部を生成する命令を表すデータである。挿入命令Ｄ４２１２は、挿入データＤ４２２２の値を旧プログラムＤ１の一部に挿入することで新プログラムＤ２の一部を生成する命令を表すデータである。移動命令Ｄ４２１３は、加算命令Ｄ４２１１や挿入命令Ｄ４２１２に応じて加算または挿入されたデータの分だけ、新プログラムＤ２のポインタを移動する命令を表すデータである。
【００６３】
なお、上記の説明では、差分パケットＤ４２を構成する命令部Ｄ４２１およびデータ部Ｄ４２２の構成を説明したが、差分パケットＤ４３、Ｄ４４をそれぞれ構成する命令部Ｄ４３１、Ｄ４４１およびデータ部Ｄ４３２、Ｄ４４２についても、それぞれ同様の構成を有している。また、他の差分パケットについても同様である。
【００６４】
このように、命令部Ｄ４２１、Ｄ４３１、Ｄ４４１と、それに続くデータ部Ｄ４２２、Ｄ４３２、Ｄ４４２から、差分パケットＤ４２、Ｄ４３、Ｄ４４がそれぞれ構成される。差分データＤ４には、差分パケットＤ４２、Ｄ４３、Ｄ４４以外にも、このような構造の差分パケットが複数配列されている。なお、差分データＤ４における各差分パケットのデータ配列は、必ずしも上記の順で並んでいる必要はなく、たとえば差分パケットＤ４０のようなデータ配列としてもよい。差分パケットＤ４０では、加算命令Ｄ４２１１、加算データＤ４２２１、挿入命令Ｄ４２１２、挿入データＤ４２２２、移動命令Ｄ４２１３の順に、各データが配列されている。また、差分パケットＤ４２において、命令部Ｄ４２１とデータ部Ｄ４２２の配列順序を逆にしてもよい。他の差分パケットについても同様である。これ以外にも、各差分パケットのデータ配列は任意に設定可能である。
【００６５】
図８は、図６のステップＳ１０４で生成される差分圧縮データＤ５の構成例を示す図である。本実施形態では、差分データＤ４に対して、ＬＺ７７符号化およびエントロピー符号化の２段階の圧縮を行うことにより、差分圧縮データＤ５が生成される。
【００６６】
差分データＤ４を周知のＬＺ７７アルゴリズムを用いて符号化すると、複数のＬＺ７７パケットＤ８０３から構成されるＬＺ７７圧縮データＤ８１０が生成される。各ＬＺ７７パケットＤ８０３は、ＩＤ（パケット種別）Ｄ８０１とデータＤ８０２から構成される。ここで、データ部Ｄ８０２には、文字Ｄ８０２０１か、または事前に出現済みの文字列へのオフセットＤ８０２０２と長さＤ８０２０３の組み合わせのいずれかが設定される。一方、ＩＤ（パケット種別）Ｄ８０１は、データＤ８０２の内容が上記のいずれであるかを示すデータであり、対応するデータＤ８０２に応じて設定される。
【００６７】
ＬＺ７７圧縮データＤ８１０をレンジコーダやハフマン符号などのアルゴリズムを用いてエントロピー符号化すると、複数のバイナリ符号Ｄ８０７から構成されるエントロピー圧縮データＤ８２０が生成される。本実施形態では、このエントロピー圧縮データＤ８２０にヘッダ部Ｄ５１を付加して、差分圧縮データＤ５が構成される。ヘッダ部Ｄ５１は、種別Ｄ５１１、復元後サイズＤ５１２、圧縮ヘッダＤ８３０から構成される。種別Ｄ５１１は、差分圧縮データＤ５における圧縮データの種別を示す識別情報である。本実施形態では、エントロピー圧縮データＤ８２０に対応する値が種別Ｄ５１１に設定される。なお、圧縮されていないデータや、他の圧縮方法で圧縮されたデータを用いる場合には、エントロピー圧縮データＤ８２０とは異なる値が種別Ｄ５１１において設定される。復元後サイズＤ５１２は、エントロピー圧縮データＤ８２０の復元後のデータサイズを示す。圧縮ヘッダＤ８３０は、エントロピー圧縮データＤ８２０を生成する際に用いられたパラメータなどを示す。
【００６８】
このように、差分データＤ４を圧縮して差分圧縮データＤ５を生成し、この差分圧縮データＤ５を用いて差分パッチＤ６を生成することで、差分パッチＤ６のデータサイズを小さくすることができる。
【００６９】
図９は、本発明の第１の実施形態における分割データの構成例を示す図である。本実施形態では、図９に示すように、差分パッチＤ６を構成する各差分圧縮データＤ５が２５６バイトごとに分割され、固定長の送信データＤ９０１やＤ９０２として、図５のステップＳ４００のソフト更新処理においてソフト更新装置１０からＥＣＵ１１に送信される。
【００７０】
送信データＤ９０１は、差分圧縮データＤ５のヘッダ部Ｄ５１と、エントロピー圧縮データＤ８２０におけるバイナリ符号Ｄ９１３の途中までを含む分割データである。これは、図８で説明したＬＺ７７圧縮データＤ８１０において、バイナリ符号Ｄ９１３に対応するデータＤ９１１の途中までを含む分割データＤ９０４に対応する。さらにこれは、図７で説明した差分データＤ４において、データＤ９１１に対応する命令部Ｄ４３１の途中までを含む分割データＤ９０５に相当する。
【００７１】
また、送信データＤ９０２は、差分圧縮データＤ５のバイナリ符号Ｄ９１３の途中からバイナリ符号Ｄ９１４の途中までを含む分割データである。これは、図８で説明したＬＺ７７圧縮データＤ８１０において、バイナリ符号Ｄ９１３に対応するデータＤ９１１の途中から、バイナリ符号Ｄ９１４に対応するデータＤ９１２の途中までを含む分割データＤ９０７に対応する。さらにこれは、図７で説明した差分データＤ４において、データＤ９１１に対応する命令部Ｄ４３１の途中から、データＤ９１２に対応するデータ部Ｄ４３２途中までを含む分割データＤ９０８に相当する。
【００７２】
以上説明したように、差分圧縮データＤ５を分割して送信することで、複数の可変長のパケットから構成されるエントロピー圧縮データＤ８２０、ＬＺ７７圧縮データＤ８１０、差分データＤ４は、固定長のデータにそれぞれ分割されて送信される。これにより、エントロピー圧縮データＤ８２０を構成する各バイナリ符号や、ＬＺ７７圧縮データＤ８１０を構成する各ＬＺ７７パケットのパケット種別およびデータや、差分データＤ４を構成する各差分パケットの命令部およびデータ部は、それぞれのデータ境界位置に関わらず、分割後のデータサイズに応じた位置で分割されて送信される。
【００７３】
＜ソフト更新処理の流れ＞
図１０は、図５のステップＳ４００においてソフト更新装置１０とＥＣＵ１１の間で実行されるソフト更新処理の流れを示すシーケンス図である。なお、図１０のシーケンス図は、ステップＳ２００でサーバ２からソフト更新装置１０に送信された差分パッチＤ６を構成する１つの差分圧縮データＤ５について実行される処理を表している。そのため、ＥＣＵ１１の旧プログラムＤ１を全て新プログラムＤ２に更新するためには、差分パッチＤ６を構成する全ての差分圧縮データＤ５について、図１０に示す処理が繰り返される。
【００７４】
最初に、ソフト更新装置１０の更新制御部１００１は、ステップＳ４０１において、データ送受信部（ＣＡＮ）１００２を介して、ＥＣＵ１１にデータ転送開始要求を送信する。このデータ転送開始要求は、たとえば、データフォーマット、送信予定のデータサイズ、送信したデータの書込み先を示す書込み先アドレス等の情報を含む。
【００７５】
ＥＣＵ１１のデータ送受信部１１０２は、ステップＳ４０１でソフト更新装置１０から送信されたデータ転送開始要求を受信すると、ステップＳ４０２において、ソフト更新装置１０に受諾応答を送信する。この受諾応答は、ＥＣＵ１１が一度に受信可能なデータサイズ等の情報を含む。
【００７６】
ソフト更新装置１０の更新制御部１００１は、ステップＳ４０２でＥＣＵ１１から送信された受諾応答を受信すると、ステップＳ４０３において、データ送受信部（ＣＡＮ）１００２を介して、ＥＣＵ１１に差分パッチＤ６を分割した分割データを送信する。このとき更新制御部１００１は、受諾応答に含まれるデータサイズの情報に基づいて、差分パッチＤ６を所定のデータ長ごとに分割した複数の分割データを生成する。そして、生成した各分割データを、先頭から一つずつ順にＥＵＣ１１に送信する。
【００７７】
ＥＣＵ１１の復元部１１０３は、ステップＳ４０３でソフト更新装置１０から送信された分割データをデータ送受信部１１０２により受信すると、ステップＳ４０４において復元処理を実行する。この復元処理において、復元部１１０３は、時間がかかる処理を行う必要があると判定した場合には、データ送受信部１１０２を用いて、適宜待機応答をソフト更新装置１０に送信する（Ｓ４０５）。なお、復元処理の詳細については、後で図１３を参照して説明する。
【００７８】
ステップＳ４０３で受信した分割データの復元処理が終了すると、ＥＣＵ１１の復元部１１０３は、ステップＳ４０６において、データ送受信部１１０２を介してソフト更新装置１０に受信応答を送信する。
【００７９】
ソフト更新装置１０とＥＣＵ１１は、ステップＳ４３０において、差分パッチＤ６を構成する差分圧縮データＤ５から生成された分割データをすべて送信するまで、前述のＳ４０３からＳ４０６までの一連の処理を継続して繰り返し行う。
【００８０】
ソフト更新装置１０の更新制御部１００１は、ステップＳ４０３で差分パッチＤ６を構成する１つの差分圧縮データＤ５から生成された分割データをすべて送信した後に、ステップＳ４０６でＥＣＵ１１から受信応答を受信したら、ステップＳ４０７において、データ送受信部（ＣＡＮ）１００２を介して、ＥＣＵ１１に転送完了通知を送信する。
【００８１】
ＥＣＵ１１の制御部１１０１は、ステップＳ４０７でソフト更新装置１０から送信された転送完了通知をデータ送受信部１１０２により受信すると、ステップＳ４０８においてＦｌａｓｈ書き込み制御部１１０４にデータ書込み指示を行う。この指示に応じて、Ｆｌａｓｈ書き込み制御部１１０４は、一時領域１１１２５に格納されたデータを新プログラムＤ２の一部としてＦＲＯＭ１１１３に書き込む。このときＦｌａｓｈ書き込み制御部１１０４は、最初に、復元バッファ１１１２３から一時領域１１１２５に書き込みされていないデータがあれば、復元バッファ１１１２３の当該データを一時領域１１１２５に書き込むことで、一時領域１１１２５において、新プログラムＤ２を構成する一つまたは複数個のデータブロックを完成させる。こうして一時領域１１１２５に新プログラムＤ２の一部が復元されたら、次に制御部１１０１は、これが正しく復元されているかを検証する。その結果、新プログラムＤ２の一部が正しく復元されている場合には、Ｆｌａｓｈ書き込み制御部１１０４は、一時領域１１１２５に格納されたデータを、ＦＲＯＭ１１１３において新プログラムＤ２の書込み領域に格納する。この書込み領域のアドレスは、ステップＳ４０１でソフト更新装置１０から受信したデータ転送開始要求において指定される。一方、新プログラムＤ２の一部が正しく復元されていない場合には、制御部１１０１は、データ送受信部１１０２を介して、ソフト更新装置１０に異常応答を返す。また、ＦＲＯＭ１１１３へのデータ書き込みに時間がかかる場合には、データ送受信部１１０２により、適宜待機応答をソフト更新装置１０に送信する（Ｓ４０９）。
【００８２】
ステップＳ４０８でＦＲＯＭ１１１３へのデータ書き込みが完了すると、ＥＣＵ１１の制御部１１０１は、ステップＳ４１０において、データ送受信部１１０２を介してソフト更新装置１０に受諾応答を送信する。
【００８３】
以上説明したように、ＥＣＵ１１は、ソフト更新装置１０から分割データを受信する都度、その分割データを用いた復元処理を行い、復元済みの分割データを破棄していく。これにより、すべての分割データを受信した後に復元処理を実行するのに比べて、少ないメモリ容量でＥＣＵ１１のプログラムの差分更新を行うことが可能となる。
【００８４】
図１１は、図１０のシーケンス図においてソフト更新装置１０とＥＣＵ１１間でやりとりされるコマンドの構成例を示す図である。
【００８５】
コマンドＤ１２１は、図１０のステップＳ４０１においてソフト更新装置１０からＥＣＵ１１に送信されるデータ転送開始要求であり、コマンド情報Ｄ１２１１、Ｄ１２１２、Ｄ１２１３、Ｄ１２１４、Ｄ１２１５から構成される。コマンド情報Ｄ１２１１は、コマンドＤ１２１の識別情報であり、ここにはデータ転送開始要求であることを示す識別子（ＩＤ）が設定される。コマンド情報Ｄ１２１２は、送信するデータの種別情報であり、送信データが差分圧縮データか、圧縮データか、新プログラムのいずれであるかを示す。コマンド情報Ｄ１２１３は、続くコマンド情報Ｄ１２１４、Ｄ１２１５のデータ長を示す。コマンド情報Ｄ１２１４は、図１０のステップＳ４０８で一時領域１１１２５に格納されたデータをＦＲＯＭ１１１３に書き込む際の先頭アドレスを示す。コマンド情報Ｄ１２１５は、送信するデータのサイズを示す。
【００８６】
コマンドＤ１２２は、図１０のステップＳ４０２においてＥＣＵ１１からソフト更新装置１０に送信される受諾応答であり、コマンド情報Ｄ１２２１、Ｄ１２２２、Ｄ１２２３から構成される。コマンド情報Ｄ１２２１は、コマンドＤ１２２の識別情報であり、ここにはデータ転送開始要求に対する受諾応答であることを示す識別子（ＩＤ）が設定される。コマンド情報Ｄ１２２２は、続くコマンド情報Ｄ１２２３のデータ長を示す。コマンド情報Ｄ１２２３は、ＥＣＵ１１が一度に受信可能なデータブロックのサイズを示す。本実施形態では、受信バッファ１１１２１のサイズに応じて、たとえば２５６バイトの値が受信可能なデータブロックのサイズとして設定される。
【００８７】
コマンドＤ１２３は、図７のステップＳ４０３においてソフト更新装置１０からＥＣＵ１１に送信されるデータ転送コマンドであり、コマンド情報Ｄ１２３１、Ｄ１２３２、Ｄ１２３３から構成される。コマンド情報Ｄ１２３１は、コマンドＤ１２３の識別情報であり、ここにはデータ転送コマンドであることを示す識別子（ＩＤ）が設定される。コマンド情報Ｄ１２３２は、コマンドＤ１２３の送信回数を示すカウンタ情報であり、ソフト更新装置１０からＥＣＵ１１にコマンドＤ１２３を送信するたびにその値がインクリメントされる。コマンド情報Ｄ１２３３は、ソフト更新装置１０からＥＣＵ１１に転送される差分パッチＤ６の分割データの本体である。この分割データは、上記のコマンドＤ１２２に含まれるコマンド情報Ｄ１２２３にて指定された値を上限サイズとして、ソフト更新装置１０が差分パッチＤ６を構成する１つの差分圧縮データＤ５を複数に分割することで設定される。たとえば、図９の送信データＤ９０１やＤ９０２がコマンド情報Ｄ１２３３に格納される。なお、前述のように、コマンドＤ１２３は、差分パッチＤ６を構成する１つの差分圧縮データＤ５から分割されたデータがすべて送信されるまで、ソフト更新装置１０からＥＣＵ１１へ複数回送信される。
【００８８】
コマンドＤ１２４は、図７のステップＳ４０６においてＥＣＵ１１からソフト更新装置１０に送信される受信応答であり、コマンド情報Ｄ１２４１、Ｄ１２４２から構成される。コマンド情報Ｄ１２４１は、コマンドＤ１２４の識別情報であり、ここにはデータ転送コマンドに対する受信応答であることを示す識別子（ＩＤ）が設定される。コマンド情報Ｄ１２４２は、コマンドＤ１２４の送信回数を示すカウンタ情報であり、直前にソフト更新装置１０から受信したデータ転送コマンドＤ１２３においてコマンド情報Ｄ１２３２に設定されていたのと同じ値が設定される。
【００８９】
コマンドＤ１２５は、図７のステップＳ４０７においてソフト更新装置１０からＥＣＵ１１に送信される転送完了通知であり、コマンド情報Ｄ１２５１から構成される。コマンド情報Ｄ１２５１は、コマンドＤ１２５の識別情報であり、ここには転送完了通知であることを示す識別子（ＩＤ）が設定される。
【００９０】
コマンドＤ１２６は、図７のステップＳ４１０においてＥＣＵ１１からソフト更新装置１０に送信される受信応答であり、コマンド情報Ｄ１２６１から構成される。コマンド情報Ｄ１２６１は、コマンドＤ１２６の識別情報であり、ここには転送完了通知に対する受信応答であることを示す識別子（ＩＤ）が設定される。
【００９１】
コマンドＤ１２７は、図７のステップＳ４０５またはＳ４０９においてＥＣＵ１１からソフト更新装置１０に送信される待機応答であり、コマンド情報Ｄ１２７１、Ｄ１２７２、Ｄ１２７３から構成される。コマンド情報Ｄ１２７１は、コマンドＤ１２７の識別情報であり、ここにはコマンドに対する拒否応答であることを示す識別子（ＩＤ）が設定される。コマンド情報Ｄ１２７２は、どのコマンドに対する拒否応答であるかを示す情報であり、ここには直前にソフト更新装置１０から受信したコマンドの識別情報が設定される。すなわち、本実施形態では、ステップＳ４０５で送信されるコマンドＤ１２７においては、直前にソフト更新装置１０から受信したデータ転送コマンドＤ１２３においてコマンド情報Ｄ１２３１に設定されていたのと同じ値がコマンド情報Ｄ１２７２に設定される。また、ステップＳ４０９で送信されるコマンドＤ１２７においては、直前にソフト更新装置１０から受信したデータ転送コマンドＤ１２５においてコマンド情報Ｄ１２５１に設定されていたのと同じ値がコマンド情報Ｄ１２７２に設定される。コマンド情報Ｄ１２７３はエラーコードであり、ここには待機応答であることを示すコードが設定される。
【００９２】
＜管理テーブルの構成＞
図１２は、本発明の第１の実施形態においてＥＣＵ１１のＳＲＡＭ１１１２に格納される管理テーブル１１１２２の構成を示す図である。図１２に示すように、管理テーブル１１１２２は、差分復元状態Ｔ６０と圧縮解凍状態Ｔ６１から構成される。差分復元状態Ｔ６０は、復元後サイズＴ６０１、復元済サイズＴ６０２、復元対象Ｔ６０３、出力先バッファアドレスＴ６０４、処理中データ部サイズＴ６０５、現在処理位置Ｔ６０６、途中命令Ｔ６０７、命令Ｔ６０８から構成される。圧縮解凍状態Ｔ６１は、解凍後サイズＴ６１１、解凍済サイズＴ６１２、解凍途中データＴ６１３から構成される。
【００９３】
復元後サイズＴ６０１は、差分パッチＤ６を構成する差分圧縮データＤ５から差分を復元した後の復元後のデータサイズを示す。ここには、差分パッチＤ６を構成する差分圧縮データＤ５のヘッダ部Ｄ５１における復元後サイズＤ５１２の値が格納される。
【００９４】
復元済サイズＴ６０２は、新プログラムＤ２のうち復元済みである部分のデータサイズを示す。ここには、復元処理によって復元が完了した新プログラムＤ２の部分のデータサイズを示す値が格納される。
【００９５】
復元対象Ｔ６０３は、次に処理するデータが何であるかを示す。ここには、現在の新プログラムＤ２の復元状態に応じて、「加算命令」、「挿入命令」、「移動命令」、「加算データ」、「挿入データ」のいずれかが格納される。なお、「加算命令」、「挿入命令」、「移動命令」は、図７で説明した差分パケットＤ４２の命令部Ｄ４２１に含まれる加算命令Ｄ４２１１、挿入命令Ｄ４２１２、移動命令Ｄ４２１３にそれぞれ相当し、「加算データ」、「挿入データ」は、差分パケットＤ４２のデータ部Ｄ４３２に含まれる加算データＤ４２２１、挿入データＤ４２２２にそれぞれ相当する。
【００９６】
出力先バッファアドレスＴ６０４は、受信したデータの復元先のメモリアドレスを示す。ここには、復元対象Ｔ６０３の値に応じて、復元バッファ１１１２３内のアドレスか、または、管理テーブル１１１２２の途中命令Ｔ６０７に対応するアドレスが格納される。
【００９７】
処理中データ部サイズＴ６０５は、差分データＤ４のうち現在の処理対象の差分パケットに含まれるデータ部のデータサイズを示す。
【００９８】
現在処理位置Ｔ６０６は、差分データＤ４のうち現在の処理対象の差分パケットに含まれるデータ部において復元済みの部分のデータサイズを示す。
【００９９】
途中命令Ｔ６０７は、差分データＤ４のうちＥＣＵ１１が受信済みの分割データに対応する差分パケットに含まれる命令部の一部を格納しておくための領域である。
【０１００】
命令Ｔ６０８は、差分データＤ４のうちＥＣＵ１１が受信済みの分割データに対応する差分パケットに含まれる命令部を格納しておくための領域である。
【０１０１】
解凍後サイズＴ６１１は、差分圧縮データＤ５を解凍した後のデータサイズを示す。ここには、差分データＤ４のデータサイズを示す値が格納される。
【０１０２】
解凍済サイズＴ６１２は、差分データＤ４のうち復元済みの部分のデータサイズを示す。ここには、復元処理によって解凍が完了した差分データＤ４の部分のデータサイズを示す値が格納される。
【０１０３】
解凍途中データＴ６１３は、受信済みの分割データにおいて解凍処理に必要なデータがすべて揃わなかった場合に、受信済みの分割データを一時的に格納しておくための領域である。
【０１０４】
ＥＣＵ１１は、以上説明したような管理テーブル１１１２２を用いて、分割データを受信する都度実行される復元処理において、新プログラムＤ２の復元状態を管理する。これにより、先の復元処理と後の復元処理の間で連続性を保ちつつ、復元処理を継続して行うことができる。
【０１０５】
＜復元処理の流れ＞
図１３は、本発明の第１の実施形態において、図１０のステップＳ４０４でＥＣＵ１１の復元部１１０３により実行される復元処理のフロー図である。なお、ＥＣＵ１１のデータ送受信部１１０２は、図１０のステップＳ４０３でソフト更新装置１０から送信された分割データを受信すると、受信した分割データを受信バッファ１１１２１に格納した後、分割データを受信した旨を制御部１１０１に連絡する。制御部１１０１は、データ送受信部１１０２から分割データの受信通知を受けると、復元部１１０３に復元指示を行う。復元部１１０３は、制御部１１０１から復元指示を受けると、図１３に示すフロー図に従って復元処理を開始する。
【０１０６】
最初に復元部１１０３は、ステップＳ４０４０１において、管理テーブル１１１２２から復元対象Ｔ６０３の値を読み出す。
【０１０７】
次に復元部１１０３は、ステップＳ４０４０２において、ステップＳ４０４０１で読み出した復元対象Ｔ６０３の値に基づいて、次の処理対象のデータ種別を判定する。その結果、次の処理対象が、図７で説明した差分パケットの構成要素である命令部とデータ部のうち命令部である場合は、処理をステップＳ４０４０３に進め、データ部である場合は、処理をステップＳ４０４０７に進める。
【０１０８】
ステップＳ４０４０３に進んだ場合、復元部１１０３は、ステップＳ４０４０３において、管理テーブル１１１２２の途中命令Ｔ６０７を、次の処理対象である命令部の一時的な復元先として指定する。
【０１０９】
次に復元部１１０３は、ステップＳ４０４２０において、受信した分割データの一部を解凍し、ステップＳ４０４０３で復元先に指定した管理テーブル１１１２２の途中命令Ｔ６０７に格納する。なお、この際に、図８で説明したバイナリ符号Ｄ８０７やＬＺ７７パケットＤ８０３の途中で受信した分割データが途切れていると、解凍処理に必要なデータが十分に揃わないため、その部分については解凍することができない。したがってこのような場合には、受信済みの分割データのうち、未解凍のデータを管理テーブル１１１２２の解凍途中データＴ６１３に格納し、解凍処理を保留する。そして、ステップＳ４０４２０の処理を中断し、次の分割データの受信を待つためにステップＳ４０４０５に進む。
【０１１０】
次に復元部１１０３は、ステップＳ４０４０５において、ステップＳ４０４０４の解凍結果によって命令部が完成したか否かを判定する。ここでは、管理テーブル１１１２２の途中命令Ｔ６０７に格納されたデータにより、図７で説明した命令部の構成要素である加算命令、挿入命令、移動命令のいずれかが完成した場合に、処理をステップＳ４０４０６に進める。一方、これらの命令部のいずれも完成しなかった場合は、処理をステップＳ４０４１５に進める。この場合、管理テーブル１１１２２の途中命令Ｔ６０７に格納されている値はそのまま保持される。
【０１１１】
ステップＳ４０４０６に進んだ場合、復元部１１０３は、ステップＳ４０４０６において、当該命令部のデータを管理テーブル１１１２２の命令Ｔ６０８にコピーする。すなわち、管理テーブル１１１２２の途中命令Ｔ６０７に格納されているデータを、命令Ｔ６０８に移動する。ステップＳ４０４０６を実行したら、処理をステップＳ４０４１５に進める。
【０１１２】
ステップＳ４０４０２からステップＳ４０４０７に進んだ場合、復元部１１０３は、ステップＳ４０４０７において、管理テーブル１１１２２から出力先バッファアドレスＴ６０４の値を読み出し、その値が示すアドレスに対応する復元バッファ１１１２３内のメモリ領域を、次の処理対象であるデータ部の復元先として指定する。
【０１１３】
次に復元部１１０３は、ステップＳ４０４２１において、受信した分割データの一部を解凍し、ステップＳ４０４０７で復元先に指定した復元バッファ１１１２３内のメモリ領域に格納する。なお、この際に、図８で説明したバイナリ符号Ｄ８０７やＬＺ７７パケットＤ８０３の途中で受信した分割データが途切れていると、解凍処理に必要なデータが十分に揃わないため、その部分については解凍することができない。したがってこのような場合には、前述のステップＳ４０４２０と同様に、受信済みの分割データのうち、未解凍のデータを管理テーブル１１１２２の解凍途中データＴ６１３に格納し、解凍処理を保留する。そして、ステップＳ４０４２１の処理を中断し、次の分割データの受信を待つためにステップＳ４０４２２に進む。
【０１１４】
次に復元部１１０３は、ステップＳ４０４２２において、ステップＳ４０４２１で分割データの一部を解凍して得られたデータ部の種別を判定する。その結果、データ部の種別が、図７で説明したデータ部の構成要素のうち挿入データである場合は、処理をステップＳ４０４１１に進め、加算データである場合は、処理をステップＳ４０４２３に進める。
【０１１５】
ステップＳ４０４２３に進んだ場合、復元部１１０３は、ステップＳ４０４２３において、ステップＳ４０４２１で解凍されて復元バッファ１１１２３に格納されたデータ部の値に、旧プログラムＤ１のうち対応する部分の値を加算する加算処理を行う。この加算処理によって得られたデータが新プログラムＤ２の一部とされる。ステップＳ４０４２３を実行したら、処理をステップＳ４０４１１に進める。
【０１１６】
ステップＳ４０４２２またはＳ４０４２３からステップＳ４０４１１に進んだ場合、復元部１１０３は、ステップＳ４０４１１において、旧プログラムＤ１の読み出し位置を示すポインタを移動させる。ここでは、管理テーブル１１１２２の命令Ｔ６０８に格納されている移動命令が示す移動量分だけ、次に旧プログラムＤ１を読み出す際の読み出し位置を移動させる。これにより、ステップＳ４０４２２からステップＳ４０４１１に進んだ場合には、後で説明するステップＳ４０４１４において、受信した分割データに含まれる挿入データが旧プログラムＤ１に挿入される。また、ステップＳ４０４２３からステップＳ４０４１１に進んだ場合には、ステップＳ４０４１４において、ステップＳ４０４２３の加算処理で得られた加算後のデータが旧プログラムＤ１の一部と置き換えられる。
【０１１７】
次に復元部１１０３は、ステップＳ４０４１２において、ステップＳ４０４２１で解凍されて復元バッファ１１１２３に格納されたデータのサイズが所定の規定値に到達したか否かを判定する。その結果、復元バッファ１１１２３のデータサイズが規定値以上である場合は、その旨を制御部１１０１に通知して処理をステップＳ４０４１３に進め、規定値未満である場合は、処理をステップＳ４０４１５に進める。
【０１１８】
復元部１１０３から通知を受けると、制御部１１０１は、ステップＳ４０４１３において、データ送受信部１１０２を介して、ソフト更新装置１０に待機応答を送信する。また、Ｆｌａｓｈ書き込み制御部１１０４にデータ書込み指示を行う。
【０１１９】
制御部１１０１からデータ書込み指示を受けると、Ｆｌａｓｈ書き込み制御部１１０４は、ステップＳ４０４１４において、復元バッファ１１１２３に格納されているデータを、ＦＲＯＭ１１１３の一時領域１１１２５に格納する。ステップＳ４０４１４の処理が実行された後に、復元部１１０３は処理をステップＳ４０４０１に戻し、受信した分割データに対する復元処理を継続する。
【０１２０】
ステップＳ４０４０５、Ｓ４０４０６またはＳ４０４１２からステップＳ４０４１５に進むと、復元部１１０３は、ステップＳ４０４１５において、管理テーブル１１１２２を更新する。ここでは、これまでの処理結果に応じて、復元済サイズＴ６０２と現在処理位置Ｔ６０６のカウントアップや、出力先バッファアドレスＴ６０４の更新や、復元対象Ｔ６０３の更新などを行う。
【０１２１】
次に復元部１１０３は、ステップＳ４０４１６において、処理済みのデータが受信した分割データの終端に到達したか否かを判定する。その結果、まだ分割データの終端に到達していない場合には、次に処理すべきデータがまだ残っていると判断し、処理をステップＳ４０４０１に戻して図１３の復元処理を継続する。一方、分割データの終端に到達した場合、すなわち受信した分割データを全て処理済みである場合には、復元部１１０３は、制御部１１０１にその旨を通知する。この通知を復元部１１０３から受け取ると、制御部１１０１は復元部１１０３に対して、復元処理を終了し、次の分割データが受信されるまで待機するように指示する。
【０１２２】
図１４は、以上説明した本発明の第１の実施形態による復元処理におけるデータの流れの概要を示す図である。
【０１２３】
ＥＣＵ１１において分割データＤ１４０１が受信されて受信バッファ１１１２１に蓄積されると、この分割データＤ１４０１がエントロピー復号で解凍されることにより、ＩＤ（パケット種別）Ｄ１４１２とデータＤ１４１３からそれぞれ構成される複数のＬＺ７７パケットＤ１４１１が復元される。このとき、分割データＤ１４０１に含まれる複数のバイナリ符号Ｄ１４０４から、ＬＺ７７パケットＤ１４１１が復元される。なお、受信バッファ１１１２１に格納された分割データＤ１４０１の終端がバイナリ符号の途中で途切れており、その途中までのデータＤ１４０５と他のバイナリ符号Ｄ１４０４からＬＺ７７パケットＤ１４１１を復元できない場合には、これらのデータが管理テーブル１１１２２の解凍途中データＴ６１３に格納され、次の分割データを受信するまで解凍処理が保留される。
【０１２４】
さらに、複数のＬＺ７７パケットＤ１４１１が解凍されることにより、命令部Ｄ１４２１、加算データＤ１４２２、挿入データＤ１４２３から構成される差分データが復元される。この差分データは、ＳＲＡＭ１１１２の辞書領域１１１２４に格納される。
【０１２５】
辞書領域１１１２４に格納された差分データのうち、命令部Ｄ１４２１は、管理テーブル１１１２２の命令Ｔ６０８に格納される。この命令Ｔ６０８に格納された命令部Ｄ１４２１の内容に基づき、加算データＤ１４２２については、旧プログラムＤ１の一部と加算された後、復元バッファ１１１２３に新プログラムＤ２の一部として格納される。また、挿入データＤ１４２３については、そのまま復元バッファ１１１２３に新プログラムＤ２の一部として格納される。なお、辞書領域１１１２４に格納された差分データの終端が命令部の途中で途切れている場合、すなわち受信バッファ１１１２１に格納された分割データＤ１４０１の終端が差分データの命令部に対応しており、そのため分割データＤ１４０１において命令部とそれに対応するデータ部の少なくとも一部とが揃わない場合には、その途中までのデータＤ１４２４が管理テーブル１１１２２の途中命令Ｔ６０７に格納され、次の分割データを受信するまで復元処理が保留される。
【０１２６】
以上説明したように、復元処理の途中の状態において、復元処理を継続するために必要な情報を管理テーブル１１１２２に格納することで、受信した分割データを順次復元することができる。その結果、差分パッチＤ６を受信するのに十分なメモリ領域を受信バッファ１１１２１として確保できない場合にも、差分更新によるプログラム更新が可能なＥＣＵを提供することができる。
【０１２７】
以上説明した本発明の第１の実施形態によれば、以下の作用効果を奏する。
【０１２８】
（１）旧プログラムＤ１を新プログラムＤ２に更新可能な車両用電子制御装置であるＥＣＵ１１は、旧プログラムＤ１を記憶するＦＲＯＭ１１１３と、差分データＤ４を圧縮した差分圧縮データＤ５を所定のデータ長ごとに分割してなる複数の分割データを順次受信するデータ送受信部１１０２と、データ送受信部１１０２により受信された各分割データおよび旧プログラムＤ１に基づいて新プログラムＤ２を復元するための復元処理を実行する復元部１１０３とを備える。差分データＤ４は、図７に示すように、旧プログラムＤ１と新プログラムＤ２との差分に基づくデータ部と、データ部を旧プログラムＤ１に反映して新プログラムＤ２を生成するための命令部とを含む。復元部１１０３は、データ送受信部１１０２により受信された分割データにおいて命令部とデータ部の少なくとも一部とが揃わない場合（ステップＳ４０４０５：Ｎｏ）に、ステップＳ４０４１５、Ｓ４０４１６の処理を実行してから図１３に示すフロー図を終了することで、復元処理を保留して次の分割データの受信を待つ。このようにしたので、車両用電子制御装置のプログラム更新において差分更新を適用することができる。
【０１２９】
（２）差分データＤ４には、互いに対応する命令部Ｄ４２１，Ｄ４３１，Ｄ４４１とデータ部Ｄ４２２，Ｄ４３２，Ｄ４４２とをそれぞれ組み合わせた複数の差分パケットＤ４２，Ｄ４３，Ｄ４４が配列されている。これらの差分パケットＤ４２，Ｄ４３，Ｄ４４には、図７に示すように、互いに対応する命令部Ｄ４２１，Ｄ４３１，Ｄ４４１とデータ部Ｄ４２２，Ｄ４３２，Ｄ４４２とが、命令部Ｄ４２１，Ｄ４３１，Ｄ４４１からデータ部Ｄ４２２，Ｄ４３２，Ｄ４４２の順にそれぞれ配列されている。復元部１１０３は、データ送受信部１１０２により受信された分割データの終端が命令部Ｄ４２１，Ｄ４３１，Ｄ４４１のいずれかに対応する場合に、図１３のステップＳ４０４０５を否定判定することで、復元処理を保留して次の分割データの受信を待つ。このようにしたので、分割データにおいて命令部とデータ部の少なくとも一部とが揃わない場合を確実に判断し、復元処理を保留して次の分割データの受信を待つことができる。
【０１３０】
（３）復元部１１０３は、データ送受信部１１０２により受信された分割データの終端がデータ部に対応する場合に、図１３のステップＳ４０４０７〜Ｓ４０４１１において、当該データ部に対応する命令部の内容に基づいて復元処理を実行する。このようにしたので、分割データにおいて命令部とデータ部の少なくとも一部とが揃った場合に、これらのデータを用いて復元処理を確実に行うことができる。
【０１３１】
（４）図９に示すように、ＥＣＵ１１が受信する分割データは、差分圧縮データＤ５を所定のデータ長ごとに分割した固定長の送信データＤ９０１やＤ９０２である。復元部１１０３は、データ送受信部１１０２により受信された分割データに基づいて差分圧縮データＤ５の一部を差分データＤ４の一部に戻すための解凍処理を、図１３の復元処理においてステップＳ４０４２０、Ｓ４０４２１で実行する。このとき復元部１１０３は、データ送受信部１１０２により受信された分割データにおいて解凍処理に必要なデータが揃わない場合に、ステップＳ４０４２０、Ｓ４０４２１の処理を中断して次の処理に進むことで、解凍処理を保留して次の分割データの受信を待つ。このようにしたので、分割データを解凍できない場合には、次の分割データの受信を待って解凍処理を継続することができる。
【０１３２】
（５）復元部１１０３は、データ送受信部１１０２により受信された分割データにおける命令部の内容に基づき、データ部をそのまま新プログラムＤ２の一部とする挿入処理（ステップＳ４０４２２で処理対象のデータ種別が挿入データと判定された場合）と、データ部と旧プログラムＤ１の一部とを加算して新プログラムＤ２の一部とするステップＳ４０４２３の加算処理（ステップＳ４０４２２で処理対象のデータ種別が加算データと判定された場合）と、のいずれか少なくとも一つを、図１３の復元処理において実行する。このようにしたので、受信した分割データにおけるデータ部の内容を旧プログラムＤ１に正しく反映して、新プログラムＤ２を生成することができる。
【０１３３】
（６）ＥＣＵ１１において、Ｆｌａｓｈ書き込み制御部１１０４は、復元処理によって部分的に復元された新プログラムＤ２のデータサイズが所定値に達した場合（ステップＳ４０４１２：Ｙｅｓ）に、新プログラムＤ２の当該部分を、ＦＲＯＭ１１１３において旧プログラムＤ１が記憶されているのとは別の記憶領域である一時領域１１１２５に書き込む（ステップＳ４０４１４）。このようにしたので、復元処理において復元された新プログラムＤ２を部分的に格納しておく復元バッファ１１１２３のメモリ容量が小さくても、新プログラムＤ２の全体を復元することができる。
【０１３４】
（７）また、ＥＣＵ１１において、制御部１１０１は、Ｆｌａｓｈ書き込み制御部１１０４が新プログラムＤ２を一時領域１１１２５に書き込む前に、分割データの送信を待機させるための待機応答を、分割データの送信元であるソフト更新装置１０に送信する（ステップＳ４０４１３）。このようにしたので、一時領域１１１２５へのデータ書込み中に分割データが送信されてしまい、それによって分割データが正常に受信できなくなることを防止できる。
【０１３５】
−第２の実施形態−
次の本発明の第２の実施形態について説明する。前述の第１の実施形態では、差分データＤ４を圧縮した差分圧縮データＤ５により差分パッチＤ６を生成し、ＥＣＵ１１のプログラムを更新する例を示した。これに対して、以下に説明する第２の実施形態では、差分データＤ４を圧縮せずに差分パッチＤ６を生成し、ＥＣＵ１１のプログラムを更新する場合の例を示す。
【０１３６】
図１５は、本発明の第２の実施形態における分割データおよび管理テーブル１１１２２の構成例を示す図である。本実施形態では、図１５に示すように、差分パケットＤ４５、Ｄ４６、Ｄ４７等から構成される差分データＤ４が２５６バイトごとに分割され、固定長の送信データＤ１５０１やＤ１５０２として、ソフト更新装置１０からＥＣＵ１１に送信される。
【０１３７】
差分パケットＤ４５、Ｄ４７は、それぞれ命令部（挿入命令）Ｄ４５１、Ｄ４７１とデータ部（挿入データ）Ｄ４５２、Ｄ４７２から構成される。また、差分パケットＤ４６は、命令部（コピー命令）Ｄ４６１から構成され、データ部は含まない。このように、命令部とそれに続くデータ部からそれぞれ構成される複数の差分パケットを連結して差分データＤ４を構成し、これを複数に分割してソフト更新装置１０からＥＣＵ１１に順次送信する。これにより、ＥＣＵ１１において差分データＤ４をすべて受信しなくても、分割データを受信した都度、順次に復元処理を行うことができる。そのため、省メモリで復元処理を行うことができる。
【０１３８】
また、本実施形態では、差分データＤ４において、第１の実施形態で説明した加算命令を利用せず、挿入命令にのみデータ部を付加し、旧プログラムＤ１の情報を利用する部分はコピー命令としている。これにより、差分データＤ４の圧縮を行わなくても、ソフト更新装置１０からＥＣＵ１１に送信するデータ量を削減することができる。
【０１３９】
なお、図１５に示すように、本実施形態における差分データＤ４を圧縮しない場合の管理テーブル１１１２２は、圧縮解凍に関するデータ管理のための圧縮解凍状態Ｔ６１を有していない以外は、図１２に示した第１の実施形態の管理テーブルと同様である。
【０１４０】
図１６は、本発明の第２の実施形態において、図１０のステップＳ４０４でＥＣＵ１１の復元部１１０３により実行される復元処理のフロー図である。なお、図１６のフロー図において、図１３に示した第１の実施形態と同じ処理を行う部分については、図１３と同じステップ番号としている。この図１３と同一ステップ番号の処理については、特に必要のない限り、以下では説明を省略する。
【０１４１】
ステップＳ４０４０３の処理を実行した後、復元部１１０３は、ステップＳ４０４５０において、受信した分割データの一部をコピーし、ステップＳ４０４０３で復元先に指定した管理テーブル１１１２２の途中命令Ｔ６０７に格納する。ステップＳ４０４５０の処理を実行したら、ステップＳ４０４０５に進む。
【０１４２】
ステップＳ４０４０６の処理を実行した後、復元部１１０３は、ステップＳ４０４５２において、ステップＳ４０４０６で管理テーブル１１１２２の命令Ｔ６０８にコピーした命令部の種別を判定する。その結果、命令部の種別が挿入命令である場合は、処理をステップＳ４０４１５に進める。この場合、管理テーブル１１１２２の途中命令Ｔ６０７に格納されている値はそのまま保持される。一方、命令部の種別がコピー命令である場合は、処理をステップＳ４０４５３に進める。
【０１４３】
ステップＳ４０４５３に進んだ場合、復元部１１０３は、ステップＳ４０４５３において、当該コピー命令で指定された旧プログラムＤ１の部分を、復元バッファ１１１２３にコピーする。ステップＳ４０４５３の処理を実行したら、ステップＳ４０４１２に進む。
【０１４４】
ステップＳ４０４０７の処理を実行した後、復元部１１０３は、ステップＳ４０４５４において、ステップＳ４０４０７で復元先に指定した復元バッファ１１１２３内のメモリ領域に、受信した分割データの一部をコピーする。ステップＳ４０４５４の処理を実行したら、ステップＳ４０４１２に進む。
【０１４５】
ステップＳ４０４１４の処理を実行した後、復元部１１０３は、ステップＳ４０４５５において、管理テーブル１１１２２の命令Ｔ６０８を参照することで、復元中の命令部の種別を判定する。その結果、復元中の命令部の種別がコピー命令である場合はステップＳ４０４５３に戻り、挿入命令である場合はステップＳ４０４５４に戻る。
【０１４６】
図１７は、以上説明した本発明の第２の実施形態による復元処理におけるデータの流れの概要を示す図である。
【０１４７】
ＥＣＵ１１において分割データＤ１７０１が受信されて受信バッファ１１１２１に蓄積されることで、この分割データＤ１７０１に含まれる命令部Ｄ１７０１１、Ｄ１７０１２と、データ部Ｄ１７０１３と、命令部が途中で途切れたデータＤ１７０１４とが、受信バッファ１１１２１に格納される。なお、命令部Ｄ１７０１１はコピー命令であり、命令部Ｄ１７０１２は挿入命令である。
【０１４８】
受信バッファ１１１２１に格納された分割データＤ１７０１において、処理対象が命令部Ｄ１７０１１、Ｄ１７０１２またはデータＤ１７０１４の場合は、これらの内容が管理テーブル１１１２２の途中命令Ｔ６０７に順次コピーされる。途中命令Ｔ６０７において命令が完成すると、その内容が管理テーブル１１１２２の命令部Ｔ６０８に格納される。一方、処理対象がデータ部Ｄ１７０１３の場合は、管理テーブル１１１２２の命令部Ｔ６０８に格納された命令部Ｄ１７０１２の内容に基づき、復元バッファ１１１２３にデータ部Ｄ１７０１３がコピーされる。また、管理テーブル１１１２２の命令部Ｔ６０８に命令部Ｄ１７０１１が格納された場合は、その内容に基づき、指定された旧プログラムＤ１の部分が復元バッファ１１１２３にコピーされる。
【０１４９】
以上説明したように、本実施形態においても、復元処理の途中の状態において、復元処理を継続するために必要な情報を管理テーブル１１１２２に格納することで、受信した分割データを順次復元することができる。その結果、差分パッチＤ６を受信するのに十分なメモリ領域を受信バッファ１１１２１として確保できない場合にも、差分更新によるプログラム更新が可能なＥＣＵを提供することができる。
【０１５０】
以上説明した本発明の第２の実施形態によれば、ＥＣＵ１１のデータ送受信部１１０２は、差分データＤ４を所定のデータ長ごとに分割してなる複数の分割データを順次受信する。復元部１１０３は、データ送受信部１１０２により受信された分割データにおいて命令部とデータ部の少なくとも一部とが揃わない場合（ステップＳ４０４０５：Ｎｏ）に、ステップＳ４０４１５、Ｓ４０４１６の処理を実行してから図１６に示すフロー図を終了することで、復元処理を保留して次の分割データの受信を待つ。このようにしたので、第１の実施形態と同様に、車両用電子制御装置のプログラム更新において差分更新を適用することができる。
【０１５１】
なお、以上説明した本発明の第２の実施形態では、図１５に示したような構成の分割データをソフト更新装置１０からＥＣＵ１１に送信することとしたが、第１の実施形態で説明した図７のような構成の分割データを複数に分割し、ソフト更新装置１０からＥＣＵ１１に送信してもよい。この場合、図１６に示した復元処理のフロー図において、ステップＳ４０４５３やＳ４０４５４の代わりに、図１３のステップＳ４０４２３の処理を実行すればよい。
【０１５２】
以上説明した実施形態はあくまで一例であり、発明の特徴が損なわれない限り、本発明はこれらの内容に限定されるものではない。また、上記では種々の実施形態を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【符号の説明】
【０１５３】
１：車両、２：サーバ、３：インターネット、４：アクセスネットワーク、１０：ソフト更新装置、１１，１２，１３：ＥＣＵ、１４：車内ネットワーク、１１０１：制御部、１１０２：データ送受信部、１１０３：復元部、１１０４：Ｆｌａｓｈ書き込み制御部
【図１】
0006609508.tif 000002
【図２】
0006609508.tif 000003
【図３】
0006609508.tif 000004
【図４】
0006609508.tif 000005
【図５】
0006609508.tif 000006
【図６】
0006609508.tif 000007
【図７】
0006609508.tif 000008
【図８】
0006609508.tif 000009
【図９】
0006609508.tif 000010
【図１０】
0006609508.tif 000011
【図１１】
0006609508.tif 000012
【図１２】
0006609508.tif 000013
【図１３】
0006609508.tif 000014
【図１４】
0006609508.tif 000015
【図１５】
0006609508.tif 000016
【図１６】
0006609508.tif 000017
【図１７】
0006609508.tif 000018