(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0009】
−第1の実施形態−
以下、本発明の第1の実施形態について、図面を参照して説明する。なお、本発明は、以下で説明する実施形態に限定されるものではない。また、以下の実施形態では、本発明を車両用ECUのプログラム更新に適用した場合について説明する。しかし、本発明は、各種パラメータやデータなど、ECUにおいて用いられるプログラム以外の制御情報全般の更新に適用可能である。また、車両用ECU以外の電子制御装置におけるプログラムや制御情報の更新にも適用可能である。
【0010】
<システム構成>
図1は、本発明の一実施形態に係るソフトウェア更新システムの構成例を示すブロック図である。
図1に示すように、本実施形態のソフトウェア更新システムは、車両1に搭載されたソフト更新装置10およびECU11、12、13と、インターネット3およびアクセスネットワーク4を介してソフト更新装置10と接続されたサーバ2から構成される。アクセスネットワーク4は、通信サービスプロバイダが提供する無線通信網であり、ソフト更新装置10がインターネット3に接続するために利用される。
【0011】
車両1において、ソフト更新装置10と、ECU11、12、13とは、車内ネットワーク14によって互いに接続されている。車内ネットワーク14は、車両1内に設けられた通信網であり、たとえばCAN(Controller Area Network)(登録商標)、LIN(Local Interconnect Network)、FlexRay、Ethernet(登録商標)などで構成される。以下では、車内ネットワーク14はCANで構成されるものとして説明するが、他の通信形式の場合でも同様である。
【0012】
ソフト更新装置10は、インターネット3およびアクセスネットワーク4を介してサーバ2と接続され、ECU11、12、13のプログラム更新に必要なデータである差分パッチD6をサーバ2からダウンロードする。ソフト更新装置10は、ECU11、12、13のうちプログラムの更新対象に指定されたECUに対して、サーバ2からダウンロードした差分パッチD6を、車内ネットワーク14を介して送信する。また、ソフト更新装置10は、自身のプログラム更新に必要なデータをサーバ2からダウンロードし、そのデータを用いて自身のプログラム更新を行うこともできる。
【0013】
ECU11、12、13は、車両1に搭載された各種車載機器に対応してそれぞれ設けられており、車両1が走行等の機能を実現するために必要な制御をそれぞれ行う。なお、
図1ではECU11、12、13のみを図示しているが、車両1には他にも多数のECUが搭載されている。しかし、以下では説明を分かりやすくするため、ECU11、12、13を代表例として説明を行う。また、
図1では図示していないが、ソフト更新装置10やECU11、12、13などの車両1内の各構成要素は、電力線で蓄電池にそれぞれ接続されており、蓄電池から電力供給を受けているものとする。
【0014】
図1に構成を示した本実施形態のソフトウェア更新システムでは、ECU11、12、13のプログラム更新に必要な差分パッチD6がサーバ2からソフト更新装置10経由でECU11、12、13にそれぞれ配布される。この差分パッチD6に基づいて、後で説明するような処理をECU11、12、13においてそれぞれ実行することで、新たなプログラムがECU11、12、13に適用される。
【0015】
なお、本実施形態では、インターネット3やアクセスネットワーク4のネットワークプロトコルとして、たとえばIP(Internet Protocol)を使用することができる。また、上位のトランスポートプロトコルには、たとえばUDP(User Datagram Protocol)や、TCP(Transmission Control Protocol)を用いることができる。なお、IPにはバージョンの違いとしてIPv4とIPv6が有るが、本実施形態ではそのどちらを使用してもよい。
【0016】
<ソフト更新装置の構成>
図2は、ソフト更新装置10のハードウェア構成例およびソフトウェア構成例を示すブロック図である。
図2(a)のハードウェアブロック図は、ソフト更新装置10のハードウェア構成例を示している。
図2(a)に示すように、ソフト更新装置10は、マイコン101、通信装置(CAN)102、通信装置(WAN:Wide Area Network)103、FROM104を備える。
【0017】
マイコン101は、CPU(Central Processing Unit)1011、SRAM1012、FROM1013を備える。CPU1011は、SRAM1012を作業領域に用いて、FROM1013に格納された制御プログラムを実行することで、ソフト更新装置10を機能させる。CPU1011は、たとえば、ソフト更新装置10内の他の構成要素の制御を行ったり、通信装置(CAN)102に対して、車内ネットワーク14を介してソフト更新装置10と接続された他の機器とのデータ送受信指示を行ったり、通信装置(WAN)103に対して、インターネット3およびアクセスネットワーク4を介してソフト更新装置10と接続されたサーバ2とのデータ送受信指示を行ったりする。FROM1013は、制御プログラムや必要なパラメータなど、ソフト更新装置10を動作させるための制御情報を格納する。SRAM1012は、CPU1011の演算処理に応じて、制御プログラムの一部や制御プログラムの動作に必要なデータなどを一時的に格納する。
【0018】
FROM104は、不揮発性メモリ(ROM:Read Only Memory)で構成され、サーバ2から配布された差分パッチD6や、ソフト更新装置10の新プログラムを格納する。また、FROM104は、マイコン101の指示に従い、たとえばソフト更新装置10に接続された装置の情報などのデータを保持する。
【0019】
通信装置(WAN)103は、マイコン101の指示により、インターネット3およびアクセスネットワーク4を介して接続されたサーバ2との間でデータの送受信を行う。通信装置(WAN)103は、たとえばEthernetなどの有線通信部、または3G、WiMAX(登録商標)、LTE(Long Term Evolution)などの無線通信部により構成される。
【0020】
通信装置(CAN)102は、マイコン101の指示により、車内ネットワーク14を介して接続されたECU11、12、13との間でデータの送受信を行う。
【0021】
図2(b)のソフトウェアブロック図は、ソフト更新装置10上で動作する制御プログラム100の構成例を示している。ソフト更新装置10の機能を実現するための制御プログラム100は、
図2(a)のFROM1013上または、SRAM1012に展開されてCPU1011で実行されるものであり、
図2(b)に示すように、更新制御部1001、データ送受信部(CAN)1002、データ送受信部(WAN)1003により構成される。また、FROM104には、差分パッチD6が保持されている。なお、
図2(b)の例では、制御プログラム100をその機能に応じて、更新制御部1001、データ送受信部(CAN)1002、データ送受信部(WAN)1003のブロックに分割しているが、これらの各ブロックをさらに分割したり、いずれか2つ以上のブロックを統合したりしてもよい。また、制御プログラム100は、1つのプログラムで実現する必要はなく、2つ以上のプログラムの組合せによって実現してもよい。
【0022】
更新制御部1001は、データ送受信部(WAN)1003を介して、サーバ2から差分パッチD6を取得したり、車両1の状態やECU11、12、13におけるソフト更新処理の状況をサーバ2に送信したりする。また、データ送受信部(CAN)1002を介して、車両1に搭載されたソフト更新装置10以外の構成要素の状態を取得し、その状態に応じてソフト更新装置10のソフト更新処理を実施する。さらに、サーバ2から配布された差分パッチD6を所定のデータ長ごとに分割することで、ECU11、12、13のうち更新対象とするECUのプログラムを更新するための分割データを生成し、その分割データを当該ECUに順次送信する。その後、更新対象のECUにおいてプログラムの更新が終了したら、更新後の状態確認を行う。
【0023】
データ送受信部(WAN)1003は、更新制御部1001からの指示に従って、通信装置(WAN)103を操作し、アクセスネットワーク4とインターネット3を介して、サーバ2とデータ送受信を行う。なお、データ送受信部(WAN)1003は、TCP/IPまたはUDP/IPなどのパケットを解析・構成する機能を有してもよい。
【0024】
通信装置(CAN)102は、更新制御部1001からの指示に従って、通信装置(CAN)102を操作し、車内ネットワーク14を介して、車両1に搭載されたソフト更新装置10以外の機器との間でデータ送受信を行う。
【0025】
<ECUの構成>
図3は、ECU11のハードウェア構成例およびソフトウェア構成例を示すブロック図である。
図3(a)のハードウェアブロック図は、ECU11のハードウェア構成例を示している。
図3(a)に示すように、ECU11は、マイコン111、通信装置(CAN)112を備え、センサ113、アクチュエータ114と接続されている。なお、
図3(a)ではECU11のハードウェアブロック図を示しているが、ECU12、13も同様の構成を有している。
【0026】
マイコン111は、CPU1111、SRAM1112、FROM1113を備える。CPU1111は、SRAM1112を作業領域に用いて、FROM1113に格納された制御プログラムを実行することで、ECU11を動作させ、車両1の機能の一部を実現する。CPU1111は、たとえば、センサ113の読み出しやアクチュエータ114の操作を行ったり、通信装置(CAN)112を介して車内ネットワーク14で接続された他の機器とのデータ送受信を行ったりする。
【0027】
センサ113は、マイコン111の指示によって車両1の制御に必要となるデータを取得する。アクチュエータ114は、マイコン111の指示によって車両1の制御に必要な構成要素、たとえばブレーキなどを駆動する。
【0028】
なお、SRAM1112、FROM1113、通信装置(CAN)112の機能は、ソフト更新装置10のSRAM1012、FROM1013、通信装置(CAN)102とそれぞれ同様であるため、説明を省略する。
【0029】
図3(b)のソフトウェアブロック図は、ECU11上で動作する制御プログラム110の構成例を示している。ECU11の機能を実現するための制御プログラム110は、
図3(a)のFROM1013上または、SRAM1112に展開されてCPU1111で実行されるものであり、
図3(b)に示すように、制御部1101、データ送受信部1102、復元部1103、Flash書き込み制御部1104により構成される。また、SRAM1112には、受信バッファ11121、復元バッファ11123、管理テーブル11122、辞書領域11124が保持されている。制御プログラム110は、ソフト更新装置10から受信して受信バッファ11121に記憶されている差分パッチD6の分割データに基づいて、FROM1113に保持されている旧プログラムD1を新プログラムD2に書き換える。このプログラムの書き換えに際しては、Flash書き込み制御部1104により、FROM1113において旧プログラムD1が記憶されているのとは別の記憶領域である一時領域11125が利用される。なお、
図3(b)の例では、制御プログラム110をその機能に応じて、制御部1101、データ送受信部1102、復元部1103、Flash書き込み制御部1104のブロックに分割しているが、これらの各ブロックをさらに分割したり、いずれか2つ以上のブロックを統合したりしてもよい。また、制御プログラム110は、1つのプログラムで実現する必要はなく、2つ以上のプログラムの組合せによって実現してもよい。
【0030】
制御部1101は、センサ113からの読み出しや、アクチュエータ114の操作を行う。また、通信装置(CAN)112を介して、車内ネットワーク14で接続されたECU11以外の機器とのデータ送受信を行う。これにより、ECU11を動作させ、車両1で必要な機能の一部を実現する。さらに、制御部1101は、データ送受信部1102、復元部1103、Flash書き込み制御部1104をそれぞれ制御して、旧プログラムD1を新プログラムD2に更新する。
【0031】
データ送受信部1102は、制御部1101からの指示に従って、通信装置(CAN)112を操作し、車内ネットワーク14を介して、ECU11以外の他の機器との間でデータ送受信を行う。
【0032】
復元部1103は、ソフト更新装置10から受信して受信バッファ11121に格納された差分パッチD6の分割データと、FROM1113に保持された旧プログラムD1とに基づき、新プログラムD2の一部を復元して復元バッファ11123に格納する。
【0033】
Flash書き込み制御部1104は、制御部1101からの指示に従って、FROM1113に記憶されたデータの消去や、FROM1113へのデータ書き込みを行う。旧プログラムD1を新プログラムD2に更新する際に、Flash書き込み制御部1104は、復元バッファ11123に格納されているデータをFROM1113の一時領域11125にコピーする。
【0034】
<サーバの構成>
図4は、サーバ2のハードウェア構成例およびソフトウェア構成例を示すブロック図である。
図4(a)のハードウェアブロック図は、サーバ2のハードウェア構成例を示している。
図4(a)に示すように、サーバ2は、CPU201、記憶部202、通信部203、表示部204、入力部205を備える。
【0035】
CPU201は、記憶部202に蓄積されたサーバ用プログラムを実行することで、差分パッチD6の生成や配信の制御を行う。
【0036】
記憶部202は、差分パッチD6の生成に用いられる旧プログラムD1および新プログラムD2や、生成された差分パッチD6を蓄積する。
【0037】
通信部203は、CPU201からの指示に従って、インターネット3およびアクセスネットワーク4を介して、車両1に搭載されたソフト更新装置10との間でデータの送受信を行う。
【0038】
表示部204は、CPU201からの指示に従って、サーバ2を操作するオペレータに必要な情報を表示する。たとえば、差分パッチD6の生成や配信に関する情報を表示することで、これらの情報をサーバ2のオペレータに提供する。
【0039】
入力部205は、サーバ2を操作するオペレータからの入力操作を受け付け、その入力操作に応じた入力情報をCPU201に出力する。
【0040】
図4(b)のソフトウェアブロック図は、サーバ2上で動作するサーバ用プログラム200の構成例を示している。サーバ2の機能を実現するためのサーバ用プログラム202は、
図4(a)のCPU201で実行されるものであり、
図4(b)に示すように、差分生成部2001、データ配信部2002により構成される。なお、
図4(b)の例では、サーバ用プログラム202をその機能に応じて、差分生成部2001、データ配信部2002のブロックに分割しているが、これらの各ブロックをさらに分割したり、これらのブロックを統合したりしてもよい。また、サーバ用プログラム202は、1つのプログラムで実現する必要はなく、2つ以上のプログラムの組合せによって実現してもよい。
【0041】
差分生成部2001は、記憶部202に格納された旧プログラムD1と新プログラムD2から、差分パッチD6を生成する。
【0042】
データ配信部2002は、通信部203を操作し、インターネット3およびアクセスネットワーク4を介して、記憶部202に格納された差分パッチD6を、車両1に搭載されたソフト更新装置10に配信する。
【0043】
なお、以上説明したサーバ2の構成は、1台のサーバで実現してもよいし、複数台のサーバを連携して実現してもよい。
【0044】
<プログラム更新の流れ>
図5は、本発明の一実施形態に係るソフトウェア更新システムにおけるプログラム更新の流れを示すシーケンス図である。本実施形態のソフトウェア更新システムでは、
図1のECU11、12、13のいずれかをプログラムの更新対象として、
図5のシーケンス図に示す流れに従ってプログラム更新を行う。なお、以下ではECU11がプログラムの更新対象である場合の例を説明するが、ECU12、13がプログラムの更新対象である場合も同様である。
【0045】
最初に、サーバ2は、ステップS100において、旧プログラムD1と新プログラムD2から車両1に配信する差分パッチD6を生成するための差分生成処理を行う。この差分生成処理の詳細については、後で
図7を参照して説明する。
【0046】
次に、ソフト更新装置10は、ステップS200において、ステップS100で生成された差分パッチD6をサーバ2からダウンロードするためのダウンロード処理を行う。このダウンロード処理は、たとえば車両1のエンジン起動時などに行われる。ダウンロード処理では、差分パッチD6がサーバ2からソフト更新装置10に送信されることにより、差分パッチD6がダウンロードされる。ダウンロードされた差分パッチD6は、ソフト更新装置10のFROM104に保持される。
【0047】
その後、ソフト更新装置10とECU11は、ステップS300において、前処理を行う。この前処理は、車両1のエンジンが動作状態から停止状態に遷移したときなどに行われる。前処理では、たとえばECU11における旧プログラムD1のバージョンチェックや、ECU11の異常診断等を行う。
【0048】
続いて、ソフト更新装置10とECU11は、ステップS400において、ステップS200でダウンロードした差分パッチD6を用いて、ECU11の旧プログラムD1を新プログラムD2に更新するためのソフト更新処理を行う。このソフト更新処理では、ソフト更新装置10において差分パッチD6はブロック毎の差分圧縮データD5に分解され、差分圧縮データD5が所定のデータサイズごとに分割されて、各分割データがソフト更新装置10からECU11に順次送信される。ECU11は、ソフト更新装置10から送信された各分割データを順次受信し、その分割データに基づいて旧プログラムD1を新プログラムD2に更新する。なお、ステップS400で行われるソフト更新処理の詳細については、後で
図11を参照して説明する。
【0049】
最後に、ソフト更新装置10とECU11は、ステップS500において、後処理を行う。後処理では、たとえばステップS400のソフト更新処理が正常に完了したか否かの確認や、ソフト更新処理で使用されたフラグの消去等を行う。
【0050】
以上説明したステップS100〜S500の処理を実施することで、本実施形態のプログラム更新が完了する。なお、ステップS300〜S500の実行タイミングは、車両1のエンジンが停止されたとき以外であってもよい。たとえば、ステップS200のダウンロード処理が完了した直後や、所定の時刻となったときに、ステップS300〜S500の処理を実行することが考えられる。
【0051】
図6は、
図5のステップS100で実行される差分生成処理の流れを示すフロー図である。
図6に示す処理は、サーバ2において、
図4(b)の差分生成部2001により実行される。
【0052】
最初に、差分生成部2001は、ステップS101において、記憶部202から新プログラムD2、付加情報D3を読み込む。付加情報D3は、新プログラムD2から
図5のステップS400で行われるソフト更新処理で用いるのに適切な差分パッチD6を生成するための情報である。たとえば、ソフト更新装置10からECU11へ送信されるデータブロックのサイズを表すブロック情報などが、付加情報D3に含まれる。差分生成部2001は、この付加情報D3に基づいて、新プログラムD2を複数のデータブロックに分割する。ステップS101を実行したら、差分生成部2001は、内部的に設定されているブロック処理カウンタの値をi=0に設定した後、処理をステップS102に進める。
【0053】
次に、差分生成部2001は、ステップS102において、ステップS101で新プログラムD2から分割された複数のデータブロックのうち、現在のブロック処理カウンタの値に応じたデータブロックである新プログラムD2のブロックiを選択し、このブロックiに対応した部分を旧プログラムD1から切り出す。このとき差分生成部2001は、付加情報D3を参照することで、旧プログラムD1においてどの部分がブロックiに対応するかを特定する。このとき、旧プログラムD1の対応ブロックは、新プログラムD2の対象ブロックと同一のアドレスのブロックだけではなく、複数のブロックからなる構成としてもよい。
【0054】
次に、差分生成部2001は、ステップS103において、ステップS102で選択した新プログラムD2のブロックiと、ステップS102で旧プログラムD1から切り出した部分とを比較し、その比較結果に基づいて差分データD4を抽出する。この差分データD4には、旧プログラムD1には存在しないが新プログラムD2には存在するデータと、旧プログラムD1と新プログラムD2の間でソースコード上は同じであるが、実行モジュール上はその値が異なるデータとが含まれる。前者のデータの場合は、新プログラムD2のデータ内容がそのまま差分データD4として抽出され、後者のデータの場合は、旧プログラムD1と新プログラムD2の間の差分値が差分データD4として抽出される。
【0055】
次に、差分生成部2001は、ステップS104において、ステップS103で抽出された差分データD4を圧縮し、差分圧縮データD5を生成する。生成された差分圧縮データD5は、記憶部202に格納される。
【0056】
次に、差分生成部2001は、ステップS105において、現在のブロック処理カウンタの値がi=Nであるか否かを判定することで、差分データD4の抽出を最後のデータブロックまで行ったかどうかを確認する。なお、NはステップS101で新プログラムD2から分割されたデータブロックの数、すなわち差分データD4を抽出すべきデータブロックの相数を表す。その結果、i=Nである場合は、差分データD4の抽出を最後のデータブロックまで行ったと判断し、処理をステップS106に進める。一方、i=Nでない場合、すなわちi<Nである場合は、差分データD4の抽出を最後のデータブロックまで行っていないと判断し、ブロック処理カウンタの値に1を加えて処理をステップS102に戻す。これにより、次のデータブロックについて差分データD4の抽出が引き続き行われるようにする。プログラムの変更内容に応じて、差分生成の順番はi=Nから逆順に実施してもよい。
【0057】
差分生成部2001は、ステップS106において、各データブロックに対してこれまでに生成された差分圧縮データD5を記憶部202から読み出し、それらを順に連結することで差分パッチD6を生成する。生成された差分パッチD6は、記憶部202に格納される。
【0058】
以上説明したステップS101〜S106の処理を実施することで、差分生成部2001による差分生成処理が完了する。
【0059】
<データ構成>
図7は、
図6のステップS103で生成される差分データD4の構成例を示す図である。
図7に示すように、差分データD4は、複数の差分パケットD42、D43、D44等から構成される。なお、
図7では差分パケットD42、D43、D44のみを図示しているが、差分データD4にはこれ以外にも多数の差分パケットが含まれている。
【0060】
差分パケットD42は、命令部D421とデータ部D422から構成される。同様に、差分パケットD43は、命令部D431とデータ部D432から構成され、差分パケットD44は、命令部D441とデータ部D442から構成される。他の差分パケットについても同様に、命令部とデータ部から構成される。
【0061】
命令部D421は、データ部D422を旧プログラムD1に反映して新プログラムD2を生成するためのデータであり、加算命令D4211、挿入命令D4212、移動命令D4213から構成される。データ部D422は、旧プログラムD1と新プログラムD2との差分に基づくデータであり、加算データD4221、挿入データD4222から構成される。
【0062】
加算命令D4211は、加算データD4221の値を旧プログラムD1の一部に加算することで新プログラムD2の一部を生成する命令を表すデータである。挿入命令D4212は、挿入データD4222の値を旧プログラムD1の一部に挿入することで新プログラムD2の一部を生成する命令を表すデータである。移動命令D4213は、加算命令D4211や挿入命令D4212に応じて加算または挿入されたデータの分だけ、新プログラムD2のポインタを移動する命令を表すデータである。
【0063】
なお、上記の説明では、差分パケットD42を構成する命令部D421およびデータ部D422の構成を説明したが、差分パケットD43、D44をそれぞれ構成する命令部D431、D441およびデータ部D432、D442についても、それぞれ同様の構成を有している。また、他の差分パケットについても同様である。
【0064】
このように、命令部D421、D431、D441と、それに続くデータ部D422、D432、D442から、差分パケットD42、D43、D44がそれぞれ構成される。差分データD4には、差分パケットD42、D43、D44以外にも、このような構造の差分パケットが複数配列されている。なお、差分データD4における各差分パケットのデータ配列は、必ずしも上記の順で並んでいる必要はなく、たとえば差分パケットD40のようなデータ配列としてもよい。差分パケットD40では、加算命令D4211、加算データD4221、挿入命令D4212、挿入データD4222、移動命令D4213の順に、各データが配列されている。また、差分パケットD42において、命令部D421とデータ部D422の配列順序を逆にしてもよい。他の差分パケットについても同様である。これ以外にも、各差分パケットのデータ配列は任意に設定可能である。
【0065】
図8は、
図6のステップS104で生成される差分圧縮データD5の構成例を示す図である。本実施形態では、差分データD4に対して、LZ77符号化およびエントロピー符号化の2段階の圧縮を行うことにより、差分圧縮データD5が生成される。
【0066】
差分データD4を周知のLZ77アルゴリズムを用いて符号化すると、複数のLZ77パケットD803から構成されるLZ77圧縮データD810が生成される。各LZ77パケットD803は、ID(パケット種別)D801とデータD802から構成される。ここで、データ部D802には、文字D80201か、または事前に出現済みの文字列へのオフセットD80202と長さD80203の組み合わせのいずれかが設定される。一方、ID(パケット種別)D801は、データD802の内容が上記のいずれであるかを示すデータであり、対応するデータD802に応じて設定される。
【0067】
LZ77圧縮データD810をレンジコーダやハフマン符号などのアルゴリズムを用いてエントロピー符号化すると、複数のバイナリ符号D807から構成されるエントロピー圧縮データD820が生成される。本実施形態では、このエントロピー圧縮データD820にヘッダ部D51を付加して、差分圧縮データD5が構成される。ヘッダ部D51は、種別D511、復元後サイズD512、圧縮ヘッダD830から構成される。種別D511は、差分圧縮データD5における圧縮データの種別を示す識別情報である。本実施形態では、エントロピー圧縮データD820に対応する値が種別D511に設定される。なお、圧縮されていないデータや、他の圧縮方法で圧縮されたデータを用いる場合には、エントロピー圧縮データD820とは異なる値が種別D511において設定される。復元後サイズD512は、エントロピー圧縮データD820の復元後のデータサイズを示す。圧縮ヘッダD830は、エントロピー圧縮データD820を生成する際に用いられたパラメータなどを示す。
【0068】
このように、差分データD4を圧縮して差分圧縮データD5を生成し、この差分圧縮データD5を用いて差分パッチD6を生成することで、差分パッチD6のデータサイズを小さくすることができる。
【0069】
図9は、本発明の第1の実施形態における分割データの構成例を示す図である。本実施形態では、
図9に示すように、差分パッチD6を構成する各差分圧縮データD5が256バイトごとに分割され、固定長の送信データD901やD902として、
図5のステップS400のソフト更新処理においてソフト更新装置10からECU11に送信される。
【0070】
送信データD901は、差分圧縮データD5のヘッダ部D51と、エントロピー圧縮データD820におけるバイナリ符号D913の途中までを含む分割データである。これは、
図8で説明したLZ77圧縮データD810において、バイナリ符号D913に対応するデータD911の途中までを含む分割データD904に対応する。さらにこれは、
図7で説明した差分データD4において、データD911に対応する命令部D431の途中までを含む分割データD905に相当する。
【0071】
また、送信データD902は、差分圧縮データD5のバイナリ符号D913の途中からバイナリ符号D914の途中までを含む分割データである。これは、
図8で説明したLZ77圧縮データD810において、バイナリ符号D913に対応するデータD911の途中から、バイナリ符号D914に対応するデータD912の途中までを含む分割データD907に対応する。さらにこれは、
図7で説明した差分データD4において、データD911に対応する命令部D431の途中から、データD912に対応するデータ部D432途中までを含む分割データD908に相当する。
【0072】
以上説明したように、差分圧縮データD5を分割して送信することで、複数の可変長のパケットから構成されるエントロピー圧縮データD820、LZ77圧縮データD810、差分データD4は、固定長のデータにそれぞれ分割されて送信される。これにより、エントロピー圧縮データD820を構成する各バイナリ符号や、LZ77圧縮データD810を構成する各LZ77パケットのパケット種別およびデータや、差分データD4を構成する各差分パケットの命令部およびデータ部は、それぞれのデータ境界位置に関わらず、分割後のデータサイズに応じた位置で分割されて送信される。
【0073】
<ソフト更新処理の流れ>
図10は、
図5のステップS400においてソフト更新装置10とECU11の間で実行されるソフト更新処理の流れを示すシーケンス図である。なお、
図10のシーケンス図は、ステップS200でサーバ2からソフト更新装置10に送信された差分パッチD6を構成する1つの差分圧縮データD5について実行される処理を表している。そのため、ECU11の旧プログラムD1を全て新プログラムD2に更新するためには、差分パッチD6を構成する全ての差分圧縮データD5について、
図10に示す処理が繰り返される。
【0074】
最初に、ソフト更新装置10の更新制御部1001は、ステップS401において、データ送受信部(CAN)1002を介して、ECU11にデータ転送開始要求を送信する。このデータ転送開始要求は、たとえば、データフォーマット、送信予定のデータサイズ、送信したデータの書込み先を示す書込み先アドレス等の情報を含む。
【0075】
ECU11のデータ送受信部1102は、ステップS401でソフト更新装置10から送信されたデータ転送開始要求を受信すると、ステップS402において、ソフト更新装置10に受諾応答を送信する。この受諾応答は、ECU11が一度に受信可能なデータサイズ等の情報を含む。
【0076】
ソフト更新装置10の更新制御部1001は、ステップS402でECU11から送信された受諾応答を受信すると、ステップS403において、データ送受信部(CAN)1002を介して、ECU11に差分パッチD6を分割した分割データを送信する。このとき更新制御部1001は、受諾応答に含まれるデータサイズの情報に基づいて、差分パッチD6を所定のデータ長ごとに分割した複数の分割データを生成する。そして、生成した各分割データを、先頭から一つずつ順にEUC11に送信する。
【0077】
ECU11の復元部1103は、ステップS403でソフト更新装置10から送信された分割データをデータ送受信部1102により受信すると、ステップS404において復元処理を実行する。この復元処理において、復元部1103は、時間がかかる処理を行う必要があると判定した場合には、データ送受信部1102を用いて、適宜待機応答をソフト更新装置10に送信する(S405)。なお、復元処理の詳細については、後で
図13を参照して説明する。
【0078】
ステップS403で受信した分割データの復元処理が終了すると、ECU11の復元部1103は、ステップS406において、データ送受信部1102を介してソフト更新装置10に受信応答を送信する。
【0079】
ソフト更新装置10とECU11は、ステップS430において、差分パッチD6を構成する差分圧縮データD5から生成された分割データをすべて送信するまで、前述のS403からS406までの一連の処理を継続して繰り返し行う。
【0080】
ソフト更新装置10の更新制御部1001は、ステップS403で差分パッチD6を構成する1つの差分圧縮データD5から生成された分割データをすべて送信した後に、ステップS406でECU11から受信応答を受信したら、ステップS407において、データ送受信部(CAN)1002を介して、ECU11に転送完了通知を送信する。
【0081】
ECU11の制御部1101は、ステップS407でソフト更新装置10から送信された転送完了通知をデータ送受信部1102により受信すると、ステップS408においてFlash書き込み制御部1104にデータ書込み指示を行う。この指示に応じて、Flash書き込み制御部1104は、一時領域11125に格納されたデータを新プログラムD2の一部としてFROM1113に書き込む。このときFlash書き込み制御部1104は、最初に、復元バッファ11123から一時領域11125に書き込みされていないデータがあれば、復元バッファ11123の当該データを一時領域11125に書き込むことで、一時領域11125において、新プログラムD2を構成する一つまたは複数個のデータブロックを完成させる。こうして一時領域11125に新プログラムD2の一部が復元されたら、次に制御部1101は、これが正しく復元されているかを検証する。その結果、新プログラムD2の一部が正しく復元されている場合には、Flash書き込み制御部1104は、一時領域11125に格納されたデータを、FROM1113において新プログラムD2の書込み領域に格納する。この書込み領域のアドレスは、ステップS401でソフト更新装置10から受信したデータ転送開始要求において指定される。一方、新プログラムD2の一部が正しく復元されていない場合には、制御部1101は、データ送受信部1102を介して、ソフト更新装置10に異常応答を返す。また、FROM1113へのデータ書き込みに時間がかかる場合には、データ送受信部1102により、適宜待機応答をソフト更新装置10に送信する(S409)。
【0082】
ステップS408でFROM1113へのデータ書き込みが完了すると、ECU11の制御部1101は、ステップS410において、データ送受信部1102を介してソフト更新装置10に受諾応答を送信する。
【0083】
以上説明したように、ECU11は、ソフト更新装置10から分割データを受信する都度、その分割データを用いた復元処理を行い、復元済みの分割データを破棄していく。これにより、すべての分割データを受信した後に復元処理を実行するのに比べて、少ないメモリ容量でECU11のプログラムの差分更新を行うことが可能となる。
【0084】
図11は、
図10のシーケンス図においてソフト更新装置10とECU11間でやりとりされるコマンドの構成例を示す図である。
【0085】
コマンドD121は、
図10のステップS401においてソフト更新装置10からECU11に送信されるデータ転送開始要求であり、コマンド情報D1211、D1212、D1213、D1214、D1215から構成される。コマンド情報D1211は、コマンドD121の識別情報であり、ここにはデータ転送開始要求であることを示す識別子(ID)が設定される。コマンド情報D1212は、送信するデータの種別情報であり、送信データが差分圧縮データか、圧縮データか、新プログラムのいずれであるかを示す。コマンド情報D1213は、続くコマンド情報D1214、D1215のデータ長を示す。コマンド情報D1214は、
図10のステップS408で一時領域11125に格納されたデータをFROM1113に書き込む際の先頭アドレスを示す。コマンド情報D1215は、送信するデータのサイズを示す。
【0086】
コマンドD122は、
図10のステップS402においてECU11からソフト更新装置10に送信される受諾応答であり、コマンド情報D1221、D1222、D1223から構成される。コマンド情報D1221は、コマンドD122の識別情報であり、ここにはデータ転送開始要求に対する受諾応答であることを示す識別子(ID)が設定される。コマンド情報D1222は、続くコマンド情報D1223のデータ長を示す。コマンド情報D1223は、ECU11が一度に受信可能なデータブロックのサイズを示す。本実施形態では、受信バッファ11121のサイズに応じて、たとえば256バイトの値が受信可能なデータブロックのサイズとして設定される。
【0087】
コマンドD123は、
図7のステップS403においてソフト更新装置10からECU11に送信されるデータ転送コマンドであり、コマンド情報D1231、D1232、D1233から構成される。コマンド情報D1231は、コマンドD123の識別情報であり、ここにはデータ転送コマンドであることを示す識別子(ID)が設定される。コマンド情報D1232は、コマンドD123の送信回数を示すカウンタ情報であり、ソフト更新装置10からECU11にコマンドD123を送信するたびにその値がインクリメントされる。コマンド情報D1233は、ソフト更新装置10からECU11に転送される差分パッチD6の分割データの本体である。この分割データは、上記のコマンドD122に含まれるコマンド情報D1223にて指定された値を上限サイズとして、ソフト更新装置10が差分パッチD6を構成する1つの差分圧縮データD5を複数に分割することで設定される。たとえば、
図9の送信データD901やD902がコマンド情報D1233に格納される。なお、前述のように、コマンドD123は、差分パッチD6を構成する1つの差分圧縮データD5から分割されたデータがすべて送信されるまで、ソフト更新装置10からECU11へ複数回送信される。
【0088】
コマンドD124は、
図7のステップS406においてECU11からソフト更新装置10に送信される受信応答であり、コマンド情報D1241、D1242から構成される。コマンド情報D1241は、コマンドD124の識別情報であり、ここにはデータ転送コマンドに対する受信応答であることを示す識別子(ID)が設定される。コマンド情報D1242は、コマンドD124の送信回数を示すカウンタ情報であり、直前にソフト更新装置10から受信したデータ転送コマンドD123においてコマンド情報D1232に設定されていたのと同じ値が設定される。
【0089】
コマンドD125は、
図7のステップS407においてソフト更新装置10からECU11に送信される転送完了通知であり、コマンド情報D1251から構成される。コマンド情報D1251は、コマンドD125の識別情報であり、ここには転送完了通知であることを示す識別子(ID)が設定される。
【0090】
コマンドD126は、
図7のステップS410においてECU11からソフト更新装置10に送信される受信応答であり、コマンド情報D1261から構成される。コマンド情報D1261は、コマンドD126の識別情報であり、ここには転送完了通知に対する受信応答であることを示す識別子(ID)が設定される。
【0091】
コマンドD127は、
図7のステップS405またはS409においてECU11からソフト更新装置10に送信される待機応答であり、コマンド情報D1271、D1272、D1273から構成される。コマンド情報D1271は、コマンドD127の識別情報であり、ここにはコマンドに対する拒否応答であることを示す識別子(ID)が設定される。コマンド情報D1272は、どのコマンドに対する拒否応答であるかを示す情報であり、ここには直前にソフト更新装置10から受信したコマンドの識別情報が設定される。すなわち、本実施形態では、ステップS405で送信されるコマンドD127においては、直前にソフト更新装置10から受信したデータ転送コマンドD123においてコマンド情報D1231に設定されていたのと同じ値がコマンド情報D1272に設定される。また、ステップS409で送信されるコマンドD127においては、直前にソフト更新装置10から受信したデータ転送コマンドD125においてコマンド情報D1251に設定されていたのと同じ値がコマンド情報D1272に設定される。コマンド情報D1273はエラーコードであり、ここには待機応答であることを示すコードが設定される。
【0092】
<管理テーブルの構成>
図12は、本発明の第1の実施形態においてECU11のSRAM1112に格納される管理テーブル11122の構成を示す図である。
図12に示すように、管理テーブル11122は、差分復元状態T60と圧縮解凍状態T61から構成される。差分復元状態T60は、復元後サイズT601、復元済サイズT602、復元対象T603、出力先バッファアドレスT604、処理中データ部サイズT605、現在処理位置T606、途中命令T607、命令T608から構成される。圧縮解凍状態T61は、解凍後サイズT611、解凍済サイズT612、解凍途中データT613から構成される。
【0093】
復元後サイズT601は、差分パッチD6を構成する差分圧縮データD5から差分を復元した後の復元後のデータサイズを示す。ここには、差分パッチD6を構成する差分圧縮データD5のヘッダ部D51における復元後サイズD512の値が格納される。
【0094】
復元済サイズT602は、新プログラムD2のうち復元済みである部分のデータサイズを示す。ここには、復元処理によって復元が完了した新プログラムD2の部分のデータサイズを示す値が格納される。
【0095】
復元対象T603は、次に処理するデータが何であるかを示す。ここには、現在の新プログラムD2の復元状態に応じて、「加算命令」、「挿入命令」、「移動命令」、「加算データ」、「挿入データ」のいずれかが格納される。なお、「加算命令」、「挿入命令」、「移動命令」は、
図7で説明した差分パケットD42の命令部D421に含まれる加算命令D4211、挿入命令D4212、移動命令D4213にそれぞれ相当し、「加算データ」、「挿入データ」は、差分パケットD42のデータ部D432に含まれる加算データD4221、挿入データD4222にそれぞれ相当する。
【0096】
出力先バッファアドレスT604は、受信したデータの復元先のメモリアドレスを示す。ここには、復元対象T603の値に応じて、復元バッファ11123内のアドレスか、または、管理テーブル11122の途中命令T607に対応するアドレスが格納される。
【0097】
処理中データ部サイズT605は、差分データD4のうち現在の処理対象の差分パケットに含まれるデータ部のデータサイズを示す。
【0098】
現在処理位置T606は、差分データD4のうち現在の処理対象の差分パケットに含まれるデータ部において復元済みの部分のデータサイズを示す。
【0099】
途中命令T607は、差分データD4のうちECU11が受信済みの分割データに対応する差分パケットに含まれる命令部の一部を格納しておくための領域である。
【0100】
命令T608は、差分データD4のうちECU11が受信済みの分割データに対応する差分パケットに含まれる命令部を格納しておくための領域である。
【0101】
解凍後サイズT611は、差分圧縮データD5を解凍した後のデータサイズを示す。ここには、差分データD4のデータサイズを示す値が格納される。
【0102】
解凍済サイズT612は、差分データD4のうち復元済みの部分のデータサイズを示す。ここには、復元処理によって解凍が完了した差分データD4の部分のデータサイズを示す値が格納される。
【0103】
解凍途中データT613は、受信済みの分割データにおいて解凍処理に必要なデータがすべて揃わなかった場合に、受信済みの分割データを一時的に格納しておくための領域である。
【0104】
ECU11は、以上説明したような管理テーブル11122を用いて、分割データを受信する都度実行される復元処理において、新プログラムD2の復元状態を管理する。これにより、先の復元処理と後の復元処理の間で連続性を保ちつつ、復元処理を継続して行うことができる。
【0105】
<復元処理の流れ>
図13は、本発明の第1の実施形態において、
図10のステップS404でECU11の復元部1103により実行される復元処理のフロー図である。なお、ECU11のデータ送受信部1102は、
図10のステップS403でソフト更新装置10から送信された分割データを受信すると、受信した分割データを受信バッファ11121に格納した後、分割データを受信した旨を制御部1101に連絡する。制御部1101は、データ送受信部1102から分割データの受信通知を受けると、復元部1103に復元指示を行う。復元部1103は、制御部1101から復元指示を受けると、
図13に示すフロー図に従って復元処理を開始する。
【0106】
最初に復元部1103は、ステップS40401において、管理テーブル11122から復元対象T603の値を読み出す。
【0107】
次に復元部1103は、ステップS40402において、ステップS40401で読み出した復元対象T603の値に基づいて、次の処理対象のデータ種別を判定する。その結果、次の処理対象が、
図7で説明した差分パケットの構成要素である命令部とデータ部のうち命令部である場合は、処理をステップS40403に進め、データ部である場合は、処理をステップS40407に進める。
【0108】
ステップS40403に進んだ場合、復元部1103は、ステップS40403において、管理テーブル11122の途中命令T607を、次の処理対象である命令部の一時的な復元先として指定する。
【0109】
次に復元部1103は、ステップS40420において、受信した分割データの一部を解凍し、ステップS40403で復元先に指定した管理テーブル11122の途中命令T607に格納する。なお、この際に、
図8で説明したバイナリ符号D807やLZ77パケットD803の途中で受信した分割データが途切れていると、解凍処理に必要なデータが十分に揃わないため、その部分については解凍することができない。したがってこのような場合には、受信済みの分割データのうち、未解凍のデータを管理テーブル11122の解凍途中データT613に格納し、解凍処理を保留する。そして、ステップS40420の処理を中断し、次の分割データの受信を待つためにステップS40405に進む。
【0110】
次に復元部1103は、ステップS40405において、ステップS40404の解凍結果によって命令部が完成したか否かを判定する。ここでは、管理テーブル11122の途中命令T607に格納されたデータにより、
図7で説明した命令部の構成要素である加算命令、挿入命令、移動命令のいずれかが完成した場合に、処理をステップS40406に進める。一方、これらの命令部のいずれも完成しなかった場合は、処理をステップS40415に進める。この場合、管理テーブル11122の途中命令T607に格納されている値はそのまま保持される。
【0111】
ステップS40406に進んだ場合、復元部1103は、ステップS40406において、当該命令部のデータを管理テーブル11122の命令T608にコピーする。すなわち、管理テーブル11122の途中命令T607に格納されているデータを、命令T608に移動する。ステップS40406を実行したら、処理をステップS40415に進める。
【0112】
ステップS40402からステップS40407に進んだ場合、復元部1103は、ステップS40407において、管理テーブル11122から出力先バッファアドレスT604の値を読み出し、その値が示すアドレスに対応する復元バッファ11123内のメモリ領域を、次の処理対象であるデータ部の復元先として指定する。
【0113】
次に復元部1103は、ステップS40421において、受信した分割データの一部を解凍し、ステップS40407で復元先に指定した復元バッファ11123内のメモリ領域に格納する。なお、この際に、
図8で説明したバイナリ符号D807やLZ77パケットD803の途中で受信した分割データが途切れていると、解凍処理に必要なデータが十分に揃わないため、その部分については解凍することができない。したがってこのような場合には、前述のステップS40420と同様に、受信済みの分割データのうち、未解凍のデータを管理テーブル11122の解凍途中データT613に格納し、解凍処理を保留する。そして、ステップS40421の処理を中断し、次の分割データの受信を待つためにステップS40422に進む。
【0114】
次に復元部1103は、ステップS40422において、ステップS40421で分割データの一部を解凍して得られたデータ部の種別を判定する。その結果、データ部の種別が、
図7で説明したデータ部の構成要素のうち挿入データである場合は、処理をステップS40411に進め、加算データである場合は、処理をステップS40423に進める。
【0115】
ステップS40423に進んだ場合、復元部1103は、ステップS40423において、ステップS40421で解凍されて復元バッファ11123に格納されたデータ部の値に、旧プログラムD1のうち対応する部分の値を加算する加算処理を行う。この加算処理によって得られたデータが新プログラムD2の一部とされる。ステップS40423を実行したら、処理をステップS40411に進める。
【0116】
ステップS40422またはS40423からステップS40411に進んだ場合、復元部1103は、ステップS40411において、旧プログラムD1の読み出し位置を示すポインタを移動させる。ここでは、管理テーブル11122の命令T608に格納されている移動命令が示す移動量分だけ、次に旧プログラムD1を読み出す際の読み出し位置を移動させる。これにより、ステップS40422からステップS40411に進んだ場合には、後で説明するステップS40414において、受信した分割データに含まれる挿入データが旧プログラムD1に挿入される。また、ステップS40423からステップS40411に進んだ場合には、ステップS40414において、ステップS40423の加算処理で得られた加算後のデータが旧プログラムD1の一部と置き換えられる。
【0117】
次に復元部1103は、ステップS40412において、ステップS40421で解凍されて復元バッファ11123に格納されたデータのサイズが所定の規定値に到達したか否かを判定する。その結果、復元バッファ11123のデータサイズが規定値以上である場合は、その旨を制御部1101に通知して処理をステップS40413に進め、規定値未満である場合は、処理をステップS40415に進める。
【0118】
復元部1103から通知を受けると、制御部1101は、ステップS40413において、データ送受信部1102を介して、ソフト更新装置10に待機応答を送信する。また、Flash書き込み制御部1104にデータ書込み指示を行う。
【0119】
制御部1101からデータ書込み指示を受けると、Flash書き込み制御部1104は、ステップS40414において、復元バッファ11123に格納されているデータを、FROM1113の一時領域11125に格納する。ステップS40414の処理が実行された後に、復元部1103は処理をステップS40401に戻し、受信した分割データに対する復元処理を継続する。
【0120】
ステップS40405、S40406またはS40412からステップS40415に進むと、復元部1103は、ステップS40415において、管理テーブル11122を更新する。ここでは、これまでの処理結果に応じて、復元済サイズT602と現在処理位置T606のカウントアップや、出力先バッファアドレスT604の更新や、復元対象T603の更新などを行う。
【0121】
次に復元部1103は、ステップS40416において、処理済みのデータが受信した分割データの終端に到達したか否かを判定する。その結果、まだ分割データの終端に到達していない場合には、次に処理すべきデータがまだ残っていると判断し、処理をステップS40401に戻して
図13の復元処理を継続する。一方、分割データの終端に到達した場合、すなわち受信した分割データを全て処理済みである場合には、復元部1103は、制御部1101にその旨を通知する。この通知を復元部1103から受け取ると、制御部1101は復元部1103に対して、復元処理を終了し、次の分割データが受信されるまで待機するように指示する。
【0122】
図14は、以上説明した本発明の第1の実施形態による復元処理におけるデータの流れの概要を示す図である。
【0123】
ECU11において分割データD1401が受信されて受信バッファ11121に蓄積されると、この分割データD1401がエントロピー復号で解凍されることにより、ID(パケット種別)D1412とデータD1413からそれぞれ構成される複数のLZ77パケットD1411が復元される。このとき、分割データD1401に含まれる複数のバイナリ符号D1404から、LZ77パケットD1411が復元される。なお、受信バッファ11121に格納された分割データD1401の終端がバイナリ符号の途中で途切れており、その途中までのデータD1405と他のバイナリ符号D1404からLZ77パケットD1411を復元できない場合には、これらのデータが管理テーブル11122の解凍途中データT613に格納され、次の分割データを受信するまで解凍処理が保留される。
【0124】
さらに、複数のLZ77パケットD1411が解凍されることにより、命令部D1421、加算データD1422、挿入データD1423から構成される差分データが復元される。この差分データは、SRAM1112の辞書領域11124に格納される。
【0125】
辞書領域11124に格納された差分データのうち、命令部D1421は、管理テーブル11122の命令T608に格納される。この命令T608に格納された命令部D1421の内容に基づき、加算データD1422については、旧プログラムD1の一部と加算された後、復元バッファ11123に新プログラムD2の一部として格納される。また、挿入データD1423については、そのまま復元バッファ11123に新プログラムD2の一部として格納される。なお、辞書領域11124に格納された差分データの終端が命令部の途中で途切れている場合、すなわち受信バッファ11121に格納された分割データD1401の終端が差分データの命令部に対応しており、そのため分割データD1401において命令部とそれに対応するデータ部の少なくとも一部とが揃わない場合には、その途中までのデータD1424が管理テーブル11122の途中命令T607に格納され、次の分割データを受信するまで復元処理が保留される。
【0126】
以上説明したように、復元処理の途中の状態において、復元処理を継続するために必要な情報を管理テーブル11122に格納することで、受信した分割データを順次復元することができる。その結果、差分パッチD6を受信するのに十分なメモリ領域を受信バッファ11121として確保できない場合にも、差分更新によるプログラム更新が可能なECUを提供することができる。
【0127】
以上説明した本発明の第1の実施形態によれば、以下の作用効果を奏する。
【0128】
(1)旧プログラムD1を新プログラムD2に更新可能な車両用電子制御装置であるECU11は、旧プログラムD1を記憶するFROM1113と、差分データD4を圧縮した差分圧縮データD5を所定のデータ長ごとに分割してなる複数の分割データを順次受信するデータ送受信部1102と、データ送受信部1102により受信された各分割データおよび旧プログラムD1に基づいて新プログラムD2を復元するための復元処理を実行する復元部1103とを備える。差分データD4は、
図7に示すように、旧プログラムD1と新プログラムD2との差分に基づくデータ部と、データ部を旧プログラムD1に反映して新プログラムD2を生成するための命令部とを含む。復元部1103は、データ送受信部1102により受信された分割データにおいて命令部とデータ部の少なくとも一部とが揃わない場合(ステップS40405:No)に、ステップS40415、S40416の処理を実行してから
図13に示すフロー図を終了することで、復元処理を保留して次の分割データの受信を待つ。このようにしたので、車両用電子制御装置のプログラム更新において差分更新を適用することができる。
【0129】
(2)差分データD4には、互いに対応する命令部D421,D431,D441とデータ部D422,D432,D442とをそれぞれ組み合わせた複数の差分パケットD42,D43,D44が配列されている。これらの差分パケットD42,D43,D44には、
図7に示すように、互いに対応する命令部D421,D431,D441とデータ部D422,D432,D442とが、命令部D421,D431,D441からデータ部D422,D432,D442の順にそれぞれ配列されている。復元部1103は、データ送受信部1102により受信された分割データの終端が命令部D421,D431,D441のいずれかに対応する場合に、
図13のステップS40405を否定判定することで、復元処理を保留して次の分割データの受信を待つ。このようにしたので、分割データにおいて命令部とデータ部の少なくとも一部とが揃わない場合を確実に判断し、復元処理を保留して次の分割データの受信を待つことができる。
【0130】
(3)復元部1103は、データ送受信部1102により受信された分割データの終端がデータ部に対応する場合に、
図13のステップS40407〜S40411において、当該データ部に対応する命令部の内容に基づいて復元処理を実行する。このようにしたので、分割データにおいて命令部とデータ部の少なくとも一部とが揃った場合に、これらのデータを用いて復元処理を確実に行うことができる。
【0131】
(4)
図9に示すように、ECU11が受信する分割データは、差分圧縮データD5を所定のデータ長ごとに分割した固定長の送信データD901やD902である。復元部1103は、データ送受信部1102により受信された分割データに基づいて差分圧縮データD5の一部を差分データD4の一部に戻すための解凍処理を、
図13の復元処理においてステップS40420、S40421で実行する。このとき復元部1103は、データ送受信部1102により受信された分割データにおいて解凍処理に必要なデータが揃わない場合に、ステップS40420、S40421の処理を中断して次の処理に進むことで、解凍処理を保留して次の分割データの受信を待つ。このようにしたので、分割データを解凍できない場合には、次の分割データの受信を待って解凍処理を継続することができる。
【0132】
(5)復元部1103は、データ送受信部1102により受信された分割データにおける命令部の内容に基づき、データ部をそのまま新プログラムD2の一部とする挿入処理(ステップS40422で処理対象のデータ種別が挿入データと判定された場合)と、データ部と旧プログラムD1の一部とを加算して新プログラムD2の一部とするステップS40423の加算処理(ステップS40422で処理対象のデータ種別が加算データと判定された場合)と、のいずれか少なくとも一つを、
図13の復元処理において実行する。このようにしたので、受信した分割データにおけるデータ部の内容を旧プログラムD1に正しく反映して、新プログラムD2を生成することができる。
【0133】
(6)ECU11において、Flash書き込み制御部1104は、復元処理によって部分的に復元された新プログラムD2のデータサイズが所定値に達した場合(ステップS40412:Yes)に、新プログラムD2の当該部分を、FROM1113において旧プログラムD1が記憶されているのとは別の記憶領域である一時領域11125に書き込む(ステップS40414)。このようにしたので、復元処理において復元された新プログラムD2を部分的に格納しておく復元バッファ11123のメモリ容量が小さくても、新プログラムD2の全体を復元することができる。
【0134】
(7)また、ECU11において、制御部1101は、Flash書き込み制御部1104が新プログラムD2を一時領域11125に書き込む前に、分割データの送信を待機させるための待機応答を、分割データの送信元であるソフト更新装置10に送信する(ステップS40413)。このようにしたので、一時領域11125へのデータ書込み中に分割データが送信されてしまい、それによって分割データが正常に受信できなくなることを防止できる。
【0135】
−第2の実施形態−
次の本発明の第2の実施形態について説明する。前述の第1の実施形態では、差分データD4を圧縮した差分圧縮データD5により差分パッチD6を生成し、ECU11のプログラムを更新する例を示した。これに対して、以下に説明する第2の実施形態では、差分データD4を圧縮せずに差分パッチD6を生成し、ECU11のプログラムを更新する場合の例を示す。
【0136】
図15は、本発明の第2の実施形態における分割データおよび管理テーブル11122の構成例を示す図である。本実施形態では、
図15に示すように、差分パケットD45、D46、D47等から構成される差分データD4が256バイトごとに分割され、固定長の送信データD1501やD1502として、ソフト更新装置10からECU11に送信される。
【0137】
差分パケットD45、D47は、それぞれ命令部(挿入命令)D451、D471とデータ部(挿入データ)D452、D472から構成される。また、差分パケットD46は、命令部(コピー命令)D461から構成され、データ部は含まない。このように、命令部とそれに続くデータ部からそれぞれ構成される複数の差分パケットを連結して差分データD4を構成し、これを複数に分割してソフト更新装置10からECU11に順次送信する。これにより、ECU11において差分データD4をすべて受信しなくても、分割データを受信した都度、順次に復元処理を行うことができる。そのため、省メモリで復元処理を行うことができる。
【0138】
また、本実施形態では、差分データD4において、第1の実施形態で説明した加算命令を利用せず、挿入命令にのみデータ部を付加し、旧プログラムD1の情報を利用する部分はコピー命令としている。これにより、差分データD4の圧縮を行わなくても、ソフト更新装置10からECU11に送信するデータ量を削減することができる。
【0139】
なお、
図15に示すように、本実施形態における差分データD4を圧縮しない場合の管理テーブル11122は、圧縮解凍に関するデータ管理のための圧縮解凍状態T61を有していない以外は、
図12に示した第1の実施形態の管理テーブルと同様である。
【0140】
図16は、本発明の第2の実施形態において、
図10のステップS404でECU11の復元部1103により実行される復元処理のフロー図である。なお、
図16のフロー図において、
図13に示した第1の実施形態と同じ処理を行う部分については、
図13と同じステップ番号としている。この
図13と同一ステップ番号の処理については、特に必要のない限り、以下では説明を省略する。
【0141】
ステップS40403の処理を実行した後、復元部1103は、ステップS40450において、受信した分割データの一部をコピーし、ステップS40403で復元先に指定した管理テーブル11122の途中命令T607に格納する。ステップS40450の処理を実行したら、ステップS40405に進む。
【0142】
ステップS40406の処理を実行した後、復元部1103は、ステップS40452において、ステップS40406で管理テーブル11122の命令T608にコピーした命令部の種別を判定する。その結果、命令部の種別が挿入命令である場合は、処理をステップS40415に進める。この場合、管理テーブル11122の途中命令T607に格納されている値はそのまま保持される。一方、命令部の種別がコピー命令である場合は、処理をステップS40453に進める。
【0143】
ステップS40453に進んだ場合、復元部1103は、ステップS40453において、当該コピー命令で指定された旧プログラムD1の部分を、復元バッファ11123にコピーする。ステップS40453の処理を実行したら、ステップS40412に進む。
【0144】
ステップS40407の処理を実行した後、復元部1103は、ステップS40454において、ステップS40407で復元先に指定した復元バッファ11123内のメモリ領域に、受信した分割データの一部をコピーする。ステップS40454の処理を実行したら、ステップS40412に進む。
【0145】
ステップS40414の処理を実行した後、復元部1103は、ステップS40455において、管理テーブル11122の命令T608を参照することで、復元中の命令部の種別を判定する。その結果、復元中の命令部の種別がコピー命令である場合はステップS40453に戻り、挿入命令である場合はステップS40454に戻る。
【0146】
図17は、以上説明した本発明の第2の実施形態による復元処理におけるデータの流れの概要を示す図である。
【0147】
ECU11において分割データD1701が受信されて受信バッファ11121に蓄積されることで、この分割データD1701に含まれる命令部D17011、D17012と、データ部D17013と、命令部が途中で途切れたデータD17014とが、受信バッファ11121に格納される。なお、命令部D17011はコピー命令であり、命令部D17012は挿入命令である。
【0148】
受信バッファ11121に格納された分割データD1701において、処理対象が命令部D17011、D17012またはデータD17014の場合は、これらの内容が管理テーブル11122の途中命令T607に順次コピーされる。途中命令T607において命令が完成すると、その内容が管理テーブル11122の命令部T608に格納される。一方、処理対象がデータ部D17013の場合は、管理テーブル11122の命令部T608に格納された命令部D17012の内容に基づき、復元バッファ11123にデータ部D17013がコピーされる。また、管理テーブル11122の命令部T608に命令部D17011が格納された場合は、その内容に基づき、指定された旧プログラムD1の部分が復元バッファ11123にコピーされる。
【0149】
以上説明したように、本実施形態においても、復元処理の途中の状態において、復元処理を継続するために必要な情報を管理テーブル11122に格納することで、受信した分割データを順次復元することができる。その結果、差分パッチD6を受信するのに十分なメモリ領域を受信バッファ11121として確保できない場合にも、差分更新によるプログラム更新が可能なECUを提供することができる。
【0150】
以上説明した本発明の第2の実施形態によれば、ECU11のデータ送受信部1102は、差分データD4を所定のデータ長ごとに分割してなる複数の分割データを順次受信する。復元部1103は、データ送受信部1102により受信された分割データにおいて命令部とデータ部の少なくとも一部とが揃わない場合(ステップS40405:No)に、ステップS40415、S40416の処理を実行してから
図16に示すフロー図を終了することで、復元処理を保留して次の分割データの受信を待つ。このようにしたので、第1の実施形態と同様に、車両用電子制御装置のプログラム更新において差分更新を適用することができる。
【0151】
なお、以上説明した本発明の第2の実施形態では、
図15に示したような構成の分割データをソフト更新装置10からECU11に送信することとしたが、第1の実施形態で説明した
図7のような構成の分割データを複数に分割し、ソフト更新装置10からECU11に送信してもよい。この場合、
図16に示した復元処理のフロー図において、ステップS40453やS40454の代わりに、
図13のステップS40423の処理を実行すればよい。
【0152】
以上説明した実施形態はあくまで一例であり、発明の特徴が損なわれない限り、本発明はこれらの内容に限定されるものではない。また、上記では種々の実施形態を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。