(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
―第1の実施の形態―
以下、
図1〜
図17を参照して、第1の実施の形態に係るソフトウェア更新システムを説明する。なお本実施の形態ではソフトウェアの更新について説明するが、更新対象はソフトウェアに限定されずパラメータやデータなどに適用可能である。なお本実施の形態では、更新後のソフトウェアを「新プログラム」とも呼び、更新前のソフトウェアを「旧プログラム」とも呼ぶ。
【0009】
(システム構成)
図1は、第1の実施の形態にかかるソフトウェア更新システムSの構成を示す図である。ソフトウェア更新システムSは車両1、およびサーバ2を備える。車両1とサーバ2は、アクセスネットワークや拠点を接続するインターネット3、および通信サービスプロバイダが提供するアクセスネットワーク4を介して接続される。
【0010】
車両1は、ゲートウェイ10、通信モジュール11、Human Machine Interface(HMI)12、エンジン制御ECU13、ブレーキ制御ECU14、自動運転ECU15、先進運転支援システム(ADAS) ECU16、エアバッグECU17、Heating Ventilation Air Conditioning(HVAC) ECU18、および車両管理ECU19等の車両1が走行等の機能を実現するために必要とするECU群と、これらECU群をつなぐ車内ネットワーク10a、10bとを備える。本実施の形態では、エンジン制御ECU13および自動運転ECU15の制御プログラムを更新する例を説明する。
【0011】
車内ネットワークはControl Area Network(CAN)(登録商標)、Local Interconnect Network(LIN)、FlexRay、Ethernet(登録商標)などで構成される。本実施の形態では、車内ネットワーク10bはCANで、車内ネットワーク10aはEthernetで構成される。また、
図1では図示しないが、各種ECUなどの車両内の各構成要素は電力線で蓄電池に接続され、電力供給を受けている。ただしここで示す車内ネットワークの構成は一例であり、ネットワークの種類や数はこれに限定されない。
【0012】
ゲートウェイ10は、各種ECU間通信データの中継を行うとともに、ソフトウェア更新装置として、自機器および車内ネットワークを介して接続されたECUに搭載されるソフトウェアの更新を行う。すなわち本実施の形態ではこのゲートウェイ10の動作を詳しく説明する。ゲートウェイ10は起動のたびに、すなわち車両1のイグニッションがオンになるたびにサーバ2にソフトウェア更新に必要な更新パッケージ5を要求する。サーバ2は更新すべき情報がある場合はゲートウェイ10に更新パッケージ5を送信する。更新パッケージ5の構成は後述する。
【0013】
通信モジュール11は、ゲートウェイ10やHMI12、各種ECUとサーバ2との通信を中継する。HMI12は、車両1の乗員であるユーザへの情報提示やユーザからの入力を受け付けるための装置であり、画面表示を行う表示装置および各種スイッチ等の入力装置、またはこれらを組み合わせたタッチパネル等により構成される。エンジン制御ECU13は、エンジンの制御を行う。ブレーキ制御ECU14は、ブレーキの制御を行う。自動運転ECU15は、自動運転時に環境の認識や車両1の起動指示等を行う。ADAS ECU16は、自動ブレーキなどの運転支援制御を行う。エアバッグECU17は、エアバッグの制御を行う。HVAC ECU18は、車内の空調制御を行う。車両管理ECU19は、車両状態の管理を行う。
【0014】
サーバ2は不図示のCPU,ROM,およびRAMを備え、ソフトウェア更新に必要な更新パッケージ5をゲートウェイ10に送信する。ゲートウェイ10は、更新パッケージ5に含まれるデータに基づいて各ECUのソフトウェアを更新する。
【0015】
(ゲートウェイの構成)
図2は、ゲートウェイ10のハードウェア構成を示すブロック図である。ゲートウェイ10は、マイコン101、FROM(FlashROM)102、CAN用の通信I/F104、およびEthernet用の通信I/F105を備える。マイコン101は、CPU1011、SRAM1012、FROM1013、CAN通信コントローラ1014、およびEthernet通信コントローラ1015を備える。マイコン101のCPU1011は、FROM1013に格納されるプログラムを実行し、ゲートウェイ10内の他の構成要素を制御するとともに、車内ネットワークにより接続された他の機器とデータ送受信指示を行うなどしてゲートウェイ10を機能させる。
【0016】
FROM102は、不揮発メモリであり、受信した更新パッケージ5が格納される。通信I/F104は、CAN通信用のインタフェースであり、マイコン101の指示に基づき車内ネットワーク10bを介して、車内ネットワーク10bに接続されたECUとの間でデータの送受信を行う。通信I/F105は、Ethernet通信用のインタフェースであり、マイコン101の指示に基づき車内ネットワーク10aを介して、車内ネットワーク10aに接続された機器との間でデータの送受信を行う。
【0017】
図3は、ゲートウェイ10上で動作するゲートウェイプログラム100の構成を示すブロック図である。ゲートウェイ10の機能を実現するゲートウェイプログラム100は、マイコン101のFROM1013に格納されCPU1011により実行される。
図3では、機能的なまとまりをブロックとして表現しており、各ブロックが複数に分割されてもよいし、いくつかのブロックが統合されてもよい。また制御プログラムは、1つのソフトウェアにより実現されてもよいし、2以上のソフトウェアの組合せにより実現されてもよい。
【0018】
ゲートウェイプログラム100は、更新制御部10001、更新データ管理部10002、更新状態管理部10003、車両状態管理部10006、および通信制御部10007を含む。
【0019】
更新制御部10001は、通信制御部10007を介して車内ネットワーク10aに接続された機器と通信を行い、更新パッケージ5の取得や車両の状態やソフトウェア更新処理の状況の送信を行う。更新制御部10001が取得した更新パッケージ5は、FROM102に格納される。更新パッケージ5の構成は後述する。更新制御部10001は、通信制御部10007を介して車内ネットワーク10bに接続されたECUと通信を行い、そのECUを制御してそのECUに搭載されるソフトウェアを更新する。詳しくは後述するが、ソフトウェアの更新は、更新データ管理部10002を介して取得した更新パッケージ5と車両状態管理部10006を介して取得した車両システム状態に基づいて実施される。
【0020】
更新データ管理部10002は、FROM102から更新パッケージ5を取得し、更新制御部10001に提供する。更新状態管理部10003は、更新制御部10001から更新状態を取得し、FROM1013に更新状態D1として格納する。また、格納した更新状態D1を更新制御部10001に提供する。車両状態管理部10006は、通信制御部10007を介して車内ネットワーク10aおよび10bに接続された機器と通信を行い車両システムの状態を取得し、車両状態を更新制御部10001に提供する。車両状態とはたとえば、イグニッションのオンやオフ、走行の開始などである。
【0021】
通信制御部10007は、更新制御部10001等の指示に従って、CAN通信コントローラ1014およびEthernet通信コントローラ1015を制御し、車内ネットワーク10aおよび10bに接続された機器と通信を行う。車内ネットワーク10aに接続された機器と通信する際には、通信制御部10007は、TCP/IPやUDP/IPなどのパケットを解析・生成する。また車内ネットワーク10aに接続された機器と通信する際には、通信制御部10007は、CANフレームを解析・生成する。
【0022】
図4は、ゲートウェイ10がプログラムを実行することにより実現される機能の1つである更新制御部10001の構成を示すブロック図である。更新制御部10001は、イベント管理部100011、制御部100012、スクリプト実行部100013、サービス提供部100014、およびダウンロード制御部100015を含む。ただし本実施の形態においてスクリプトとは、ゲートウェイ10への動作指令であり、スクリプトには条件式、制御文、およびコマンドの実行命令を含む。本実施の形態におけるスクリプトとは、シェルスクリプト、PerlやPythonなどのインタプリタにより解釈されるテキストファイルである。
【0023】
イベント管理部100011は、車両1の状態変化やダウンロード完了などのイベントを検出し、制御部100012にイベントの発生を伝達する。制御部100012は、イベント管理部100011から伝達されたイベントの発生に従って、スクリプト実行部100013へのスクリプトの実行指示やダウンロード制御部100015へのダウンロード開始指示を行う。スクリプト実行部100013は、制御部100012から指示されたスクリプトを解析して実行する。またスクリプト実行部100013は、制御部100012から中断指令を受けるとスクリプトの実行を中断する。
【0024】
サービス提供部100014は、スクリプト実行部100013に対して車両状態取得や更新状態の記録・読み出し、診断通信機能などのサービスを提供する。診断通信サービスでは、Universal Diagnostic Service(UDS)等の診断通信プロトコルに準拠したコマンドの生成・解析を行う。また、通信制御部10007を介して生成したコマンドの送信および応答の受信を行う。ダウンロード制御部100015は、通信制御部10007を介して車内ネットワーク10aに接続された通信モジュール11と通信を行い、サーバ2から更新パッケージ5を取得する。
【0025】
このように、イベント管理部100011が車両状態や更新状態の変化をイベントとして検出し、スクリプト起動の判定をすることで、任意のタイミングで必要な処理を実行開始することができる。また、サービス提供部100014を介して更新制御部10001の外で管理されている更新状態を取得・記録することで、スクリプトからは直接アクセスしにくい不揮発メモリなどへの書き込み・読み出しが適切に行える。
【0026】
(更新状態D1)
図5は、ゲートウェイ10の更新状態管理部10003が管理する更新状態D1の一例を示す図である。
図5には、更新状態D1をテーブルとして管理し、ECU毎の更新状態を記録する場合の例が示されている。更新状態D1は、ECU ID D101、更新開始状態D102、完了ブロックD103のフィールドを備える。ECU ID D101は、ECUを識別するための情報が格納されるフィールドである。更新状態D102は、当該ECUの更新処理が開始済みか否かを示す識別情報が格納されるフィールドであり、たとえば「開始未」、「開始済み」または「更新完」が格納される。完了ブロックD103は、処理が成功したブロックの識別情報、たとえばブロック番号が格納されるフィールドである。
【0027】
符号D11で示す1つ目のレコードは、自動運転ECU15の更新状態を示すレコードである。このレコードのECU ID D101のフィールドには「自動運転ECU」が格納され、更新開始状態D102のフィールドには更新処理中であることを示す「開始済み」が格納され、完了ブロックD103のフィールドには最後に処理完了したブロックがブロックnであることを示す「Block n」が格納されている。
【0028】
符号D12で示す2つ目のレコードは、エンジン制御ECU13の更新状態を示すレコードである。このレコードのECU ID D101のフィールドには「エンジン制御ECU」が格納され、更新開始状態D102のフィールドには更新処理を開始していないことを示す「開始未」が格納されている。ここでは、エンジン制御ECU13の更新は開始されていないため、完了ブロックD103のフィールドには値が設定されていない。
【0029】
ここでは2つのレコードを説明したが、これらのレコードは次の場合に作成される。すなわち、ゲートウェイ10が受信した更新パッケージ5において、更新対象のECUとして記載されていた場合に作成される。またこの更新状態D1は後述するように逐次記録される。このように、更新状態D1を逐次記録することにより、更新中断後に正常に復帰して起動した際に更新が完了せずに中断していることや、更新が中断された箇所を認識して適切な処理を開始することができる。
【0030】
(更新パッケージ5)
図6は、ゲートウェイ10がサーバ2から取得する更新パッケージ5の構成を示す図である。更新パッケージ5は、1または複数の更新用スクリプト501と、1または複数のスクリプト起動制御情報502と、1または複数のECU更新データ503と、対象ECU一覧504と、スクリプト対応表505とから構成される。更新パッケージ5に含まれる全ての更新用スクリプト501をまとめて、全スクリプト501Zと呼ぶ。更新パッケージ5に含まれる全てのスクリプト起動制御情報502をまとめて、全制御情報502Zと呼ぶ。更新パッケージ5に含まれる全てのECU更新データ503をまとめて、全更新データ503Zと呼ぶ。
【0031】
更新用スクリプト501は、更新パッケージ5の中に1つ以上存在する。更新用スクリプト501にはソフトウェアの更新に必要な手続きが記述されている。更新パッケージ5に含まれる更新用スクリプト501の数は、更新対象のECUの数と同等以上である。更新用スクリプト501はスクリプト実行部100013で実行可能な形で記述されている。スクリプトとして記述される処理、すなわち更新に必要な手続きはたとえば、更新対象のECUへ送信する制御指令の種類およびその順番、車両状態の確認、ユーザへの許諾取得、ECUごとのリカバリ処理、および更新したソフトウェアの有効化処理などである。
【0032】
スクリプト起動制御情報502は、更新パッケージ5の中に1つ以上存在する。スクリプト起動制御情報502は更新用スクリプト501と同じ数だけ更新パッケージ5に含まれ、それぞれの更新用スクリプト501に対応する。スクリプト起動制御情報502には、更新用スクリプト501の制御、すなわち起動および中断に必要な情報が記述されている。スクリプト起動制御情報502の詳細については後述する。
【0033】
ECU更新データ503は、更新パッケージの中に1つ以上存在する。ECU更新データ503にはソフトウェアの更新に必要なデータが格納されている。ECU更新データ503は具体的には、書き込み先のアドレス情報などを示すメタデータや、ソフトウェアそのもの、圧縮されたソフトウェア、または新旧ソフトウェアの差分データである。ECU更新データ503は、いわば更新本体であり、更新パッケージ5に含まれる他の情報は更新本体であるECU更新データ503を使ったソフトウェア更新のサポートのために存在する。更新パッケージ5に含まれるECU更新データ503の数は、更新対象のECUの数と同一である。
【0034】
対象ECU一覧504は、更新パッケージ5の中に1つ存在する。対象ECU一覧504には、更新パッケージ5が更新対象とするECUの一覧を示す情報が格納される。スクリプト対応表505は、更新パッケージ5の中に1つ存在する。スクリプト対応表505には、更新用スクリプト501とECU更新データ503と更新対象となるECUとの対応を示す情報が格納される。
【0035】
このように、更新パッケージ5にスクリプト起動制御情報502を含めることで、必要な処理を必要なタイミングで起動するように制御することが可能となる。
【0036】
図7は、スクリプト起動制御情報502の構成例である。スクリプト起動制御情報502は、対象スクリプト5021、起動条件5022、および中断条件5023から構成される。起動条件5022は、起動イベント50221、順序50222、および更新状態50223から構成される。中断条件5023は中断イベント50231から構成される。ただし起動条件5022および中断条件5023は他の構成要素を含んでもよい。
【0037】
対象スクリプト5021は、そのスクリプト起動制御情報502が起動対象とする更新用スクリプト501を示す。起動イベント50221は、対象スクリプト5021で指定された更新用スクリプト501を起動するトリガとするイベントを示す。ここでいうイベントとはイグニッションのオンやオフ、車両1の走行の開始などの車両状態の変化やダウンロードの完了などである。中断イベント50231は、対象スクリプト5021で指定された更新用スクリプト501の実行を中断するトリガとするイベントを示す。順序50222は、1つのイベントに対して複数のスクリプトを起動する場合の起動順序を示す。更新状態50223は、当該イベント発生時にスクリプト起動可否を判断するための更新状態を示す。
【0038】
このように、スクリプト起動制御情報502に車両状態および更新状態の変化に対応する起動イベント50221を含めることで、必要な処理を必要なタイミングで起動するように定義することが可能となる。また、スクリプト起動制御情報502に中断イベント50231を含めることで、車両状態等の変化に応じて必要なタイミングで実行したスクリプトを中断するように定義することが可能となる。また、スクリプト起動制御情報502に起動条件5022に順序50222を含むことで、ひとつのイベントで複数のスクリプトを起動したい場合に、適切な制御を行うことができる。また、起動条件5022に更新状態50223を含むことで、更新の進捗に応じて適切なスクリプトを起動することができる。
【0039】
(シーケンス図)
図8は、ソフトウェアの更新におけるゲートウェイプログラム100の各構成要素の動作を示すシーケンス図である。更新用スクリプト501の動作を表すシーケンス図は後に改めて説明する。
【0040】
イベント管理部100011は、車両1の状態を監視するために、車両状態管理部10006および更新状態管理部10003からそれぞれ車両状態、更新状態を取得する(S101、S102)。イベント管理部100011は、状態取得の結果、状態変化を検出した場合(S103のYES)、更新データ管理部10002を介して更新パッケージ5に含まれるスクリプト起動制御情報502を読み出す(S104)。状態変化とはたとえば、イグニッションがOFFからONになる、イグニッションがONからOFFになる、更新パッケージ5のダウンロードが完了する、などである。
【0041】
次にイベント管理部100011は、読み出したスクリプト起動制御情報502の中に、検出したイベントに対応して起動すべきスクリプトがあるか否かを検索する(S105)。起動すべき更新用スクリプト501がある場合(S105のYES)は、イベント管理部100011は起動条件5022の順序50222および更新状態50223を確認する。そしてイベント管理部100011は、指定された順序で、更新状態に合致する更新用スクリプト501を実行するように制御部100012を介してスクリプト実行部100013に起動要求を行う(S106)。スクリプト実行部100013は、指定された更新用スクリプト501を実行し(S107)、制御部100012を介してイベント管理部100011に応答を返す(S108)。
【0042】
イベント管理部100011は、実行結果および取得したスクリプト起動制御情報に基づいて次に起動すべき更新用スクリプト501が存在するか否かを確認(S109)し、起動するスクリプトがある場合は次の更新用スクリプト501を起動する(S109のYES)。また、次の起動対象がない場合(S109のNO)は、処理を終える。イベント管理部100011は、スクリプト実行部100013が更新用スクリプト501を実行している際にも車両状態および更新状態を監視し、起動制御情報に含まれる中断イベントの発生を検出する(S110)。中断イベント50231の発生を検出すると、制御部100012を介してスクリプト実行部100013に中断指令を出力する(S111)。
【0043】
このように、イベント管理部100011で車両状態や更新状態の変化イベントを検出し、更新用スクリプト501を起動することで、任意のタイミングで必要な処理を実行開始することができる。また、イベント管理部100011が車両状態や更新状態の変化イベントを検出し、更新用スクリプト501の実行を中断する旨の判定をすることで、任意のタイミングで必要な処理を中断することができる。また、更新用スクリプト501とともにサーバ2から取得するスクリプト起動制御情報502に起動イベント50221や中断イベント50231を含むことで、更新内容ごとに更新を開始する契機となるイベントを変更することができる。
【0044】
また、起動条件5022に順序50222を含み、それに基づいて更新用スクリプト501を起動することで、ひとつのイベントを契機として複数の更新用スクリプト501を適切な順番で起動することができる。ここでは、状態を継続的に読み出す例を示したが、あらかじめイベント管理部100011が車両状態管理部10006および更新状態管理部10003に通知対象の状態変化を登録してもよい。この場合は車両状態管理部10006および更新状態管理部10003は、登録された情報に基づいてイベント管理部100011にイベントの発生を通知する。
【0045】
(動作例)
以下、
図9〜
図17を用いて、自動運転ECU15とエンジン制御ECU13を更新する場合の動作例を説明する。ここでは、自動運転ECU15は2面ROMで構成され、車両1が走行している状態でも書き込みが可能である。一方、エンジン制御ECU13は、エンジン制御中すなわち車両1の走行中は書き込みができず、イグニッションオフ後のみ書き込みが可能である。
【0046】
自動運転ECU15はゲートウェイ10が更新パッケージ5を受信すると、ゲートウェイ10の動作指令に基づき、即座に新たなソフトウェアの書き込みを行い、ゲートウェイ10から有効化命令を受信すると新たなソフトウェアを有効にする。エンジン制御ECU13は、ゲートウェイ10が更新パッケージ5を受信してもすぐには更新を実行しない。車両1のイグニッションがオフにされると、ゲートウェイ10がエンジン制御ECU13にソフトウェアの更新を開始させる。
【0047】
(動作例|更新パッケージ5)
図9は、動作例における更新パッケージ5の具体例である。更新パッケージ5は前述のとおり1または複数の更新用スクリプト501と、1または複数のスクリプト起動制御情報502と、1または複数のECU更新データ503と、対象ECU一覧504と、スクリプト対応表505とから構成される。
図9に示す例では、自動運転ECU更新スクリプト5111、エンジン制御ECU更新スクリプト5112、確認用スクリプト5113、および新プログラム有効化用スクリプト5114のそれぞれが更新用スクリプト501である。また自動運転ECU更新スクリプト起動制御情報5121、エンジン制御ECU更新スクリプト起動制御情報5122、確認用スクリプト起動制御情報5123、および新プログラム有効化用スクリプト起動制御情報5124のそれぞれがスクリプト起動制御情報502である。また自動運転ECU更新データ5131およびエンジン制御ECU更新データ5132のそれぞれがECU更新データ503である。
【0048】
自動運転ECU更新スクリプト5111は、自動運転ECU更新データ5131を用いて自動運転ECU15に新プログラムを書き込むための手順が記述されたスクリプトである。具体的には、ゲートウェイ10から自動運転ECU15に診断通信を用いて新プログラムを転送し、自動運転ECU15に新プログラムを書き込む手順が記述されている。エンジン制御ECU更新スクリプト5112は、エンジン制御ECU更新データ5132を用いてエンジン制御ECU13に新プログラムを書き込むための手順が記述されたスクリプトである。具体的には、ゲートウェイ10からエンジン制御ECU13に診断通信を用いて新プログラムを転送し、エンジン制御ECU13に新プログラムを書き込む手順が記述されている。
【0049】
確認用スクリプト5113は、エンジン制御ECU13への書き込みや、新プログラムの有効化の実行が可能な状態か否かを確認するための手順が記述されたスクリプトである。具体的には、車両1が停車中か、すなわち車速がゼロか否か、および新プログラムの有効化をユーザは許諾しているか否かを確認する手順が記述されている。新プログラム有効化用スクリプト5114は、自動運転ECU15およびエンジン制御ECU13に新プログラムを書き込んだ後に、次回起動時に新プログラムを動作させるために必要な手順が記述されたスクリプトである。具体的には、自動運転ECU15およびエンジン制御ECU13に新プログラム有効化命令を発行するステップが記述されている。
【0050】
自動運転ECU更新データ5131は、自動運転ECU15のソフトウェアの更新に必要となるデータであり、書き込み先アドレス等が記述されたメタデータと、自動運転ECU15に書き込まれたプログラムと、新しいプログラムから生成された差分データから構成される。エンジン制御ECU更新データ5132は、エンジン制御ECU13のソフトウェアの更新に必要となるデータであり、書き込み先アドレス等が記述されたメタデータと、エンジン制御ECU13に書き込まれたプログラムと、新しいプログラムから生成された差分データから構成される。
【0051】
スクリプト起動制御情報502を構成する自動運転ECU更新スクリプト起動制御情報5121、エンジン制御ECU更新スクリプト起動制御情報5122、確認用スクリプト起動制御情報5123、および新プログラム有効化用スクリプト起動制御情報5124は、それぞれ自動運転ECU更新スクリプト5111、エンジン制御ECU更新スクリプト5112、確認用スクリプト5113、および新プログラム有効化用スクリプト5114の起動および中断に必要な情報が記述されている。図を参照して詳しく説明する。
【0052】
(動作例|スクリプト起動制御情報502)
図10は、更新対象が自動運転ECU15とエンジン制御ECU13である場合の全制御情報502Z、すなわち更新パッケージ5に含まれる全てのスクリプト起動制御情報502の一例を示す図である。ここでは一覧性の確保のために、全制御情報502Zを1つのテーブルとして表現している。すなわち
図10には複数のレコードが記載されているが、これらは上から順に自動運転ECU更新スクリプト起動制御情報5121、エンジン制御ECU更新スクリプト起動制御情報5122、確認用スクリプト起動制御情報5123、および新プログラム有効化用スクリプト起動制御情報5124に対応する。
【0053】
図10に示すそれぞれのスクリプト起動制御情報502の構成は、
図7に示した構成と同様である。すなわちそれぞれのスクリプト起動制御情報502は、対象スクリプト5021、起動条件5022、および中断条件5023から構成される。起動条件5022は、起動イベント50221、順序50222、および更新状態50223から構成される。そして中断条件5023は中断イベント50231から構成される。ただし自動運転ECU更新スクリプト起動制御情報5121のみ2つの条件が設定されているので
図10において2行にわたって記載されている。
【0054】
図10の最初のレコード、すなわち自動運転ECU更新スクリプト起動制御情報5121に格納される1つめの情報は以下のとおりである。対象スクリプト5021のフィールドには「自動運転ECU更新用スクリプト」が格納される。起動イベント50221のフィールドには更新パッケージのダウンロード完了を示す「DL完」が格納される。順序50222のフィールドには当該イベント発生時に1番目に起動することを示す「1」が格納される。更新状態50223のフィールドには更新状態を問わずに起動することを示す「−」が格納される。中断イベント50231のフィールドにはイグニッション信号がOFFされたタイミングを示す「IGN−OFF」が格納される。
【0055】
図10の2番目のレコード、すなわち自動運転ECU更新スクリプト起動制御情報5121に格納される2つめの情報は、以下のとおりである。対象スクリプト5021のフィールドには「自動運転ECU更新用スクリプト」が格納される。起動イベント50221のフィールドにはイグニッションがONになったタイミングを示す「IGN−ON」が格納される。順序50222のフィールドには当該イベント発生時に1番目に起動することを示す「1」が格納される。更新状態50223のフィールドには自動運転ECU更新用スクリプトによる自動運転ECU16へのデータ転送が未完了であることを示す「自動運転ECU更新未完」が格納される。中断イベント50231のフィールドには「IGN−OFF」が格納される。
【0056】
図10の3番目のレコード、すなわちエンジン制御ECU更新スクリプト起動制御情報5122に格納される情報は、以下のとおりである。対象スクリプト5021のフィールドには「エンジン制御ECU更新用スクリプト」が格納される。起動イベント50221のフィールドには「IGN−OFF」が格納される。順序50222のフィールドには当該イベント発生時に2番目に起動することを示す「2」が格納される。更新状態50223のフィールドには更新状態を問わずに起動することを示す「−」が格納される。中断イベント50231のフィールドには「IGN−ON」が格納される。
【0057】
図10の4番目のレコード、すなわち確認用スクリプト起動制御情報5123に格納される情報は、以下のとおりである。対象スクリプト5021のフィールドには「確認用スクリプト」が格納される。起動イベント50221のフィールドには「IGN−OFF」が格納される。順序50222のフィールドには当該イベント発生時に1番目に起動することを示す「1」が格納される。更新状態50223のフィールドには自動運転ECUの更新が完了している場合のみ当該スクリプトを起動することを示す「自動運転ECU更新完」が格納される。ここでいう更新とは、自動運転ECU更新スクリプトによる自動運転ECU15への新プログラムの書き込みが完了した状態をいう。中断イベント50231のフィールドには「IGN−ON」が格納される。
【0058】
図10の5番目のレコード、すなわち新プログラム有効化用スクリプト起動制御情報5124に格納される情報は、以下のとおりである。対象スクリプト5021のフィールドには「新プログラム有効化用スクリプト」が格納される。起動イベント50221のフィールドにはイグニッション信号がOFFされたタイミングを示す「IGN−OFF」が格納される。順序50222のフィールドには当該イベント発生時に3番目に起動することを示す「3」が格納される。更新状態50223のフィールドには更新状態を問わずに起動することを示す「−」が格納される。中断イベント50231のフィールドには「IGN−ON」が格納される。
【0059】
(動作例|対象ECU一覧504)
図11は、動作例における対象ECU一覧504の具体例である。
図11に示す例では、本動作例が自動運転ECU15およびエンジン制御ECU13を更新対象としているので、更新対象ECUとして自動運転ECU15およびエンジン制御ECU13が列挙されている。
【0060】
(動作例|スクリプト対応表505)
図12は、動作例におけるスクリプト対応表505の具体例である。
図12に示す例では、自動運転ECU更新スクリプト5111と自動運転ECU更新データ5131と自動運転ECU15とが対応すること、およびエンジンECU更新スクリプト5112とエンジン制御ECU更新データ5132とエンジン制御ECU13とが対応することが示されている。
【0061】
(動作例|シーケンス図)
図13は、自動運転ECU15とエンジン制御ECU13を更新する場合の車両1に備えられる装置の動作概要を示すシーケンス図である。すなわち先に示した
図8では、ゲートウェイ10に含まれるゲートウェイプログラム100の各構成要素の動作を示したが、これから説明する
図13では
図8よりもマクロな視点で説明する。また
図13に示す動作は
図10に示す全制御情報502Zに対応している。
【0062】
ゲートウェイ10は、イグニッションがONにされると(S301)、通信モジュール11を介してサーバ2に更新パッケージ5の取得要求を行う(S302)。次に、要求に基づきサーバ2から送信された更新パッケージ5を取得してゲートウェイ10のFROM102に保持するとともに(S303)、更新状態D1をダウンロード完了にする。
【0063】
イベント管理部100011は、更新パッケージ5のダウンロードが完了したことを検出すると、更新データ管理部10002を介して更新パッケージ内のスクリプト起動制御情報502を読み出し、起動イベント50221が「DL完」となっている自動運転ECU更新スクリプト5111を起動する。この起動は、制御部100012を介してスクリプト実行部100013に指示することで実行される。スクリプト実行部100013は自動運転ECU更新スクリプト5111を実行して自動運転ECU15の更新を行う(S304)。S304の詳細は後に説明する。自動運転ECU15の更新が完了し、更新状態D1の自動運転ECU15の更新状態D102が「完了」に書き換えられる。
【0064】
次にイベント管理部100011は、イグニッションがOFFになったことを検出(S305)すると、スクリプト起動制御情報502を読み出す。そしてイベント管理部100011は、起動イベント50221が「IGN−OFF」であるスクリプトが3つ存在することを把握し、その中で順序50222が「1」である確認用スクリプト起動制御情報5123に注目する。この確認用スクリプト起動制御情報5123では更新状態D1が「自動運転ECU更新完」であるため、更新状態管理部10003を介して自動運転ECU15の更新状態D1が「完了」であることを確認する。ここでは自動運転ECU15の更新状態D1が「完了」なので、イベント管理部100011は確認用スクリプト5113の起動を、制御部100012を介してスクリプト実行部100013に指示する。スクリプト実行部100013は確認用スクリプトを実行して更新状態D1とユーザ許諾の確認を行う(S306)。S306の詳細は後述する。
【0065】
確認用スクリプト5113の実行が完了すると、イベント管理部100011は、起動イベントが「IGN−OFF」、順序が「2」であるエンジンECU更新スクリプト5112の起動を制御部100012を介してスクリプト実行部100013に指示する。スクリプト実行部100013は当該スクリプトを実行してエンジン制御ECU13の更新を行う(S307)。
【0066】
エンジン制御ECU更新スクリプト5112の実行が完了すると、イベント管理部100011は、起動イベントが「IGN−OFF」、順序が「3」である新プログラム有効化用スクリプト5114を起動する。この起動は制御部100012を介してスクリプト実行部100013に指示することにより行われる。スクリプト実行部100013は当該スクリプトを実行して自動運転ECU15とエンジン制御ECU13の新プログラムの有効化を行う(S308)。
【0067】
(動作例|スクリプトと動作の対応)
図14〜
図17を参照してスクリプトの具体例と動作の対応を説明する。
図14は、自動運転ECU更新スクリプト5111の具体例を示す図である。
図15は、自動運転ECU更新スクリプト5111の実行に伴うゲートウェイプログラム100の動作を表すシーケンス図である。すなわち
図15は
図13のS304の詳細を示す。
図16は、確認用スクリプト5113の具体例を示す図である。
図17は、確認用スクリプト5113の実行に伴うゲートウェイプログラム100の動作を表すシーケンス図である。すなわち
図17は
図13のS306の詳細を示す。なお
図14および
図16の左端に記載の数字の連番はスクリプトの行番号であり、説明のために記載している。
【0068】
図14を参照して自動運転ECU更新スクリプト5111の記載を説明する。
図14の1行目にはバージョン情報を要求することが記載されており、2行目にはバージョンが「1.00」でない場合には23行目以下のエラー処理に進むことが記載されている。なお5行目や12行目などにも例外処理による終了が記載されているが説明を省略する。4行目にはセッションを「走行中書込モード」に変更するセッション変更要求を送信することが記載され、7行目には更新状態D1を「START OTA」に変更する要求を送信することが記載されている。9行目には変数に初期値「1」を設定することが記載されている。
【0069】
10〜15行目には、全てのブロックを対象に順番に新プログラムを自動運転ECU15に送信することが記載されている。17行目にはセッションを「通常モード」に変更するセッション変更要求を送信することが記載され、19行目には更新状態D1を「Complete Transfer」に変更する要求を送信することが記載されている。21行目には正常終了を示す返り値を自動運転ECU更新スクリプト5111の実行を指示した制御部100012に返すことが記載されており、23行目以下はエラーによる終了をスクリプトの呼び出し元に返すことが記載されている。
【0070】
スクリプト実行部100013が自動運転ECU更新スクリプト5111を実行する場合のゲートウェイプログラム100の動作を
図15を参照して説明する。ここでは、自動運転ECU15を更新する例を示すが、本動作は基本的に他のECUでも同様である。また、ここでの更新は自動運転ECU15へのデータ転送と書き込みであり、新プログラムの有効化は含まない。
【0071】
ゲートウェイ10の制御部100012は、スクリプト実行部100013に自動運転ECU更新用スクリプト5111の起動を要求する(S30401)。スクリプト実行部100013は自動運転ECU更新スクリプト5111に記述された手順に従って以下の処理を実施する。
【0072】
スクリプト実行部100013は、サービス提供部100014の診断通信サービスを呼び出し、通信制御部10007を介して自動運転ECU15にバージョン取得要求を送信する(S30402)。この要求に基づきサービス提供部100014(S30403)および通信制御部10007(S30404)が動作する。S30402はスクリプト実行部100013が
図14の1行目の記載を解釈して実行したものである。自動運転ECU15は、要求に応じてバージョン情報をゲートウェイ10に送信する(S30405)。ゲートウェイ10のサービス提供部100014は通信制御部10007を介してバージョンを取得し(S30406)、スクリプト実行部100013に応答する(S30407)。
【0073】
次にスクリプト実行部100013は、
図14の2行目の記載を解釈して、受信したバージョン情報をスクリプトに記載のバージョン情報と比較(S30408)し、一致しない場合は処理を終了する(S30408のNO)。なお比較対象とするバージョン情報をスクリプト内に書き込む代わりに、更新データ5内にメタデータとして保持してもよい。バージョン情報が想定と一致する場合は(S30408のYES)、スクリプト実行部100013は、
図14の4行目の記載を解釈して実行する。すなわちスクリプト実行部100013は、サービス提供部100014の診断通信サービスを呼び出し(S30409)、通信制御部10007を介して(S30410)、自動運転ECU15にセッション変更要求を送信する(S30411)。
【0074】
このセッション変更要求は、ソフトウェア書換えを行うための走行中書込モードの識別情報を含む。自動運転ECU15は、要求を受諾可能な場合はセッション変更要求にて指定されたモードに内部状態を遷移させたのち、ゲートウェイ10に受諾応答を送信する(S30412)。ゲートウェイ10のサービス提供部100014は通信制御部10007を介して応答を取得し(S30413)、スクリプト実行部100013に応答する(S30414)。スクリプト実行部100013は応答が受諾応答であれば、
図14の7行目の記載を解釈して、更新処理開始済であることを記録するため、サービス提供部100014の更新状態保存サービスを呼び出す(S30415)。サービス提供部100014は、更新状態管理部10003に更新状態の保存を要求し(S30416)、保存結果をスクリプト実行部100013に応答する(S30417)。
【0075】
次にスクリプト実行部100013は、
図14の10行目〜15行目の記載を解釈して、以下のようにループ制御を伴うブロック転送処理S30460を行う。すなわち
図15において破線で囲むブロック転送処理S30460は、
図14におけるループ内の処理、具体的には11行目から14行目の処理に相当する。ブロック転送処理S30460の詳細は以下のとおりである。
【0076】
スクリプト実行部100013は、自動運転ECU更新データ5131に含まれる新プログラムまたは圧縮された新プログラムまたは差分データの1ブロック分を送信するために、サービス提供部100014の診断通信サービスを呼び出す(S30421)。サービス提供部100014は、データ転送の診断通信サービス実行要求を受け取ると最初に、通信制御部10007を介して自動運転ECU15に転送開始要求を送信する(S30422、S30423)。自動運転ECU15は、要求を受諾可能な場合は、ゲートウェイ10に受諾応答を送信する(S30424)。
【0077】
サービス提供部100014は通信制御部10007を介して応答を取得すると(S30425)、通信制御部10007を介して自動運転ECU15に新プログラムまたは圧縮された新プログラムまたは差分データの1ブロックの一部を転送する(S30426、S30427)。自動運転ECU15は、データを受信すると、ゲートウェイ10に受信応答を送信する(S30428)。サービス提供部100014は、通信制御部10007を介して応答を受信する(S30429)。サービス提供部100014は、直前の転送開始要求で要求したデータサイズ分の送信が終わるまで、データ転送処理(S30460)を繰り返す。データ転送が完了すると、サービス提供部100014は通信制御部10007を介して(S30430)、自動運転ECU15に転送完了通知を送信する(S30431)。
【0078】
自動運転ECUは、ゲートウェイ10に受諾応答を送信する(S30432)。サービス提供部100014は、通信制御部10007を介して応答を受信し(S30433)、転送結果をスクリプト実行部100013に応答する(S30434)。スクリプト実行部100013は、応答が成功であれば、
図14の14行目の記載を解釈して、当該ブロックは転送済であることを記録するために、サービス提供部100014の更新状態保存サービスを呼び出す(S30435)。サービス提供部100014は、更新状態管理部10003に更新状態(完了ブロック)の保存を要求し(S30436)、保存結果をスクリプト実行部100013に応答する(S30437)。以上がブロック転送処理S30460の詳細である。スクリプト実行部100013は、更新データに含まれる全ブロックを転送するまで、ブロック転送処理S30460を繰り返す。
【0079】
全ブロックの転送が完了すると、スクリプト実行部100013は、
図14の17行目の記載を解釈して、サービス提供部100014の診断通信サービスを呼び出し(S30438)、通信制御部10007を介して(S30439)、自動運転ECU15にセッション変更要求を送信する(S30440)。このセッション変更要求は、通常モードの識別情報を含む。自動運転ECU15は、要求を受諾可能な場合はセッション変更要求にて指定されたモードに内部状態を遷移させたのち、ゲートウェイ10に受諾応答を送信する(S30441)。ゲートウェイ10のサービス提供部100014は通信制御部10007を介して応答を取得し(S30442)、スクリプト実行部100013に応答する(S30443)。
【0080】
スクリプト実行部100013は応答が受諾応答であれば、
図14の19行目の記載を解釈して、更新完了済であることを記録するために、サービス提供部100014の更新状態保存サービスを呼び出す(S30444)。サービス提供部100014は、更新状態管理部10003に更新状態の保存を要求し(S30445)、保存結果をスクリプト実行部100013に応答する(S30446)。以上が
図14に示す確認用スクリプト5113の実行に伴うゲートウェイプログラム100の動作の説明である。
【0081】
このように、サービス提供部100014においてデータ転送ループを管理することでスクリプトに記述する内容を削減し、メモリの削減や処理不可の軽減が図れる。なおここではブロック転送の繰り返しをスクリプトに記述する例を示したが、ブロック転送の繰り返しをサービス提供部100014で実施してもよい。また、ここでは診断通信サービスを同期処理として提供する例を示したが、非同期処理としてもよい。
【0082】
図16を参照して確認用スクリプト5113の記載を説明する。
図16の1行目には車両1の速度の情報を取得することが記載されており、2行目には車速がゼロでない場合は9行目以下のエラー処理に進むことが記載されている。4行目にはHMI12を利用してユーザから更新の同意を取得することが記載されている。5行目にはHMI12の故障などで4行目の処理が正常に実行できなかった場合(ERROR)やユーザが更新を拒否した場合(NG)は、9行目以下のエラー処理に進むことが記載されている。7行目には正常終了を示す返り値を確認用スクリプト5113の実行を指示した制御部100012に返すことが記載されており、10行目には異常終了を示す返り値を制御部100012に返すことが記載されている。
【0083】
スクリプト実行部100013が確認用スクリプト5113を実行する場合のゲートウェイプログラム100の動作を
図17を参照して説明する。スクリプト実行部100013によるスクリプトの実行とは非同期に、車両状態管理部10006は、車両内のネットワークを流れる情報を受信し、自身が管理する車両状態を更新する。本例では、車両管理ECU19から送信された車両状態を示すデータを通信制御部10007が受信(S30602)し、車両状態管理部10006は当該データを取得(S30603)し、自身が管理する車両状態を更新する(S30604)。ここでは、車載ネットワークを流れる情報に基づく状態更新の例を示したが、イグニッション状態などについては、電気信号の監視などによる状態の更新も行われる。
【0084】
制御部100012は、イベント管理部100011の指示によりスクリプト実行部100013に確認用スクリプト5113の起動を要求する(S30601)。スクリプト実行部100013は、まず確認用スクリプト5113の1行目の記載を解釈して、サービス提供部100014の車両状態取得サービスを呼び出す(S30605)。サービス提供部100014は、車両状態管理部10006から車速を取得し(S30606)、スクリプト実行部100013にこれを渡す(S30607)。スクリプト実行部100013は、確認用スクリプト5113の2行目の記載を解釈して、車速がゼロでない場合(S306071のNG)は処理を終了し、車速がゼロの場合(S306071のOK)は処理を継続し、次の処理に進む。
【0085】
スクリプト実行部100013は次に、確認用スクリプト5113の4行目の記載を解釈して、HMI12を介してユーザに問い合わせを行うためにサービス提供部の診断通信サービスを呼び出す。この問い合わせは、更新を実行開始してしばらく車両1が使えなくてもよいか、新プログラムを有効にしてよいか、の許諾を得るものである。サービス提供部100014はHMI12に送信する許諾取得のためのコマンドを生成(S30609)し、通信制御部10007を介してHMI12に当該コマンドを送信する(S30610、S30611)。HMI12は、受信したコマンドに基づいて許諾取得画面を表示してユーザ操作による許諾結果を取得(S30612)し、応答をゲートウェイ10に送信する(S30613)。
【0086】
サービス提供部100014は通信制御部10007を介して応答を取得し(S30614)、内容を解析し(S30615)、解析の結果をスクリプト実行部100013に渡す(S30616)。スクリプト実行部100013は受信した解析の結果に基づき、状態確認およびユーザ許諾確認結果を制御部100012に返す(S30617)。以上が
図17に示す自動運転ECU更新スクリプト5111の実行に伴うゲートウェイプログラム100の動作の説明である。
【0087】
診断通信サービスは、対象となるECUからの応答までが同期処理となる構成を示したが、非同期化してもよい。非同期化する場合の例は、第2の実施の形態にて説明する。同期処理としてサービスを提供する場合は、イベント管理部100011は応答を待つ期間を利用して車両状態を確認し、車両状態が変化した場合はサービス提供部100014にその変化を伝達する。
【0088】
上述した第1の実施の形態によれば、次の作用効果が得られる。
(1)情報更新装置であるゲートウェイ10は、ECUに格納されるソフトウェアを更新する。新旧ソフトウェアの差分データ、または新ソフトウェアであるECU更新データ503、ECU更新データ503を用いてソフトウェアを更新する手順が含まれる更新用スクリプト501、およびソフトウェアの更新を開始する条件である起動条件5022が含まれるスクリプト起動制御情報502を含む更新パッケージ5を受信するダウンロード制御部100015と、更新用スクリプト501に基づきソフトウェアの更新を実行するスクリプト実行部100013と、ゲートウェイ10およびECUが搭載される車両1の状態を取得し、車両1の状態が起動条件5022に合致するとスクリプト実行部100013に更新用スクリプト501に基づくソフトウェアの更新を実行させるイベント管理部100011とを備える。
【0089】
ゲートウェイ10は更新パッケージ5に含まれる更新用スクリプト501を実行することでECUのソフトウェアを更新するので、事前に更新手順が定められていなくても更新用スクリプト501に沿って柔軟にソフトウェアの更新ができる。また更新の開始時期、すなわち更新用スクリプト501を実行するタイミングはスクリプト起動制御情報502の起動条件5022として更新パッケージ5に含まれるので、適切なタイミングで更新を開始することができる。
【0090】
(2)更新パッケージ5には、ECU更新データ503、更新用スクリプト501、およびスクリプト起動制御情報502が複数組含まれる。更新パッケージ5にはさらに、複数の更新用スクリプト501と複数のスクリプト起動制御情報502との対応関係を示すスクリプト対応表505が含まれる。そのためゲートウェイ10は、1つの更新パッケージ5を受信するだけで複数のECUのソフトウェアを更新することができる。
【0091】
(3)起動条件5022は、実行を開始する契機となる事象である起動イベント50221および順序50222の組み合わせである。イベント管理部100011は、複数の起動条件5022に含まれる起動イベント50221が同一の場合は、順序50222に基づいてスクリプト実行部100013に実行させる更新用スクリプト501の順番を決定する。そのためあるイベントをトリガーとして、複数のECUのソフトウェアを所望の順番で更新することができる。
【0092】
(4)スクリプト実行部100013は、所定の場合に更新を中断する。
(5)更新パッケージ5にはソフトウェアの更新を中断する条件である中断条件5023が含まれる。イベント管理部100011は、車両1の状態が中断条件5023に一致するとスクリプト実行部100013に更新中断指令を出力する。スクリプト実行部100013は、イベント管理部100011から更新中断指令を受けた場合に更新を中断する。そのためゲートウェイ10は、車両1の状態に合わせて更新処理を中断することができる。
【0093】
(6)起動イベント50221には、車両1におけるイグニッションのオンまたはイグニッションのオフが含まれる。車両1の走行中にはソフトウェアの更新が困難なECUも存在するので、イグニッションのオフを検出して更新用スクリプト501を実行することが有用である。またソフトウェアの更新を複数のステップに分割し、その一部のステップ、特に最終のステップをイグニッションのオンとともに開始し、更新が完了すると車両1の走行を開始する構成も想定されるので、イグニッションのオンを検出して更新用スクリプト501を実行することが有用である。また、中断した処理を再開する必要があるため、イグニッションのオンを検出して更新用スクリプト501を実行することが有用である。
【0094】
(7)起動イベント50221には、更新パッケージ5の受信完了が含まれる。即時のソフトウェアの更新のためには、更新パッケージ5の受信完了を検出して更新用スクリプト501を実行することが有用である。
【0095】
(変形例1)
ECU更新データ503に更新対象となるECUを特定する情報が含まれてもよい。その場合は、更新パッケージ5に対象ECU一覧504が含まれなくてもよく、さらにスクリプト対応表505において更新対象となるECUを示す情報が含まれなくてもよい。
【0096】
(変形例2)
ゲートウェイ10は、ゲートウェイ10に内蔵されるソフトウェアを更新してもよい。またゲートウェイ10が更新パッケージ5を受信して更新する対象はソフトウェアに限定されず、データやパラメータでもよい。さらにゲートウェイ10は、1つの更新パッケージ5に基づき、ソフトウェアとデータとパラメータとを更新してもよい。
【0097】
(変形例3)
スクリプト起動制御情報502には中断条件5023が含まれなくてもよい。更新パッケージ5に含まれるECU更新データ503が1つのみの場合は、対象ECU一覧504およびスクリプト対応表505が更新パッケージ5に含まれなくてもよい。対応関係が明らかだからである。
【0098】
(変形例4)
更新パッケージ5には、更新用スクリプト501の代わりに更新用プログラムが格納されてもよい。この場合は、スクリプト実行部100013はインタプリタの機能を有さなくてもよく、更新パッケージ5に含まれる実行可能ファイルである更新用プログラムを実行することでソフトウェアを更新する。
【0099】
(変形例5)
図3および
図4に示したゲートウェイプログラム100の構成は一例であり、説明した機能を有していれば異なる構成でもよい。たとえば更新制御部10001と通信制御部10007とが一体に構成されてもよいし、制御部100012がスクリプト実行部100013およびサービス提供部100014の機能の一部を有してもよい。
【0100】
―第2の実施の形態―
以下、
図18〜
図26を参照して、第2の実施の形態に係るソフトウェア更新システムを説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、更新制御部が複数のスクリプト実行部を備える点で、第1の実施の形態と異なる。
【0101】
(更新制御部の構成)
図18は、更新制御部10001Aの構成図である。第2の実施の形態におけるゲートウェイ10は、第1の実施の形態における更新制御部10001の代わりに更新制御部10001Aを備える。更新制御部10001Aは、イベント管理部100011、制御部100012、第1スクリプト実行部1000131、第2スクリプト実行部1000132、ダウンロード制御部100015、およびサービス提供部100016を備える。イベント管理部100011、制御部100012、およびダウンロード制御部100015は、第1の実施例と同様なので説明を省略する。第1スクリプト実行部1000131および第2スクリプト実行部1000132は、それぞれが第1の実施の形態におけるスクリプト実行部100013に相当する。
【0102】
更新制御部10001Aは第1スクリプト実行部1000131および第2スクリプト実行部1000132を備えるので、2つのスクリプトを並列に実行できる。ただしここでいう「並列に実行」とは共有するハードウエア資源、すなわちCPU1011を時分割で交互に使用することで、あるスクリプトの実行完了を待つことなく他のスクリプトの実行を開始できることである。なおゲートウェイ10が複数のCPUを備えてそれぞれのCPUにおいて異なるスクリプトを実行してもよい。サービス提供部100016はセキュリティフィルタ100017を備える。サービス提供部100016にセキュリティフィルタ機能が含まれることで、スクリプトから実行される診断通信サービスを安全に保つことできる。
【0103】
(セキュリティフィルタ100017)
本実施の形態においてサーバ2が送信する更新パッケージ5には、それぞれのECU更新データ503および対象ECU一覧504に対応する検証情報を含む。検証情報はたとえば、デジタル署名やメッセージ認証コード(以下、MAC)である。以下では、検証情報がデジタル署名の場合とMACの場合とでサーバ2およびゲートウェイ10があらかじめ備えるべき鍵情報、およびゲートウェイ10のセキュリティフィルタ100017の動作を説明する。ただし以下の説明では冗長な記載を避けるためにECU更新データ503に関する検証についてのみ説明し、対象ECU一覧504についての記載は省略する。
【0104】
検証情報がデジタル署名の場合は、サーバ2が秘密鍵をゲートウェイ10がその秘密鍵に対応する公開鍵をあらかじめ備える。サーバ2は、秘密鍵を用いてECU更新データ503に署名してその署名を検証情報としてECU更新データ503とともにゲートウェイ10に送信する。セキュリティフィルタ100017は、公開鍵を用いて署名である検証情報を検証することで、署名を行った者、すなわち送信者がサーバ2であることを確認する。
【0105】
検証情報がMACの場合は、サーバ2およびゲートウェイ10は共通秘密鍵をそれぞれあらかじめ備える。サーバ2は、共通秘密鍵を用いてECU更新データ503のMACを生成し、そのMACを検証情報としてECU更新データ503とともにゲートウェイ10に送信する。セキュリティフィルタ100017は、共通秘密鍵を用いて受信したECU更新データ503のMACを生成し、生成したMACと受信した検証情報とが一致することを確認することで、MACを生成した者、すなわち送信者がサーバ2であることを確認する。
【0106】
図19は、スクリプト起動制御情報502Aの構成を示す図である。本実施の形態では、更新パッケージ5にはスクリプト起動制御情報502の代わりにスクリプト起動制御情報502Aが含まれる。すなわち本実施の形態における更新パッケージ5は、更新用スクリプト501と、スクリプト起動制御情報502Aと、ECU更新データ503と、対象ECU一覧504と、スクリプト対応表505とから構成される。
【0107】
図19に示すように、スクリプト起動制御情報502Aは、第1の実施の形態におけるスクリプト起動制御情報502から中断条件が削除されている。またスクリプト起動制御情報502Aは、起動条件5022に割当50224を含む。割当50224は、対象スクリプト5021で指定されたスクリプトを起動するスクリプト実行部を示す。このように、起動条件に割当を含むことで、ひとつのイベントで複数のスクリプトを並列で起動したい場合に、適切なスクリプト実行部で対象スクリプトを実行させることができる。
【0108】
図20は、本実施例におけるスクリプト起動処理を示すシーケンス図である。イベント管理部100011は、あらかじめ全制御情報502Zを取得しており、全制御情報502Zに基づき更新状態管理部10003および車両状態管理部10006に発生の通知が必要なイベントを登録する(S201,S202)。更新状態管理部10003および車両状態管理部10006は、車両1の状態変化を検出し(S203)、登録されたイベント、たとえばダウンロードの完了通知をイベント管理部100011に通知する(S204)。イベント管理部100011は第1スクリプト実行部1000131が起動対象とするスクリプトの有無を判断する(S205)。第1スクリプト実行部1000131が起動対象とするスクリプトがある場合は制御部100012を介して第1スクリプト実行部1000131にそのスクリプトを実行させる(S206、S207)。
【0109】
同様にイベント管理部100011は第2スクリプト実行部1000132が起動対象とするスクリプトの有無を判断する(S208)。第2スクリプト実行部1000132が起動対象とするスクリプトがある場合は制御部100012を介して第2スクリプト実行部1000132にそのスクリプトを実行させる(S209、S210)。第1スクリプト実行部1000131および第2スクリプト実行部1000132は、スクリプトの実行が完了するとその結果をイベント管理部100011に応答する(S211,S213)。イベント管理部100011はその応答を受けると、第1スクリプト実行部1000131および第2スクリプト実行部1000132において次に実行すべきスクリプトの有無を判断し(S212,S214)、必要に応じてスクリプトを実行させる。
【0110】
図21は、更新対象が自動運転ECU15とADAS ECU16である場合の更新パッケージ5の例である。ただし
図21では検証情報の記載を省略している。第1の実施の形態における
図9との相違点は、更新対象のECUが異なることに起因する以下の点である。すなわちエンジンECU更新スクリプト5112の代わりにADAS ECU更新スクリプト5115を備え、エンジン制御ECU更新スクリプト5112の代わりにADAS ECU更新スクリプト起動制御情報5125を備え、エンジン制御ECU更新データ5132の代わりにADAS ECU更新データ5135を備える。
【0111】
確認用スクリプト5113A、新プログラム有効化用スクリプト5114、対象ECU一覧504、およびスクリプト対応表505は、更新対象の変更にあわせて第1の実施の形態から内容が書き換えられている。
【0112】
ADAS ECU更新スクリプト5115は、ADAS ECU更新データ5135を用いてADAS ECU16に新プログラムを書き込むための手順が記述されたスクリプトである。具体的には、ゲートウェイ10からADAS ECU16に診断通信を用いて差分データを転送する手順が記述されている。ADAS ECU更新データ5135は、ADAS ECU16の更新に必要となるデータであり、書き込み先アドレス等が記述されたメタデータと、ADAS ECU16に書き込まれたプログラムと、新しいプログラムから生成された差分データから構成される。
【0113】
図22は、更新対象が自動運転ECU15とADAS ECU16である場合の全制御情報502Zの一例を示す図である。
図19を参照して説明したようにスクリプト起動制御情報502Aは中断条件を持たず、代わりに割当50224を有する。
図22に示すように、自動運転ECU更新スクリプト5111、確認用スクリプト5113A、および新プログラム有効化用スクリプト5114は第1スクリプト実行部1000131に割り当てられ、ADAS ECU更新スクリプト5115のみが第2スクリプト実行部1000132に割り当てられている。またADAS ECU更新スクリプト起動制御情報5125の記載から、ADAS ECU更新スクリプト5115はダウンロードの完了、またはイグニッションのONにより実行されることがわかる。ただしイグニッションがONの場合は、更新状態50223に関する条件が付されている。また確認用スクリプト起動制御情報5123の起動条件5023における更新状態50223は、自動運転ECU15の更新が完了しているおり、かつADAS ECU16の更新が完了していることである。
【0114】
図23は、自動運転ECU15とADAS ECU16を更新する場合のソフトウェア更新処理の流れを示すシーケンス図である。更新パッケージ5のダウンロードが完了するまでの処理は、
図13における処理と同様である。
【0115】
イベント管理部100011は、ダウンロードが完了したことを検出すると、更新データ管理部10002を介して更新パッケージ5内のスクリプト起動制御情報502Aを読み出す。そしてイベント管理部100011は、起動イベント50221が「DL完」であるスクリプトが2つあり、いずれも順序50222が「1」であり、割当50224が両者で異なることを認識する。そのためイベント管理部100011は、第1スクリプト実行部1000131に自動運転ECU更新スクリプト5111の起動を指示し、第2スクリプト実行部1000132にADAS ECU更新スクリプト5115の起動を指示する。これらの更新処理は、2つの実行部によって並列に行われる(S304、S305)。
【0116】
次に、イベント管理部100011は、イグニッションがOFFになったことを検出(S310)すると、更新データ管理部10002を介して更新パッケージ5内のスクリプト起動制御情報502Aを読み出す。そしてイベント管理部100011は、起動イベント50221が「IGN−OFF」、順序50222が「1」である確認用スクリプト起動制御情報5123の更新状態50223が「自動運転ECU更新完」かつ「ADAS ECU更新完」であるため、更新状態管理部10003を介して自動運転ECU15およびADAS ECU16の更新状態が「完了」であることを確認する。ここでは両者の更新状態が「完了」なので、確認用スクリプト5113Aの起動を、制御部100012を介して第1スクリプト実行部1000131に指示する。第1スクリプト実行部1000131は確認用スクリプト5113Aを実行して車両状態とユーザ許諾の確認を行う(S311)。
【0117】
確認用スクリプト5113Aの実行が完了すると、イベント管理部100011は、起動イベント50221が「IGN−OFF」、順序が「2」となっている新プログラム有効化用スクリプト5114の起動を、制御部100012を介して第1スクリプト実行部1000131に指示する。第1スクリプト実行部1000131は当該スクリプトを実行して自動運転ECU15とADAS ECU16の新プログラムの有効化を行う(S312)。
【0118】
図24は本実施の形態における確認用スクリプト5113Aの具体例を示す図である。なお本実施の形態では、サービス提供部100014は診断通信サービスを非同期処理として提供している。そのため以下に説明するように同一の命令文であっても第1の実施の形態とは挙動が異なる。
【0119】
図24の1行目には車両1の速度の情報を取得することが記載されており、2行目には車速がゼロでない場合は16行目以下のエラー処理に進むことが記載されている。4行目にはHMI12を利用してユーザから更新の同意を取得することが記載されている。ただし本実施の形態では非同期処理なので、4行目の処理ではユーザに問い合わせを行う、たとえば画面に問い合わせのダイアログを表示するだけであり、ユーザの応答を得る処理は含まれない。5行目には、ユーザへの問い合わせが正常に行えなかった場合、たとえばHMI12が動作しない場合は、16行目以下のエラー処理に進むことが記載されている。
【0120】
図24の7〜14行目は永続的なループ処理を示している。8行目にはイグニッションの状態を取得することが記載されており、9行目にはイグニッションがONの場合には正常終了を示す返り値を制御部100012に返すことが記載されている。11行目には、4行目においてユーザへ問い合わせた回答を取得することが記載されている。ただしユーザがまだ回答を選択していない場合は未回答である旨の値、たとえば「NULL」が回答として取得される。12行目には、11行目で取得した回答が更新の承諾である「OK」であった場合は正常終了を示す返り値を制御部100012に返すことが記載され、更新の拒否を示す「NG」であった場合は16行目以下のエラー処理に進むことが記載されている。
【0121】
すなわち
図24の7〜14行目の記載は、イグニッションがONまたは更新の同意が得られた場合は正常終了し、更新が拒否された場合はエラー処理に進むことを示す。換言すると、イグニッションがOFFのままでユーザが問い合わせに回答しなければループ処理が永続する。また、ユーザの選択により更新処理を中断することも記載されている。
【0122】
図25は、確認用スクリプト5113Aの実行に伴うゲートウェイプログラム100の動作を表すシーケンス図である。ただし第1の実施の形態における
図17と同一の処理は同一のステップ番号を付して説明を省略する。前述のとおり、サービス提供部100014は診断通信サービスを非同期処理として提供している。HMI12に許諾取得のコマンドを送信するまでの処理、すなわち
図17における上から4分の3ほどの処理は前述の
図17における処理と同様である。すなわちS30608は
図24の1行目の記載に対応する。
【0123】
サービス提供部100014はHMI12に送信する許諾取得のためのコマンドを生成(S30609)し、通信制御部10007を介してHMI12に当該コマンドを送信する(S30610、S30611)。HMI12は、受信したコマンドに基づいて許諾取得画面を表示し、ユーザ操作による許諾操作を待つ。一方、通信制御部10007は、送信処理の結果、すなわち正常にHMI12を用いた許諾取得画面の表示が行われたか否かをサービス提供部100014に応答する(S30618)。サービス提供部100014は診断通信サービスの呼び出し結果として、送信結果を第1スクリプト実行部1000131に応答する(S30619)。第1スクリプト実行部1000131は、
図24の2行目の記載を解釈して、ユーザの許諾の成否ではなく処理が正常に行われたか否かだけを判断し、異常がなければ、すなわち応答が「NG」でなければ次の処理に進む。
【0124】
次に、第1スクリプト実行部1000131は、
図24の8行目の記載を解釈して、再度イグニッションがONされていないかを確認するため、車両状態取得サービスを呼び出す(S30620)。サービス提供部100014は、車両状態管理部10006からイグニッションの状態を取得(S30621)し、結果を第1スクリプト実行部1000131に応答する(S30622)。第1スクリプト実行部1000131は、
図24の9行目の記載を解釈して、イグニッションがONであれば処理を終了して制御部100012に結果を応答する(S30623のON)。第1スクリプト実行部1000131が、イグニッションの状態を確認している間に、ユーザがHMI12を操作し(S30624)、その結果をゲートウェイに送信する(S30625)。サービス提供部100014は通信制御部10007を介して診断通信パケットを取得し(S30626)、これを解析して結果を保持する(S30627)。
【0125】
第1スクリプト実行部1000131は、イグニッション状態がOFF(S30623のOFF)であれば、
図24の11行目の記載を解釈して、診断通信結果取得サービスを呼び出して(S30628)、S30608で呼び出した診断通信サービスの結果を取得する(S30629)。読み出した結果が応答結果であるか否かを判定(S30630)し、応答が未着であれば、車両状態取得サービス呼び出しS30620以降の処理を繰り返す(S30630の結果未着)。応答を受信済み(S30630の結果到着済)であれば、第1スクリプト実行部1000131は応答結果に基づき、状態確認及びユーザ許諾確認結果を制御部100012に返す(S30631)。
【0126】
このように、診断通信サービスを非同期化してスクリプト内で状態確認をすることで、車両等の状態変化やユーザの指示にあわせて実行中のスクリプトを中断することができる。
【0127】
図26は、第2の実施の形態における診断通信サービス呼び出し処理の流れを示すシーケンス図である。サービス提供部100016は、第1スクリプト実行部1000131により診断通信サービスが呼び出される(S401)と、当該要求がECUへのデータ書き込み要求か否かを判断する(S402)。ここでいうデータ書き込み要求とは、たとえばUDS(Unified Diagnosis Services)であればRequestDownloadやWriteDataByIdentifireなどの要求が該当する。書き込み要求である場合は(S402のYES)、セキュリティフィルタ100017により送信者がサーバ2であることが確認された対象ECU一覧504を読み出す(S403)。なおセキュリティフィルタ100017による検証が失敗し、対象ECU一覧504の送信者がサーバ2ではない、または要求されたECUが対象ECU一覧504に含まれないと判断すると、S403の読み出しが失敗して更新は行われない。
【0128】
次に、読み出した対象ECU一覧504に書き込み要求を指示されたECUが含まれるか否かを判定(S404)し、含まれない場合(S404のNO)は当該診断通信サービスを実行せずに応答を返す(S407)。検証済みの対象ECU一覧504に対象ECUが含まれる場合(S404のYES)は、診断通信パケットを生成し(S405)、通信制御部10007に当該パケットの送信を要求する(S406)。このように、診断通信サービスの実行前に対象ECUの確認を行うことで、不正な書き込み要求の送信を防止し、安全なスクリプトを実行することができる。
【0129】
上述した第2の実施の形態によれば、第1の実施の形態において説明した作用効果に加えて、次の作用効果が得られる。
(8)更新用スクリプト501には更新を中断する処理が含まれる。スクリプト実行部100013は、更新用スクリプト501に基づき更新を中断する。そのためゲートウェイ10は、ソフトウェアの更新中断も含めた柔軟なソフトウェアの更新処理が可能である。
【0130】
(9)スクリプト実行部100013は、第1スクリプト実行部1000131および第2スクリプト実行部1000132から構成される。第1スクリプト実行部1000131および第2スクリプト実行部1000132は、それぞれが異なる更新用スクリプト501を読み込み、それぞれが異なるECUのソフトウェアを更新する。そのためゲートウェイ10は、複数のECUの同時の更新を含む柔軟なソフトウェアの更新処理が可能である。
【0131】
(10)更新パッケージ5には、ECU更新データ503の検証に用いる検証情報が含まれる。ゲートウェイ10は、検証情報を用いて受信したECU更新データ503を検証するセキュリティフィルタ100017を備える。そのためゲートウェイ10は、受信したECU更新データ503の安全性を確認することができる。
【0132】
(第2の実施の形態の変形例1)
ゲートウェイ10は、セキュリティフィルタ100017を備えなくてもよい。その場合は、更新パッケージ5に検証情報が含まれなくてもよい。
【0133】
(第2の実施の形態の変形例2)
ゲートウェイ10は、3以上のスクリプト実行部を備え、3以上のECUのソフトウェアを同時に更新してもよい。
【0134】
(第2の実施の形態の変形例3)
サーバ2は、更新パッケージ5に検証情報を含める代わりに、共通秘密鍵または秘密鍵を用いて更新データ503を暗号化して送信してもよい。この場合はゲートウェイ10は、共通秘密鍵または公開鍵を用いて受信した更新データ503を復号化してECUのソフトウエアを更新する。
【0135】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。たとえば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることや各処理における処理の順番を入れ替えることも可能である。たとえば、本実施の形態ではソフトウェア更新装置はゲートウェイ10であるとしたが、通信モジュール11やHMI12がソフトウェア更新装置であってもよい。
【0136】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、たとえば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するソフトウェアを解釈し、実行することによりソフトウェアで実現してもよい。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【0137】
上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。