(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-25
(45)【発行日】2024-10-03
(54)【発明の名称】電子制御装置
(51)【国際特許分類】
G06F 8/65 20180101AFI20240926BHJP
B60R 16/02 20060101ALI20240926BHJP
【FI】
G06F8/65
B60R16/02 660U
(21)【出願番号】P 2022569711
(86)(22)【出願日】2021-08-31
(86)【国際出願番号】 JP2021031850
(87)【国際公開番号】W WO2022130700
(87)【国際公開日】2022-06-23
【審査請求日】2023-05-17
(31)【優先権主張番号】P 2020208346
(32)【優先日】2020-12-16
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】509186579
【氏名又は名称】日立Astemo株式会社
(74)【代理人】
【識別番号】110002572
【氏名又は名称】弁理士法人平木国際特許事務所
(72)【発明者】
【氏名】衣笠 駿
(72)【発明者】
【氏名】角屋 孝介
(72)【発明者】
【氏名】阿部 雄介
(72)【発明者】
【氏名】弘中 篤史
【審査官】多賀 実
(56)【参考文献】
【文献】特表2019-519829(JP,A)
【文献】国際公開第2018/070156(WO,A1)
【文献】特開2006-298261(JP,A)
【文献】特開2020-187184(JP,A)
【文献】米国特許出願公開第2020/0034134(US,A1)
【文献】中国特許出願公開第108170455(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
B60R 16/02
G09C 1/00- 5/00
G06F 8/65- 8/658
G06F 21/00-21/88
H04L 9/00- 9/40
(57)【特許請求の範囲】
【請求項1】
車両に搭載される電子制御装置であって、
前記車両が搭載している機器を制御する処理を実装したプログラムを実行する演算部、
前記プログラムを更新するために用いる更新データを受信する通信部、
前記プログラムを記憶する記憶部、
を備え、
前記更新データは、圧縮処理が施された圧縮データまたは暗号化処理が施された暗号化データのうち少なくともいずれかを含むとともに、圧縮処理と暗号化処理のいずれも施されていない非処理データを含み、
前記演算部は、前記圧縮データを解凍するかまたは前記暗号化データを復号するかのいずれかを少なくとも実施することにより、前記記憶部に対して書き込む前記プログラムの更新版データブロックを前記更新データから取り出し、
前記非処理データは、前記更新データ内に含まれる各データブロックを特定することができる情報を記述したアドレスリストを保持しており、
前記演算部は、前記更新版データブロックを前記記憶部に対して書き込む処理が途中中断した場合は、再書き込みする前記更新版データブロックに対応する前記更新データ内のデータブロックを前記アドレスリストにしたがって特定するとともに、その特定したデータブロックを指定して前記更新データを再取得
し、
前記更新データ内に含まれる第1データブロックは、前記更新データ内に含まれ前記第1データブロックとは異なる第2データブロックを用いて暗号化されており、
前記演算部は、前記第2データブロックを用いて前記第1データブロックを復号することにより、前記更新データを復号し、
前記演算部は、前記復号した前記第1データブロックを前記記憶部に対して書き込む書込処理が途中中断した場合は、前記第1データブロックと前記第2データブロックをともに含む前記更新データを再取得した上で、前記再取得した前記第2データブロックを用いて前記第1データブロックを再復号する
ことを特徴とする電子制御装置。
【請求項2】
前記非処理データは、前記更新データの先頭のヘッダ部分を含み、
前記アドレスリストは、前記ヘッダ部分に含まれており、
前記演算部は、前記ヘッダ部分から前記アドレスリストを取得することにより、再書き込みする前記更新版データブロックに対応する前記更新データ内のデータブロックを特定する
ことを特徴とする請求項1記載の電子制御装置。
【請求項3】
前記電子制御装置はさらに、前記アドレスリストを格納するメモリを備え、
前記演算部は、前記更新版データブロックを前記記憶部に対して書き込む際に、前記ヘッダ部分から取得した前記アドレスリストを前記メモリに格納し、
前記演算部は、前記更新版データブロックを前記記憶部に対して書き込む処理が途中中断した場合は、前記メモリが格納している前記アドレスリストを用いて、再書き込みする前記更新版データブロックに対応する前記更新データ内のデータブロックを特定する
ことを特徴とする請求項2記載の電子制御装置。
【請求項4】
前記更新データは、1以上のデータブロックによって構成されており、
前記非処理データは、前記データブロックの先頭のヘッダ部分を含み、
前記アドレスリストは、前記ヘッダ部分に含まれており、
前記演算部は、前記ヘッダ部分から前記アドレスリストを取得することにより、再書き込みする前記更新版データブロックに対応する前記更新データ内のデータブロックを特定する
ことを特徴とする請求項1記載の電子制御装置。
【請求項5】
前記データブロックは前記圧縮処理が施されており、
前記データブロックのヘッダ部分は圧縮されていない
ことを特徴とする請求項4記載の電子制御装置。
【請求項6】
前記演算部は、前記更新データを前記データブロックごとに解凍することにより、前記更新版データブロックを取得し、
前記演算部は、前記更新データを前記更新版データブロックごとに前記記憶部に対して書き込む
ことを特徴とする請求項5記載の電子制御装置。
【請求項7】
前記更新データは、前記圧縮処理が施された1以上の前記データブロックと前記データブロックに対応する前記ヘッダ部分を集約することによって構成されており、
前記更新データは、前記データブロックごとに前記暗号化処理が施されており、
前記ヘッダ部分は暗号化されていない
ことを特徴とする請求項5記載の電子制御装置。
【請求項8】
前記更新データは、前記圧縮処理が施された後に前記暗号化処理が施されており、
前記演算部は、前記更新データを復号した後に解凍することにより、前記更新版データブロックを取得する
ことを特徴とする請求項5記載の電子制御装置。
【請求項9】
前記更新データは、1以上のデータブロックによって構成されており、
前記データブロックの付帯情報は、前記データブロックの先頭または末尾または先頭と末尾との間の位置に記述されており、
前記アドレスリストは、前記データブロックの先頭の位置を記述し、または前記データブロックの先頭に配置された前記付帯情報の位置を記述している
ことを特徴とする請求項1記載の電子制御装置。
【請求項10】
前記更新データは、
前記第1データブロックの次に
前記第2データブロックを含み、
前記演算部は、前記第1データブロックを前記記憶部に対して書き込んだ後、前記第2データブロックを前記記憶部に対して書き込む処理が途中中断した場合は、前記更新データを前記記憶部に対して書き込む処理を前記第2データブロックから再開する
ことを特徴とする請求項1記載の電子制御装置。
【請求項11】
前記電子制御装置はさらに、前記更新データのデータブロックを前記記憶部に対して書込完了したことを表す書込完了ブロック情報を記憶するメモリを備え、
前記演算部は、前記記憶部に対して前記更新データのデータブロックを書き込むごとに前記メモリに対してその書込完了したデータブロックに関する前記書込完了ブロック情報を格納し、
前記演算部は、前記第2データブロックを前記記憶部に対して書込完了していない旨を前記書込完了ブロック情報が表している場合は、前記更新データを前記記憶部に対して書き込む処理を前記第2データブロックから再開する
ことを特徴とする請求項10記載の電子制御装置。
【請求項12】
前記演算部は、前記書込完了ブロック情報にしたがって、前記更新データを前記記憶部に対して正常に書込完了したか否かを診断する
ことを特徴とする請求項11記載の電子制御装置。
【請求項13】
前記車両は、前記更新データを一時保存するとともに前記一時保存した前記更新データを前記電子制御装置に対して転送するゲートウェイ装置を搭載しており、
前記通信部は、前記ゲートウェイ装置を介して前記更新データを受信し、
前記演算部は、前記途中中断した書込処理を再開する場合は、前記ゲートウェイ装置が一時保存している前記更新データを再取得する
ことを特徴とする請求項1記載の電子制御装置。
【請求項14】
前記更新データは、前記更新データ内の最初の暗号化されたデータブロックを復号するために用いる初期化ベクトルを含み、
前記演算部は、前記第2データブロックが前記更新データ内の最初の暗号化されたデータブロックである場合は、前記第2データブロックと前記初期化ベクトルを併せて取得することにより、前記第2データブロックを復号する
ことを特徴とする請求項1記載の電子制御装置。
【請求項15】
前記更新データは、前記更新データ内の最初の暗号化されたデータブロックを復号するために用いる初期化ベクトルを含み、
前記第1データブロックは、前記更新データ内において前記第2データブロックの後に配置されており、
前記演算部は、前記第1データブロックを復号する際には、前記第1データブロックと前記第2データブロックを併せて取得することにより、前記第1データブロックを復号する
ことを特徴とする請求項1記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、車両に搭載される電子制御装置に関する。
【背景技術】
【0002】
ECU(Electrical Control Unit)などの車載電子制御装置は、マイクロコンピュータ(以下、マイコン)により制御されている。マイコンには様々な機能が割り当てられており、さらにそれらに対応した外部回路が設けられている。ECUは、不揮発性メモリであるフラッシュROM(Read Only Memory)に記憶されている制御ソフトウェアを実行することにより、対象装置を制御する。自動車においては、例えば、エンジンの燃料噴射・点火を制御する。
【0003】
ECUは一般に、ECUに搭載されているメモリに書き込まれている制御ソフトウェアを書き換える手段を有する。例えば以下のような手段がある:(1)OBD(On-Board Diagnostic)コネクタを介して有線で診断ツールをECUへ接続し、CAN(Controller Area Network)などの信号によってフラッシュROMに書き込むデータを送信する方式(従来からの方式);(2)OTA(Over-The-Air):無線通信によって更新版データをECUへ送信する方式。
【0004】
OTAによるソフトウェア書き換えにおいては、車両走行中に更新版データを受領することがある。この方式においては、実行中の他の制御に影響を与えないように、バックグラウンドで少しずつデータを転送する必要がある。このとき、ソフトウェア書き換えの時間が長くなり、例えばユーザによって電源供給が断たれてしまうなどの要因によって、プロセスが中断される可能性がある。このようなケースにおいて、ソフトウェア書き換えを中断しても途中から開始するリジューム機能が求められている。
【0005】
下記特許文献1は、ソフトウェア書き換えのリジューム機能について記載している。同文献においては、ソフトウェア書き換え中断後にデータ転送元からECUへソフトウェア書き換え開始アドレスを要求する。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1記載の技術は、再送を要求するデータブロックの位置をECU側において保持していることが必要である。したがって、ECUが保持しているROMデータ内のアドレスと、サーバ等から送信されるROMデータ内のアドレスは、同じであることが想定されていると考えられる。
【0008】
他方でECUのソフトウェア書き換えにおいては、送信するROMデータに対して圧縮または暗号化あるいはその両方が施されている場合がある。ROMデータの圧縮はソフトウェア書き換えにおける通信時間の短縮に寄与し、暗号化はセキュリティ強化に寄与するという利点がある。しかしいずれの場合においても、圧縮と暗号化のいずれの処理もなされていない生のROMデータと比較すると、相対的・絶対的なアドレスの特定が難しくなる場合がある。
【0009】
本発明は、上記のような課題に鑑みてなされたものであり、更新データが圧縮または暗号化されている場合であっても、再送開始アドレスを適切に特定することができる技術を提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明に係る電子制御装置において、更新データは圧縮データまたは暗号化データのうち少なくともいずれかを含むとともに圧縮と暗号化いずれもされていない非処理データを含み、前記非処理データは、前記更新データ内に含まれる各データブロックの位置を特定することができるアドレスリストを保持している。
【発明の効果】
【0011】
本発明に係る電子制御装置によれば、更新データが圧縮または暗号化されている場合であっても、再送開始アドレスを適切に特定することができる。
【図面の簡単な説明】
【0012】
【
図1】実施形態1に係る電子制御装置(ECU)1の構成図である。
【
図2】更新データ3を暗号化する様子を示す模式図である。
【
図4】プログラム更新におけるリジューム処理を説明するフローチャートである。
【
図5】更新データ送信部2が更新データ4を送信する処理を説明するフローチャートである。
【
図6】S408の詳細を説明するフローチャートである。
【
図7】S603の詳細を説明するフローチャートである。
【
図10】実施形態4に係るECU1の構成図である。
【発明を実施するための形態】
【0013】
<実施の形態1>
図1は、本発明の実施形態1に係る電子制御装置(ECU)1の構成図である。ECU1は、車両に搭載されている。ECU1は、車両が搭載している機器を制御する。車載機器の例としては、エンジン、パワーステアリング装置、制御ブレーキ装置、などが挙げられる。ECU1は、車載機器を制御する処理を実装した制御プログラムを実行することにより、これら機器を制御する。
【0014】
ECU1は、マイコン11を備える。マイコン11は、ソフトウェアを実行する少なくとも1つのCPU(Central Processor Unit)12、少なくとも1つの揮発性RAM(Random Access Memory)13、プログラムやデータを保持する少なくとも1つの不揮発性メモリ15、少なくとも1つの通信部14、を備える。通信部14は、ECU1の外部にある更新データ送信部2と接続されており、プログラム更新時においては更新データ送信部2を介して更新データを受け取る。
【0015】
更新データ送信部2は、例えば、車両のデータ通信用コネクタに優先で接続されたプログラム更新用の端末であってもよいし、無線通信によってECU1と通信するサーバコンピュータであってもよい。あるいは同じ車両が搭載している別のECUであってもよい。
【0016】
図2は、更新データ3を暗号化する様子を示す模式図である。更新データ3は、ECU1が実行するプログラムなどの更新版を含むデータである。更新データ3は、例えばデータセンタなどからECU1に対して無線通信によって送信される。更新データ3は、例えば不揮発性メモリ15が格納するバイナリデータそのものとして構成されている。
【0017】
更新データ3は、グローバルヘッダ31と、1以上のデータブロック(
図2においてはデータブロック32、33、3Nを例示した)とによって構成されている。データブロックは、ローカルヘッダ部とボディ部によって構成されている(例えばデータブロック32はローカルヘッダ321とボディ322によって構成されている)。各データブロックのサイズは同じであってもよいし異なってもよい。
【0018】
データブロックのボディ部は、ECU1に対して送信する前に圧縮される。ローカルヘッダ部は圧縮されない。圧縮したボディ部に対してローカルヘッダが付与される。ローカルヘッダとボディのペアを連結して1つのデータを形成し、さらにグローバルヘッダ31を付与することにより、更新データ3が作成される。ローカルヘッダはデータブロックの付帯情報を記述しており、グローバルヘッダは更新データ3全体の付帯情報を記述している。これらヘッダの詳細については後述する。
【0019】
更新データ3は、ECU1に対して送信する前に暗号化され、更新データ4となる。更新データ4は、暗号化されたデータブロック(
図2においてはデータブロック42、43、4Nを例示した)を有する。グローバルヘッダ31は暗号化されずにそのまま付与される。暗号アルゴリズムは、本実施形態においてはブロック暗号を用いるが、別のアルゴリズムでもよい。ブロック暗号アルゴリズムを使用する場合、更新データ4は、データブロックごとに暗号化した後、さらにある大きさのブロックごとに暗号化される。
【0020】
ローカルヘッダは、暗号化してもよいししなくてもよい。すなわち、後述するように更新データ4内の各データブロックと、不揮発性メモリ15上の各データブロックの格納アドレスとの間の対応関係を特定することができればよい。換言すると、この対応関係はグローバルヘッダ31内に記述してもよいし、各ローカルヘッダ内に記述してもよい。前者の場合は、更新データ4内における各データブロックの開始アドレスをグローバルヘッダ31内に記述することにより、ECU1は更新データ4内の各データブロックと不揮発性メモリ15内の格納先アドレスとの間の対応関係を特定できるので、各ローカルヘッダを暗号化してもよい。後者の場合は、各ローカルヘッダは更新データ4内における次のローカルヘッダの位置を記述し、これを連続することによって更新データ4内の各データブロックの位置を特定する。データブロックのローカルヘッダは、不揮発性メモリ15内においてそのデータブロックを格納すべき位置(アドレス)を特定することができる情報を記述する。これによりECU1は、更新データ4内の各データブロックと不揮発性メモリ15内の格納先アドレスとの間の対応関係を特定できる。いずれの場合においても、グローバルヘッダ31は暗号化されない。
【0021】
ローカルヘッダは、必ずしもデータブロックの先頭に配置する必要はなく、例えばデータブロックの末尾に配置してもよいし、先頭と末尾との間の任意位置に配置してもよい。ローカルヘッダが次のデータブロックの位置を指定する方法としては、次のデータブロックのボディの先頭を指定してもよいし、次のデータブロックのローカルヘッダ(ただしローカルヘッダがデータブロックの先頭に配置されている場合に限る)を指定してもよい。
【0022】
図3は、グローバルヘッダ31の構成図である。グローバルヘッダ31は、ROM情報311、リジュームアドレス312、IV(Initial Vector)313を有する。ここではグローバルヘッダ31内にデータブロックと不揮発性メモリ15内の格納先アドレスとの間の関係(すなわちリジュームアドレス312)を格納する例を示した。
【0023】
ROM情報311は、更新データ3を構成するブロックの個数、更新データ3のサイズ、圧縮・暗号化アルゴリズムを示すコード、などの情報である。リジュームアドレス312は、更新データ3内の各データブロックの先頭アドレスと、不揮発性メモリ15内の当該データブロックを書き込むアドレスとの間の対応関係を記述している。不揮発性メモリ15内のアドレスそのものを記述してもよいし、不揮発性メモリ15内のアドレスを特定できる他の情報を記述してもよい。IV313は、ブロック暗号において最初の暗号化データブロック(
図2においてはデータブロック42)を復号するために必要となる情報である。ROM情報311やリジュームアドレス312は、ローカルヘッダに含めてもよい。IV313はグローバルヘッダ31内に含めず、あらかじめ不揮発性メモリ15に保存しておいてもよい。
【0024】
グローバルヘッダ31が記述している更新データ3内のアドレスは、更新データ4においても同じ値が用いられる(グローバルヘッダ31は更新データ3と4との間で共通であるため)。したがって、更新データ3を暗号化するとき、各データブロックのサイズを変えないことが望ましい。例えばデータブロックのサイズが変わらない暗号化アルゴリズムを用いることが望ましい。ブロック暗号はその1例である。これに対して更新データ3を暗号化するとき、各データブロックのサイズが変化する場合は、その変化をリジュームアドレス312に対して反映する必要がある。
【0025】
グローバルヘッダ31内の各情報の一部またはすべては、更新データ送信部2を介してECU1に対して送信された後、不揮発性メモリ15内に保存される。本実施形態においては、ECU1が更新データ4を受け取ったとき、リジュームアドレス312が不揮発性メモリ15内に保存され、グローバルヘッダ31内の他の情報は保存されないものとするが、これに代えてあるいはこれに加えて、例えばIV313を不揮発性メモリ15内に保存してもよい。
【0026】
図4は、プログラム更新におけるリジューム処理を説明するフローチャートである。以下
図4の各ステップを説明する。
【0027】
(
図4:ステップS401)
リジューム処理がスタートすると、更新データ送信部2はECU1に対して、更新データ4の転送開始アドレスを送信するように要求する。転送開始アドレスは、例えば更新データ4を不揮発性メモリ15へ書き込む処理が途中中断された場合、更新データ4のうちどこからECU1に対して再送するかを指定するアドレスである。途中中断していない場合は先頭アドレスを指定すればよい。
【0028】
(
図4:ステップS402)
CPU12は、不揮発性メモリ15に対して最初に書き込むデータブロックが、更新データ4の先頭データブロックであるか否かを判定する。この判定は、後述する書き込み完了ブロック情報を参照することにより、実施できる。先頭データブロックをこれから書き込む場合はS403へ進み、先頭データブロック以外のデータブロックをこれから書き込む場合はS404へ進む。
【0029】
(
図4:ステップS403、S407)
CPU12は、転送開始要求アドレスを更新データ4の先頭にセットする(S403)。CPU12は、転送開始要求アドレスを更新データ送信部2へ返答する(S407)。
【0030】
(
図4:ステップS404~S406、S407)
CPU12は、書き込み完了ブロック情報にしたがって、不揮発性メモリ15内のデータブロックを書き込み完了していない領域の先頭アドレスを特定する(S404)。CPU12は、特定したアドレスにしたがって、更新データ4内の対応するアドレスを特定する(S405)。このアドレスが更新データ4のリジュームアドレスとなる。不揮発性メモリ15内のアドレスと更新データ4内のアドレスとの間の対応関係は、例えばあらかじめ不揮発性メモリ15内に格納しておけばよい。あるいはこの対応関係を更新データ送信部2においてあらかじめ保持しておき、CPU12は不揮発性メモリ15内のアドレスをリジュームアドレスとして指定するとともに更新データ送信部2においてその対応関係にしたがって更新データ4内の対応するアドレスを特定してもよい。CPU12は、そのリジュームアドレスを転送開始要求アドレスとしてセットする(S406)。CPU12は、転送開始要求アドレスを更新データ送信部2へ返答する(S407)。
【0031】
(
図4:ステップS405:補足)
更新データ4内のデータブロックの位置は、更新データ4内のアドレスによって特定してもよいし、例えばデータブロックの番号などのようにアドレス以外の情報によって特定してもよい。すなわち、少なくとも更新データ4内のデータブロックと不揮発性メモリ15内の位置との間の対応関係を特定できる情報を、更新データ送信部2とECU1との間で共有できればよい。
【0032】
(
図4:ステップS408)
更新データ送信部2は、転送開始要求アドレスをECU1から受領すると、更新データ4の転送開始要求アドレス以降の部分をECU1に対して送信する。CPU12は、更新データ4を受け取って不揮発性メモリ15へ書き込む。本ステップの詳細は後述する。
【0033】
図5は、更新データ送信部2が更新データ4を送信する処理を説明するフローチャートである。更新データ送信部2は、ECU1から転送開始要求アドレスを受信すると、本フローチャートを開始する。以下
図5の各ステップを説明する。
【0034】
(
図5:ステップS501)
更新データ送信部2は、転送開始要求アドレスが更新データ4の先頭の暗号化データブロックであるか否かを判定する。先頭である場合はS502へ進み、先頭ではない場合はS503へ進む。
【0035】
(
図5:ステップS502)
更新データ送信部2は、更新データ4の先頭の暗号化データブロックを復号するために用いるIV313を、ECU1に対して送信する。
【0036】
(
図5:ステップS503)
更新データ送信部2は、更新データ4のデータブロックを復号するために用いる別の暗号化データブロックを、ECU1に対して送信する。典型的には、データブロックを暗号化する際に、その1つ前の暗号化済データブロックを用いて暗号化を実施する。したがって更新データ送信部2は、転送開始要求アドレスが指定するデータブロックの1つ前の暗号化データブロックを、ECU1に対して送信する。
【0037】
(
図5:ステップS504)
更新データ送信部2は、転送開始要求アドレスが指定するデータブロックから順次、ECU1に対して送信する。ECU1は、最初に受信するデータブロックについては、S502またはS503において受信するデータブロックを用いて、復号を実施できる。それ以後のデータブロックについては、1つ前に受信したデータブロックをRAM13などに一時保存しておき、これを用いて復号を実施できる。1つ前に受信したデータブロック以外のデータブロックを復号において用いる場合は、復号のために用いるデータブロックをRAM13などに一時保存しておけばよい。
【0038】
図6は、S408の詳細を説明するフローチャートである。以下
図6の各ステップについて説明する。
【0039】
(
図6:ステップS601)
通信部14は、更新データ送信部2から更新データ4を受信する。CPU12は、更新データ4に含まれるグローバルヘッダ31(ROM情報311、リジュームアドレス312、IV313)を、RAM13または不揮発性メモリ15に格納する。
【0040】
(
図6:ステップS602)
CPU12は、暗号化データブロックを1つ以上受信したか否かを判定する。例えば更新データ送信部2から受信したデータが暗号化データブロックのサイズに達しているか否かに基づき、この判定を実施できる。暗号化データブロックを1つ以上受信した場合はS603へ進み、未受信である場合はS601へ戻って引き続きデータを受信する。
【0041】
(
図6:ステップS603)
CPU12は、受信した暗号化データブロックを復号する。復号したデータは、RAM13または不揮発性メモリ15に展開する。本ステップの復号処理の詳細については後述する。
【0042】
(
図6:ステップS604)
CPU12は、最後に復号した暗号化データブロックを、次の暗号化データブロックの復号に使用するために、RAM13または不揮発性メモリ15に保存しておく。
【0043】
(
図6:ステップS605)
CPU12は、復号したデータ内に圧縮データブロックが1つ以上含まれているか否かを判定する。例えば復号したデータサイズが圧縮データブロック1つ分に満たなければ、圧縮データブロックがないと判定することができる。圧縮データブロックが含まれていない場合は、S601へ戻って引き続きデータを受信する。圧縮データブロックが含まれている場合はS606へ進む。
【0044】
(
図6:ステップS606)
CPU12は、圧縮データブロックを解凍する。
【0045】
(
図6:ステップS607)
CPU12は、解凍したデータが不揮発性メモリ15の書き込みブロックサイズに達しているか否かを判定する。達していない場合は、ステップS601に戻って引き続きデータを受信する。達している場合はS608へ進む。
【0046】
(
図6:ステップS608~S609)
CPU12は、解凍したデータを不揮発性メモリ15に書き込む(S608)。CPU12は、当該データブロックを書き込み完了したことを表す書き込み完了データブロック情報を、不揮発性メモリ15に保存する(S609)。
【0047】
(
図6:ステップS609:補足)
書き込み完了データブロック情報は、書き込んだデータブロックの整合性チェックのために用いることもできる。例えば書き込み完了データブロック情報を用いて誤り訂正処理などを実施することにより、データブロックを正常に書き込み完了したか否かをCPU12が判断してもよい。
【0048】
図7は、S603の詳細を説明するフローチャートである。本実施形態において、暗号化処理および復号処理は、AES-CBC(Advanced Encryption Standard-Cipher Block Chaining)モードを利用しているが、これに限らず、別のアルゴリズムを用いてもよい。以下
図7の各ステップについて説明する。
【0049】
(
図7:ステップS701)
CPU12は、これから復号するデータブロックが更新データ4内の最初の暗号化データブロック(
図2の例においてはデータブロック42)であるか否かを判定する。最初の暗号化データブロックをこれから復号する場合はS702へ進み、2つ目以降の暗号化データブロックをこれから復号する場合はS704へ進む。
【0050】
(
図7:ステップS702)
CPU12は、更新データ4内の最初の暗号化データブロックを復号する。復号鍵は、例えば暗号化データブロックを生成するための暗号化処理において用いられたものと同じものを用いる。復号鍵は、あらかじめ不揮発性メモリ15に保存しておいてもよいし、別の安全な方法でECU1に対して送信するようにしてもよい。
【0051】
(
図7:ステップS703)
CPU12は、復号された暗号化データブロックと、
図4のS408において不揮発性メモリ15に保存したIV313との排他的論理和(XOR)を取ることにより、いわゆるプレーンテキストと呼ばれる平文ブロックを生成することができる。S702~S703をまとめて広義の復号処理とみなしてもよい。S704とS705についても同様である。
【0052】
(
図7:ステップS704)
CPU12は、更新データ4内の2つ目以降の暗号化データブロックを復号する。復号鍵についてはS702と同様である。
【0053】
(
図7:ステップS705)
CPU12は、復号された暗号化データブロックと、
図6のS604において不揮発性メモリ15に保存した暗号化データブロックとのXORを取ることにより、平文ブロックを生成することができる。
【0054】
<実施の形態2>
図8は、本発明の実施形態2に係るECU1の構成図である。ECU1が更新データ4を更新データ送信部2から受け取る際に、データ中継ECU5が更新データ4を中継してもよい。例えばデータ中継ECU5は、ECU1と更新データ送信部2との間に配置されたゲートウェイ装置であり、ECU1と同じ車内ネットワーク内に搭載することができる。データ中継ECU5は、更新データ4を受け取ると、そのコピーをいったん保存する。データ中継ECU5は、更新データ4の復号や解凍を実施しない。
【0055】
データ中継ECU5が、更新データ4の全てを滞りなく受信できた場合は、実施形態1における更新データ送信部2をデータ中継ECU5に置き替え、実施形態1と同様の方法でリジュームが実現できる。
【0056】
データ中継ECU5が更新データ4を保存している途中で異常が発生してしまった場合は、更新データ送信部2とデータ中継ECU5との間で更新データ4を再送すればよい。データ中継ECU5は更新データ4の復号や解凍をしないので、再送開始アドレスは、単純にデータ中継ECU5に保存できたアドレス範囲の直後とすればよい。
【0057】
<実施の形態3>
図9は、本発明の実施形態3に係るECU1の構成図である。更新データ4は、不揮発性メモリ15に代えて、マイコン11の外部に配置されたフラッシュメモリ17などの不揮発性記憶装置へ格納してもよい。この場合はマイコン11がシリアル通信部16などのインターフェースを介してフラッシュメモリ17へアクセスし、更新データ4を復号・解凍することによって得たデータブロックを書き込む。
【0058】
<実施の形態4>
図10は、本発明の実施形態4に係るECU1の構成図である。
図10のようにECU1が2つ以上のマイコン11を備える場合においても、本発明を適用することができる。具体的には、いずれかのマイコン11が更新データ4を受信する。更新データ4から解凍・復号によって得たデータブロックを、マイコン間通信部18を介してその他のマイコン11が共有する。
【0059】
<まとめ>
実施の形態1乃至4に係るECU1は、車両に搭載される電子制御装置であって、前記車両が搭載している機器を制御する処理を実装したプログラムを実行する演算部、前記プログラムを更新するために用いる更新データを受信する通信部、前記プログラムを記憶する記憶部、を備え、前記更新データは、圧縮処理が施された圧縮データまたは暗号化処理が施された暗号化データのうち少なくともいずれかを含むとともに、圧縮処理と暗号化処理のいずれも施されていない非処理データを含み、前記演算部は、前記圧縮データを解凍するかまたは前記暗号化データを復号するかのいずれかを少なくとも実施することにより、前記記憶部に対して書き込む前記プログラムの更新版データブロックを前記更新データから取り出し、前記非処理データは、前記更新データ内に含まれる各データブロックを特定することができる情報を記述したアドレスリストを保持しており、前記演算部は、前記更新版データブロックを前記記憶部に対して書き込む処理が途中中断した場合は、再書き込みする前記更新版データブロックに対応する前記更新データ内のデータブロックを前記アドレスリストにしたがって特定するとともに、その特定したデータブロックを指定して前記更新データを再取得する。再送要求アドレスの情報が圧縮処理と暗号化処理のいずれも施されていない非処理データに含まれているので、解凍処理や復号処理を行うことなく、再送要求アドレスを特定することができる。これにより、書き込み処理の再開が容易となる。
【0060】
このようなECU1において、前記非処理データは、前記更新データの先頭のヘッダ部分を含み、前記アドレスリストは、前記ヘッダ部分に含まれており、前記演算部は、前記ヘッダ部分から前記アドレスリストを取得することにより、再書き込みする前記更新版データブロックに対応する前記更新データ内のデータブロックを特定する構成としてもよい。各データブロックの再送要求アドレスがまとめてグローバルヘッダに含まれ、グローバルヘッダは更新用データ全体の最初に送信されるので、書き込み処理の再開の際、いずれのデータブロックの書き込みの再開においても、再送要求アドレスが送信済となる。したがって、再送要求アドレスを確実に特定することができる。
【0061】
ECU1において、前記電子制御装置はさらに、前記アドレスリストを格納するメモリを備え、前記演算部は、前記更新版データブロックを前記記憶部に対して書き込む際に、前記ヘッダ部分から取得した前記アドレスリストを前記メモリに格納し、前記演算部は、前記更新版データブロックを前記記憶部に対して書き込む処理が途中中断した場合は、前記メモリが格納している前記アドレスリストを用いて、再書き込みする前記更新版データブロックに対応する前記更新データ内のデータブロックを特定する構成としてもよい。書き込み処理の中断原因が、電源の遮断のような場合であっても、再送要求アドレスがデータフラッシュに記憶されていることになる。したがって、電源遮断時においても、送信された再送要求アドレスが消失することがない。
【0062】
ECU1において、前記更新データは、1以上のデータブロックによって構成されており、前記非処理データは、前記データブロックの先頭のヘッダ部分を含み、前記アドレスリストは、前記ヘッダ部分に含まれており、前記演算部は、前記ヘッダ部分から前記アドレスリストを取得することにより、再書き込みする前記更新版データブロックに対応する前記更新データ内のデータブロックを特定する構成としてもよい。いずれかのデータブロックの書き込み処理が中断された場合でも、このデータブロックのローカルヘッダは送信済であるので、再送要求アドレスを特定することができる。
【0063】
ECU1において、前記データブロックは前記圧縮処理が施されており、前記データブロックのヘッダ部分は圧縮されていない構成としてもよい。複数のデータブロックに分割した後、圧縮処理を行うことで、より高い圧縮効果を得ることができる(圧縮率が高い)。また、圧縮処理の後に非処理データであるヘッダ領域を付与するので、ヘッダ領域が圧縮処理の影響を受けることがない。
【0064】
ECU1において、前記演算部は、前記更新データを前記データブロックごとに解凍することにより、前記更新版データブロックを取得し、前記演算部は、前記更新データを前記更新版データブロックごとに前記記憶部に対して書き込む構成としてもよい。ブロック毎に解凍処理と書き込み処理が行われるので、書き込み処理待ちの解凍済データを大量に保持する必要がなく、メモリ負荷の増大を抑制することができる。
【0065】
ECU1において、前記更新データは、前記圧縮処理が施された1以上の前記データブロックと前記データブロックに対応する前記ヘッダ部分を集約することによって構成されており、前記更新データは、前記データブロックごとに前記暗号化処理が施されており、前記ヘッダ部分は暗号化されていない構成としてもよい。これにより、OTA(over
The Air)や車両整備工場におけるデータ転送ツールでのデータ転送に適した状態で更新データの送信を行うことができる。また、暗号化処理に適した状態で更新データの暗号化処理を行うことができる。
【0066】
ECU1において、前記更新データは、前記圧縮処理が施された後に前記暗号化処理が施されており、前記演算部は、前記更新データを復号した後に解凍することにより、前記更新版データブロックを取得するよう構成としてもよい。これにより、より高い圧縮効果が得られる圧縮処理⇒暗号化処理が施された更新データに適合した復号処理および解凍処理を行うことができる。
【0067】
ECU1において、前記更新データは、1以上のデータブロックによって構成されており、前記データブロックの付帯情報は、前記データブロックの先頭または末尾または先頭と末尾との間の位置に記述されており、前記アドレスリストは、前記データブロックの先頭の位置を記述し、または前記データブロックの先頭に配置された前記付帯情報の位置を記述するように構成してもよい。再送要求アドレスが、各データブロックの先頭に位置している場合、この再送要求アドレスから書き込み処理を再開することにより、必要なデータの再送および書き換えを行うことができる。
【0068】
ECU1において、前記更新データは、第1データブロックの次に第2データブロックを含み、前記演算部は、前記第1データブロックを前記記憶部に対して書き込んだ後、前記第2データブロックを前記記憶部に対して書き込む処理が途中中断した場合は、前記更新データを前記記憶部に対して書き込む処理を前記第2データブロックから再開するように構成してもよい。書き込み処理が完了している第1データブロックの次の第2データブロックから書き込み処理を再開するので、データの送信や書き込みを最小限に抑えることができ、効率の良い書き込み処理を行うことができる。
【0069】
ECU1において、前記電子制御装置はさらに、前記更新データのデータブロックを前記記憶部に対して書込完了したことを表す書込完了ブロック情報を記憶するメモリを備え、前記演算部は、前記記憶部に対して前記更新データのデータブロックを書き込むごとに前記メモリに対してその書込完了したデータブロックに関する前記書込完了ブロック情報を格納し、前記演算部は、前記第2データブロックを前記記憶部に対して書込完了していない旨を前記書込完了ブロック情報が表している場合は、前記更新データを前記記憶部に対して書き込む処理を前記第2データブロックから再開するように構成してもよい。書き込み処理の再開するとき、データフラッシュにおける書き込み完了情報を参照することにより、どのデータブロックから書き込みの再開を行えばよいか、容易に特定することができる。
【0070】
ECU1において、前記演算部は、前記書込完了ブロック情報にしたがって、前記更新データを前記記憶部に対して正常に書込完了したか否かを診断するように構成してもよい。書き込み処理の異常判断を行うことにより、より安全な書き込み処理、すなわちプログラムデータの更新処理を行うことができる。
【0071】
ECU1において、前記車両は、前記更新データを一時保存するとともに前記一時保存した前記更新データを前記電子制御装置に対して転送するゲートウェイ装置を搭載しており、前記通信部は、前記ゲートウェイ装置を介して前記更新データを受信し、前記演算部は、前記途中中断した書込処理を再開する場合は、前記ゲートウェイ装置が一時保存している前記更新データを再取得するように構成してもよい。更新データが一旦、ゲートウェイに保存された以降は、更新データ送信部2と車両との通信が不要となるので、通信状態に拘わらずプログラムデータの更新処理を行うことができる。また、書き込み処理の再開の際、ゲートウェイに保存された更新データを用いるので、改めて電子端末と車両の間の通信を行う必要が無い。
【0072】
ECU1において、前記更新データ内に含まれる第1データブロックは、前記更新データ内に含まれ前記第1データブロックとは異なる第2データブロックを用いて暗号化されており、前記更新データは、前記更新データ内の最初の暗号化されたデータブロックを復号するために用いる初期化ベクトルを含み、前記演算部は、前記第2データブロックが前記更新データ内の最初の暗号化されたデータブロックである場合は、前記第2データブロックと前記初期化ベクトルを併せて取得することにより、前記第2データブロックを復号するように構成してもよい。最初の暗号化ブロックを書き込む場合、書き込み処理の前に行われる復号処理に必要な初期化ベクトルを併せて送信することにより、適切に復号処理を行うことができる。
【0073】
ECU1において、前記更新データ内に含まれる第1データブロックは、前記更新データ内に含まれ前記第1データブロックとは異なる第2データブロックを用いて暗号化されており、前記更新データは、前記更新データ内の最初の暗号化されたデータブロックを復号するために用いる初期化ベクトルを含み、前記第1データブロックは、前記更新データ内において前記第2データブロックの後に配置されており、前記演算部は、前記第1データブロックを復号する際には、前記第1データブロックと前記第2データブロックを併せて取得することにより、前記第1データブロックを復号するように構成してもよい。2つ目以降の暗号化ブロックを書き込む場合は、復号処理の際に別のブロックが必要となるので、このブロックも併せて送信することにより、適切に復号処理を行うことができる。
【0074】
<本発明の変形例について>
本発明は上記実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0075】
以上の実施形態において、不揮発性メモリ15やフラッシュメモリ17へ書き込むデータは、圧縮したままであってもよい。この場合はCPU12が圧縮データを用いる際に動的に解凍してRAM13へ一時的に格納し、RAM13から解凍後データを読み出して実行すればよい。
【0076】
実施形態4において、更新データ4を最初に受信したマイコン11が更新データ4を復号した上で他のマイコン11へ復号データを送信してもよいし、更新データ4をそのまま他のマイコン11へ送信して各マイコン11が自ら復号してもよい。
【符号の説明】
【0077】
1:ECU
11:マイコン
12:CPU
13:RAM
14:通信部
15:不揮発性メモリ
16:シリアル通信部
17:フラッシュメモリ
18:マイコン間通信部
2:更新データ送信部
3:更新データ
31:グローバルヘッダ
321~3N1:ローカルヘッダ
322~3N2:ボディ
4:更新データ
42~4N:暗号化データブロック
5:データ中継ECU