(57)【要約】【課題】差分復元時間を短縮する。【解決手段】更新対象である第１の不揮発性メモリ領域の更新対象ブロックへ書込む新プログラムと、第２の不揮発性メモリ領域の旧プログラム全体との第３のブロック差分データを、ブロック毎に車載制御装置へ送信し、ブロック差分データを揮発性メモリに格納し、第３のブロック差分データと第２の不揮発性メモリ領域に格納されている旧プログラム全体とを用いて、第１の不揮発性メモリ領域の更新対象ブロックの新プログラムを復元する第５の差分復元手段を備え、第５の差分復元手段を繰り返し実行することにより、復元された新プログラムを第１の不揮発性メモリ領域に書き込む。【選択図】図１
2018160208.tif 000002
【特許請求の範囲】
【請求項１】
書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置であって、
プログラムを格納する複数のブロックを備える第１の不揮発性メモリ領域と第２の不揮発性メモリ領域との２面構成の不揮発性メモリと、データを一時的に記憶する揮発性メモリと、を備え、
前記書き込み装置は、更新対象である前記第１の不揮発性メモリ領域の更新対象ブロックへ書込む前記新プログラムと、前記第２の不揮発性メモリ領域の前記旧プログラム全体との第３のブロック差分データ、または更新対象である前記第２の不揮発性メモリ領域の更新対象ブロックへ書込む前記新プログラムと前記第１の不揮発性メモリ領域の前記旧プログラム全体との第４のブロック差分データを、ブロック毎に車載制御装置へ送信し、
ブロック差分データを前記揮発性メモリに格納し、前記第３のブロック差分データと前記第２の不揮発性メモリ領域に格納されている前記旧プログラム全体とを用いて、前記第１の不揮発性メモリ領域の前記更新対象ブロックの前記新プログラムを復元する第５の差分復元手段と、
前記第４のブロック差分データと前記第１の不揮発性メモリ領域に格納されている前記旧プログラム全体とを用いて、前記第２の不揮発性メモリ領域の前記更新対象ブロックの前記新プログラムを復元する第６の差分復元手段と、を備え、
前記第５の差分復元手段または前記第６の差分復元手段を繰り返し実行することにより、復元された前記新プログラムを前記第１の不揮発性メモリ領域または前記第２の不揮発性メモリ領域に書き込むことを特徴とする車載制御装置。
【請求項２】
更新対象である前記第１の不揮発性メモリ領域の前記前記更新対象ブロックの前記新プログラムと、前記第２の不揮発性メモリ領域の前記旧プログラムが同一である場合には、前記第２の不揮発性メモリ領域の前記旧プログラムを前記第１の不揮発性メモリ領域の前記更新対象ブロックへコピーする第７のコピー手段と、
更新対象である前記第２の不揮発性メモリ領域の前記更新対象ブロックの前記新プログラムと、前記第１の不揮発性メモリ領域の前記旧プログラムが同一である場合には、前記第１の不揮発性メモリ領域の前記旧プログラムを前記第２の不揮発性メモリ領域の前記更新対象ブロックへコピーする第８のコピー手段と、
を備えたことを特徴とする請求項１の車載制御装置。
【請求項３】
前記第３のブロック差分データと前記第４のブロック差分データは、少なくとも差分データの有無情報を含むブロック差分ヘッダ部と、差分データ本体のブロック差分本体部と、を含み、
前記差分データの有無情報が差分データ有りの場合、前記第５の差分復元手段及び前記第６の差分復元手段により前記更新対象ブロックへ前記新プログラムを復元し、
前記差分データの有無情報が差分データ無しの場合、前記第７の差分復元手段及び前記第８のコピー手段により前記旧プログラムを前記更新対象ブロックへコピーする
ことを特徴とする請求項２の車載制御装置
【請求項４】
書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置であって、
前記プログラムを格納する複数のブロックを備える第１の不揮発性メモリ領域と第２の不揮発性メモリ領域との２面構成の不揮発性メモリと、データを一時的に記憶する揮発性メモリとを備え、
更新対象である前記第１の不揮発性メモリ領域の更新対象ブロックへ書込む前記新プログラムと、前記第２の不揮発性メモリ領域の前記旧プログラム全体との第３のブロック差分データ、または更新対象である前記第２の不揮発性メモリ領域の更新対象ブロックへ書込む前記新プログラムと前記第１の不揮発性メモリ領域の前記旧プログラム全体との第４のブロック差分データを、ブロック毎に車載制御装置へ送信し、
前記車載制御装置のプログラム更新ソフトウェアは、前記ブロック差分データを前記揮発性メモリに格納し、前記第３のブロック差分データと前記第２の不揮発性メモリに格納されている前記旧プログラム全体とを用いて前記第１の不揮発性メモリの前記更新対象ブロックの前記新プログラムを復元する第５の差分復元手段と、
前記第４のブロック差分データと前記第１の不揮発性メモリに格納されている前記旧プログラム全体とを用いて前記第２の不揮発性メモリの前記更新対象ブロックの前記新プログラムを復元する第６の差分復元手段と、を備え、
前記第５の差分復元手段または前記第６の差分復元手段を繰り返し実行することにより復元された前記新プログラムを前記第１の不揮発性メモリまたは前記第２の不揮発性メモリに書き込むことを特徴とする車載制御装置のプログラム更新ソフトウェア。
【請求項５】
更新対象である前記第１の不揮発性メモリ領域の前記更新対象ブロックの前記新プログラムと前記第２の不揮発性メモリ領域の前記旧プログラムが同一である場合には、前記第２の不揮発性メモリ領域の前記旧プログラムを前記第１の不揮発性メモリ領域の前記更新対象ブロックへコピーする第７のコピー手段と、
更新対象である前記第２の不揮発性メモリ領域の前記更新対象ブロックの前記新プログラムと前記第１の不揮発性メモリ領域の前記旧プログラムが同一である場合には、前記第１の不揮発性メモリ領域の前記旧プログラムを前記第２の不揮発性メモリ領域の前記更新対象ブロックへコピーする第８のコピー手段と、
を備えたことを特徴とする請求項４の車載制御装置のプログラム更新ソフトウェア。
【請求項６】
前記第３のブロック差分データと第４のブロック差分データは、少なくとも差分データの有無情報を含むブロック差分ヘッダ部と、差分データ本体のブロック差分本体部と、を含み、
前記差分データの有無情報が差分データ有りの場合、前記第５の差分復元手段と前記第６の差分復元手段により更新対象ブロックへ新プログラムを復元し、
前記差分データの有無情報が差分データ無しの場合、前記第７のコピー手段と前記第８のコピー手段により前記旧プログラムを前記更新対象ブロックへコピーする
ことを特徴とする請求項５の車載制御装置のプログラム更新ソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車載制御装置、及びプログラム更新ソフトウェアに関する。
【背景技術】
【０００２】
車載制御装置のリプログラミングは、低速なＣＡＮ（Controller Area Network）を介して書込みツールとしてのＰＣ（Personal Computer）または車載書込み装置と、車載制御装置（ＥＣＵ：Electric Control Unit）を接続し、バイナリーデータ（新プログラム）全体を分割転送しながらＥＣＵのフラッシュメモリへ書込みを行っている。
【０００３】
このため、旧プログラムに対する新プログラムの更新部分が小さい場合においても、新プログラム全体をＣＡＮ経由で転送し、新プログラム全体の書込みを行っている。
【０００４】
従って、書込みに要する時間がかかるという問題があった。これに対し、従来から差分によるリプログラミングの考え方が提案されている（例えば、特許文献１参照）。すなわち、特許文献１の段落〔００１９〕には、書き換え方式の１つとして「ブロック単位で新旧プログラムの差分データを作成する手段」が記載されている。さらに段落〔００６４〕には、更新対象ブロックの旧プログラムをＳＤＲＡＭへ転送して、差分データと旧プログラムを用いて新プログラムをＳＤＲＡＭへ復元し、更新対象ブロックを消去してから、新プログラムを書込んでいる。
【０００５】
特許文献２では、移動端末装置の差分によるソフトウェア更新方法が記載されている。段落〔００１５〕には、移動端末装置の不揮発性メモリ内に、各々、ソフトウェア更新のための更新エンジンを含む本体プログラムを格納する第１および第２のメモリ領域を設け、ソフトウェア更新時に、一方の本体プログラムのバージョンと新たな本体プログラムのバージョンとの差分データをダウンロードし、前記第１および第２のメモリ領域の一方の更新エンジンを作業用メモリ領域に展開し、前記作業用メモリ領域内更新エンジンを実行することによって前記差分データで当該本体プログラムを更新し、更新が成功したとき当該更新後の本体プログラムを現用の本体プログラムとして選択し、更新が失敗したとき前記作業用メモリ領域内の更新エンジン内に含めたダウンロード機能により他方の本体プログラムのバージョンと新たな本体プログラムのバージョンとの差分データをダウンロードし、前記作業用メモリ領域内の更新エンジンを実行することによって前記差分データで当該本体プログラムを更新し、更新が成功したとき当該更新後の本体プログラムを現用の本体プログラムとして選択する手段が記載されている。
【０００６】
しかし、差分データと一方の本体プログラムを用いて、どのような手段で新プログラムを復元するか明記されてはいない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−１９００７５号公報
【特許文献２】特開２００７−１８９３３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
車載制御装置は、数メガバイトの不揮発性メモリと１メガバイト以下の小さな揮発性メモリで構成した記憶装置で構成されることが多い。これはマイコンに内蔵されているメモリだけで制御を実現することで安価な車載制御装置を実現するためである。このため揮発性メモリへ新プログラム全体を復元することはできない。従って、新プログラムを複数のブロックに分割し、ブロック毎の新プログラムと不揮発性メモリに記憶されている旧プログラム全体とのブロック差分データを生成し、車載制御装置は前記ブロック差分データと不揮発性メモリの旧プログラム全体から当該ブロックの新プログラムを揮発性メモリへ復元し、その後に当該ブロックの新プログラムを不揮発性メモリへ書込む。このブロック単位の復元を繰返すことで新プログラム全体を不揮発性メモリへ書込むことが可能となり、かつ揮発性メモリの使用量をブロックサイズに限定することができる。
【０００９】
しかしながら、ブロック単位に複数回ブロック差分復元処理を繰返すため、オーバヘッドが存在し、復元性能を低下させる要因になる。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明の車載制御装置は一例として、書込み装置から提供される更新内容に基づいて、格納している旧プログラムを新プログラムヘ更新可能な車載制御装置であって、プログラムを格納する複数のブロックを備える第１の不揮発性メモリ領域と第２の不揮発性メモリ領域との２面構成の不揮発性メモリと、データを一時的に記憶する揮発性メモリと、を備え、前記書き込み装置は、更新対象である前記第１の不揮発性メモリ領域の更新対象ブロックへ書込む前記新プログラムと、前記第２の不揮発性メモリ領域の前記旧プログラム全体との第３のブロック差分データ、または更新対象である前記第２の不揮発性メモリ領域の更新対象ブロックへ書込む前記新プログラムと前記第１の不揮発性メモリ領域の前記旧プログラム全体との第４のブロック差分データを、ブロック毎に車載制御装置へ送信し、ブロック差分データを前記揮発性メモリに格納し、前記第３のブロック差分データと前記第２の不揮発性メモリ領域に格納されている前記旧プログラム全体とを用いて、前記第１の不揮発性メモリ領域の前記更新対象ブロックの前記新プログラムを復元する第５の差分復元手段と、前記第４のブロック差分データと前記第１の不揮発性メモリ領域に格納されている前記旧プログラム全体とを用いて、前記第２の不揮発性メモリ領域の前記更新対象ブロックの前記新プログラムを復元する第６の差分復元手段と、を備え、前記第５の差分復元手段または前記第６の差分復元手段を繰り返し実行することにより、復元された前記新プログラムを前記第１の不揮発性メモリ領域または前記第２の不揮発性メモリ領域に書き込む。
【発明の効果】
【００１１】
本発明によれば、差分復元時間を短縮することができる。
【図面の簡単な説明】
【００１２】
【図１】発明の実施形態による車両の全体構成を示す模式図である。
【図２】図１に示す車載制御装置のＳＲＡＭの内部の構成を示す模式図である。
【図３】図１に示す車載制御装置のＦＬＡＳＨメモリの内部の構成を示す模式図である。
【図４】(a)A面プログラム全体とB面ブロック毎の新プログラムからヘッダ付きブロック差分データの生成概要図と、(b)B面プログラム全体とA面ブロック毎の新プログラムからヘッダ付きブロック差分データの生成概要図である。
【図５】(a)A面プログラム全体とB#nのブロック差分データからブロックB#nの新プログラム復元概要図と、(b)B面プログラム全体とA#nのブロック差分データからブロックA#nの新プログラム復元概要図である。
【図６】A面更新ソフト３０４ＡとB面更新ソフト３０７のフローチャートである。
【図７Ａ】ブロック差分データ通信ソフトが車載書き込み装置から受信する通信コマンドの種類を示す図である。
【図７Ｂ】車載書込み装置１００から送信される通信コマンドのシーケンス図である。
【図８】ブロック差分データ通信ソフトのフローチャートである。
【図９】ブロック差分復元ソフトのフローチャートである。
【図１０】診断ソフトのフローチャートである。
【図１１】面切替えソフトのフローチャートである。
【発明を実施するための形態】
【００１３】
本実施例は、２面構成の不揮発性メモリのそれぞれにプログラムを配置した車載制御装置において、ブロック差分復元処理の性能を向上させる３つの手段を提供する。
【００１４】
第１のブロック差分復元処理性能向上手段は、既に述べているように、旧プログラム全体を参照して、ブロックの新プログラムを復元する手段である。もちろん、ブロックの新プログラムと旧プログラム全体を参照して、当該ブロックの差分データを生成することが前提である。つまり、ブロックの差分データ生成は、新プログラムの部分命令列と類似した部分命令列を旧プログラムから検索して、短い符号に変換することが基本なので、参照できる範囲が広いほど、ブロック差分データサイズを小さくできる。これは、２面構成の不揮発性メモリゆえに可能なことである。２面構成であれば、差分更新中に片面の旧プログラムは全く変更されない。更新されるのは他方の面である。もし１面構成であれば、ブロックの新プログラムを揮発性メモリに復元した後に、どうしても旧プログラムの一部のブロックを更新せざるをえない。このため、旧プログラム全体を参照してブロックの新プログラムを復元する手段は、２面構成ゆえの手段である。
【００１５】
第２のブロック差分復元処理性能向上手段は、同一ブロック間のデータコピー手段である。もし第１不揮発性メモリのブロックの旧プログラムと第２不揮発性メモリの当該ブロックの新プログラムが同一内容であった場合、差分復元処理を省略して、第１不揮発性メモリの当該ブロックの旧プログラムを第２不揮発性メモリの当該ブロックへコピーすれば高速に処理することができる。逆に言えば、旧プログラム全体と新プログラム全体から１つに差分データを生成した場合、復元処理をした後に当該ブロックへ新プログラムを書込むことになり、効率が低下する。
【００１６】
第３の手段は、ブロック差分データをブロック差分本体データと、ブロック差分本体データサイズを含むブロック差分ヘッダで構成し、ブロック差分データを受信すると、そのヘッダ内のブロック差分本体データサイズを参照して、サイズが０で無ければ第１の手段でブロック差分復元を行い、サイズが０であれば、第２の手段で同一ブロック間のデータコピーを行う。
【００１７】
このように、第３の手段は、ブロック差分本体データにブロック差分ヘッダを付加することで、第１の手段と第２の手段を組み合わせてブロック毎の新プログラムを高速に復元する手段である。
【００１８】
以下、図面を用いて本発明の実施形態による車載制御装置を含む車両の構成及び動作を説明する。
【００１９】
車両は、車載書き込み装置１００（ゲートウェイ）、複数の車載制御装置２００（２００１〜２００ｎ）を備える。車載書き込み装置１００と車載制御装置２００は、相互に車載ネットワークＣＡＮを介して通信する。
【００２０】
車載制御装置２００は、マイコン２０１、車載制御装置２００毎の用途に応じた各種のＩＣ（Integrated Circuit）２０４、ＣＡＮトランシーバなどの通信装置２０５を備える。マイコン２０１は、ＳＲＡＭ２０２（揮発性メモリ）、ＦＬＡＳＨメモリ２０３（不揮発性メモリ）を内蔵する。
【００２１】
なお、車載書き込み装置１００の構成も車載制御装置２００の構成と基本的に同じであるが、車両の外部のネットワークのプロトコルに応じた通信装置をさらに備える。すなわち、車載書き込み装置１００は、マイコン１０１、各種のＩＣ１０４、ＣＡＮトランシーバなどの通信装置１０５、車両の外部のネットワークのプロトコルに応じた通信装置１０６を備える。マイコン１０１は、ＳＲＡＭ１０２、ＦＬＡＳＨメモリ１０３を内蔵する。
【００２２】
次に、図２を用いて、車載制御装置２００のＳＲＡＭ２０２の構成を説明する。図２は、図１に示すＳＲＡＭ２０２の内部の構成を示す模式図である。
【００２３】
ＳＲＡＭ２０２は、車載書込み装置１００から送信された差分データを一時的に記憶するための受信エリア２０２ａ、差分データを用いて差分復元した復元プログラムを一時的に記憶するための復元エリア２０２ｂを備える。
【００２４】
次に、図３を用いて、ＦＬＡＳＨメモリ２０３の構成を説明する。図３は、図１に示すＦＬＡＳＨメモリ２０３の内部の構成を示す模式図である。ＦＬＡＳＨメモリ２０３は、
第１不揮発性メモリ３０１（Ａ面配置プログラム）と、第２不揮発性メモリ３０２（Ｂ面配置プログラム）と、第３不揮発性メモリ３０９（実行面を指示する変数selectareaを格納している）で構成されている。
【００２５】
第１不揮発性メモリ３０１は、プリブート３０３とＡ面ブート３０４とＡ面更新ソフト３０４ＡとＡ面プログラム３０５で構成されている。一方、第２不揮発性メモリ３０２（Ｂ面配置プログラム）は、Ｂ面ブート３０６とＢ面更新ソフト３０７とＢ面プログラム３０８で構成されている。ここで、プリブート３０３は、車載制御装置がパワーオンまたはイグニッションオンした場合に、最初に実行される初期化プログラムが搭載されており、ＳＲＡＭ２０２などの初期化後に第３不揮発性メモリ３０９の変数selectareaを参照して、その値に従ってＡ面ブート３０４またはＢ面ブート３０６のいずれかに分岐する。すなわち、selectareaには、実行すべき面情報（Ａ面またはＢ面情報）が格納されている。もしＡ面ブート３０４へ分岐した場合は、Ａ面プログラム３０５のサム値チェックなどの診断を行った後、Ａ面プログラム３０５内のＯＳ立ち上げに必要な初期化や各種タイマ設定などの処理を行い、更新対象であるＡ面プログラム３０５を実行する。
【００２６】
これにより、車載制御装置２００は正常に動作可能となる。Ａ面更新ソフト３０４ＡはＡ面プログラム３０５実行中にソフトウェア更新指示が通知されると、実行されるプログラムである。Ａ面更新ソフト３０４Ａは、本発明の第１〜３手段を実現するブロック差分データ通信ソフト６０１とブロック差分復元ソフト６０２と診断ソフト６０４と面切換えソフト６０５で構成されており（図６参照）、Ｂ面プログラム３０８を差分更新するソフトウェアである。
【００２７】
一方、第２不揮発性メモリ３０２のＢ面ブート３０６へ分岐した場合は、同様にＢ面プログラム３０８のサム値チェックなどの診断を行った後、Ｂ面プログラム３０８内のＯＳ立ち上げに必要な初期化や各種タイマ設定などの処理を行い、更新対象であるＢ面プログラム３０８を実行する。
【００２８】
これにより、車載制御装置２００は正常に動作可能となる。Ｂ面更新ソフト３０７はＢ面プログラム３０８実行中にソフトウェア更新指示が通知されると、実行されるプログラムである。Ｂ面更新ソフト３０７は、同様に本発明の第１〜３手段を実現するブロック差分データ通信ソフト６０１とブロック差分復元ソフト６０２と診断ソフト６０４と面切換えソフト６０５で構成されており（図６参照）、Ａ面プログラム３０５を差分更新するソフトウェアである。
【００２９】
本実施形態では、一例として、ＦＬＡＳＨメモリ２０３のサイズは２ＭＢとしている。ここで、ブロックA#n, B#n（n = 1〜7）とは、消去可能な最小サイズである。例えば、ブロックB#nにデータを書き込む場合、ブロックB#n全体を消去してからデータを書き込む必要がある。
【００３０】
次に図４を用いて、ヘッダ付きブロック差分データの生成概要を説明する。
【００３１】
まず(a)A面プログラム全体とB面ブロック毎の新プログラムからヘッダ付きブロック差分データの生成を説明する。
【００３２】
A面プログラム３０５とB面ブロックB#n(n = 1〜7)毎の新プログラムからブロックB#n (n = 1〜7)毎のブロック差分データ４１０を生成する。生成の第１ステップは、ブロックA#nとブロックB#n (n = 1〜7)のデータ一致チェックである。例として、もしA#4とB#4のデータが一致すれば、B#4のブロック差分ヘッダ４２０内のブロック差分本体データサイズを０に設定したブロック差分データを生成する。もちろんブロック差分本体データは付属しない。
【００３３】
もしA#4とB#4のデータが不一致であれば、A面プログラム３０５全体とブロックB#4の新プログラムからB#4のブロック差分本体データ４３０を生成し、次にB#4のブロック差分ヘッダ４２０内のブロック差分本体データサイズへそのサイズを設定する。
【００３４】
以上でB#4のブロック差分データが生成できた。この生成処理をブロック毎に繰返すことで、B面新プログラム４００のヘッダ付きブロック差分データを全て生成できる。
【００３５】
次に、(b)B面プログラム全体とA面ブロック毎の新プログラムからヘッダ付きブロック差分データの生成を説明する。
【００３６】
B面プログラム３０８とA面ブロックA#n(n = 1〜7)毎の新プログラムからブロックA#n (n = 1〜7)毎のブロック差分データ４５０を生成する。生成の第１ステップは、同様に、ブロックA#nとブロックB#n (n = 1〜7)のデータ一致チェックである。例として、もしA#4とB#4のデータが一致すれば、A#4のブロック差分ヘッダ４６０内のブロック差分本体データサイズを０に設定し、A#4のブロック差分データを生成する。もちろんブロック差分本体データは付属しない。
【００３７】
もしA#4とB#4のデータが不一致であれば、B面プログラム３０８全体とブロックA#4の新プログラムからA#4のブロック差分本体データ４７０を生成し、次にA#4のブロック差分ヘッダ４６０にブロック差分本体データサイズを設定する。以上でA#4のブロック差分データが生成できた。この生成処理をブロック毎に繰返すことで、A面新プログラム４４０のヘッダ付きブロック差分データを全て生成できる。
【００３８】
次に、図５を用いて車載制御装置が行う第１〜３手段の概要を説明する。
【００３９】
Ａ面配置プログラム３０１は第１不揮発性メモリに配置されたプログラムである。前述したように、リセットやイグニッションＯＮ時に最初に実行するＰＲＥＢＯＯＴと、第３不揮発性メモリ内の変数selectareaの値が“Ａ面”である時に実行されるＢＯＯＴ＃Ａ、第１〜第３手段を実現する更新ソフト３０４Ａが配置されているＤＩＦＦ＃Ａ，Ａ面プログラム３０５で構成されている。ブロックB#nのブロック差分データは、B#nのブロック差分ヘッダ５００とB#nのブロック差分本体データ５１０で構成されている。
【００４０】
更新ソフト３０４Ａの処理概要５３０は、第３の手段によりB#nのブロック差分ヘッダ５００内のブロック差分本体データサイズを参照し、もしブロック差分本体データサイズ＝０ならば第１不揮発性メモリのブロックA#nを第２不揮発性メモリのブロックB#nヘコピーする（第２の手段）。一方、もしブロック差分本体データサイズ≠０ならば第１の手段により第１不揮発性メモリのＡ面プログラム３０５全体とB#nのブロック差分本体データ５１０からブロック差分復元手段を用いてブロックB#nの新プログラム５２０を復元する。この操作を各ブロック毎に繰返して第２不揮発性メモリへＢ面の新プログラムを書込むことができる。
【００４１】
同様に、Ｂ面プログラムとA#nのブロック差分データを用いて第１不揮発性メモリへＡ面の新プログラムを書込む操作を説明する。
【００４２】
まず、Ｂ面配置プログラム３０８は第２不揮発性メモリに配置されたプログラムである。同様に、ＰＲＥＢＯＯＴが第３不揮発性メモリ内の変数selectareaを参照し、その値が“Ｂ面”である時に実行されるＢＯＯＴ＃Ｂ、第１〜第３手段を実現する更新ソフト３０７が配置されているＤＩＦＦ＃Ｂ，Ｂ面プログラム３０８で構成されている。ブロックA#nのブロック差分データは、A#nのブロック差分ヘッダ５４０とA#nのブロック差分本体データ５５０で構成されている。
【００４３】
更新ソフト３０７の処理概要５７０は、第３の手段によりA#nのブロック差分ヘッダ５４０内のブロック差分本体データサイズを参照し、もしブロック差分本体データサイズ＝０ならば第２不揮発性メモリのブロックB#nを第１不揮発性メモリのブロックA#nヘコピーする（第２の手段）。一方、もしブロック差分本体データサイズ≠０ならば第１の手段により第２不揮発性メモリのＢ面プログラム３０８全体とA#nのブロック差分本体データ５５０からブロック差分復元手段を用いてブロックA#nの新プログラム５６０を復元する。この操作を各ブロック毎に繰返して第１不揮発性メモリへＡ面の新プログラムを書込むことができる。
【００４４】
以上、第１〜第３手段の概要を説明した。次に図６〜図１１を用いてその動作を詳しく説明する。
【００４５】
図６は、Ａ面更新ソフト３０４ＡとＢ面更新ソフト３０７のフローチャートである。ブロック差分データ通信ソフト６０１は、車載書込み装置１００から送信されたブロック差分データを受信し、そのブロック差分ヘッダ内のブロック差分本体データサイズの値に応じてブロック間のデータコピー処理や、ブロック差分復元ソフト６０２を実行する。次に６０３で全てのブロック差分データを受信完了したか判定し、noならば６０１へ分岐して次のブロック差分データを受信する。一方、yesならば新プログラムが第１不揮発性メモリまたは第２不揮発性メモリへ復元完了したので、診断ソフト６０４を実行して正常に書込み完了したかチェックする。もし診断結果が正常ならば面切替えソフト６０５を実行して、第３不揮発性メモリ内の変数selectareaを変更する。以上により、車載制御装置２００をリセットすれば、ＰＲＥＢＯＯＴが起動し、変数selectareaを参照して新プログラムが起動できる。
【００４６】
次に、図７Aを用いて車載書込み装置１００から送信され、ブロック差分データ通信ソフト６０１が受信する通信コマンドの種類を説明する。
【００４７】
７００の通信コマンド$00は、選択面と選択プログラムバージョンを要求するコマンドである。本通信コマンドの応答により、車載書き込み装置１００は、現在実行しているプログラムがＡ面またはＢ面なのか知ることができる。またそのプログラムバージョンを確認した上で正しいブロック差分データを車載制御装置２００へ送信することができる。
【００４８】
７１０の通信コマンド$10は、ブロック差分データ送信開始コマンドである。本通信コマンド以降に送信するデータがブロック差分データであることを車載制御装置２００へ通知するために使用する。
【００４９】
７２０の通信コマンド$20 MA MSは、差分復元対象エリアを車載制御装置２００へ通知するコマンドである。MAはエリアの先頭アドレスであり、MSはエリアのサイズである。
【００５０】
７３０の通信コマンド$30 DATAは、ブロック差分データ送信コマンドである。DATAは、ブロック差分ヘッダとブロック差分本体データである。
【００５１】
７４０の通信コマンド$40は、ブロック差分データ送信終了コマンドである。
このように、１つのブロック差分データは、７２０、７３０、７４０の３つの通信コマンドで送信され、この３つの通信コマンドが繰返し送信することで全てのブロック差分データが車載制御装置２００へ送信する。
【００５２】
７５０の通信コマンド$50 MA MSは、診断開始コマンドである。MAは診断エリアの先頭アドレスであり、MSは診断エリアのサイズである。診断は、サム値チェックで行う。新プログラムの正しいサム値は、新プログラムの定められたアドレスに書き込まれており、車載制御装置２００は、そのアドレスを知っているものとする。
【００５３】
７６０の通信コマンド$60は、面切替え指示コマンドである。本コマンドにより変数selectareaの値を反対の面へ切替える。
【００５４】
図７Bを用いて、車載書込み装置１００が送信する通信コマンドのシーケンスを説明する。
【００５５】
７７０は、通信コマンド 選択面と選択プログラムバージョン要求 ＄００を送信する。
通信コマンド＄００の応答として、車載制御装置２００から選択面とそのプログラムのバージョン情報が返信される。
【００５６】
７７１は、通信コマンド ブロック差分データ送信開始 ＄１０を送信する。
【００５７】
７７２は、通信コマンド 差分復元対象エリア指定 ＄２０を送信する。
【００５８】
７７３は、通信コマンド 差分復元対象エリアのブロック差分データ ＄３０を送信する。
【００５９】
７７４は、通信コマンド ブロック差分データ送信終了 ＄４０を送信する。
【００６０】
７７５は、全てのブロックの差分データを送信したか判定し、もしyesならば７７６を実行し、もしnoならば７７２〜７７５を繰返し実行する。
【００６１】
７７６は、通信コマンド 診断開始 ＄５０を送信する。
【００６２】
７７７は、通信コマンド 面切替え指示 ＄６０を送信する。
【００６３】
以上で、車載書込み装置１００は、通信コマンドを車載制御装置２００へ送信できた。
【００６４】
以上の通信コマンドを受信してブロック差分データ通信ソフト６０１は動作する。
【００６５】
図８は、ブロック差分データ通信ソフト６０１のフローチャートである。
【００６６】
８００で、車載書込み装置１００から通信コマンドＣＭＤを受信する。
【００６７】
８０１では、通信コマンドＣＭＤが$00であるか判定し、yesならば８０５を実行し、noならば８１０を実行する。８０５は、第３不揮発性メモリの変数selectareaの値と、selectarea指示面に配置されているプログラムのバージョンを読み出し、車載書込み装置１００へ返信する。８１０では、通信コマンドＣＭＤが$10であるか判定し、yesならば８１５を実行し、noならば８２０を実行する。
【００６８】
８１５ではブロック差分本体データを格納するための受信エリア202aと復元エリア202bを初期化する。
【００６９】
８２０では、通信コマンドＣＭＤが$20であるか判定し、yesならば８２５を実行し、noならば８３０を実行する。
【００７０】
８２５では、差分復元対象エリアの先頭アドレスMAとサイズMSを記憶する。
【００７１】
８３０では、通信コマンドＣＭＤが$30であるか判定し、yesならば８３５を実行し、noならば８４０を実行する。
【００７２】
８３５では、ＤＡＴＡ内のブロック差分本体データを受信エリア202aヘ格納し、ブロック差分ヘッダ内のブロック差分本体データサイズを読み出して変数ＳＩＺＥに記憶する。
【００７３】
８４０では、通信コマンドＣＭＤが$40であるか判定し、yesならば８４５を実行し、noならば８５０を実行する。
【００７４】
８４５は、第１〜第３手段を実現している処理である。まず、第３不揮発性メモリの変数selectareaと変数ＳＩＺＥを参照して、４つの組合せに応じたケースの処理を行う。
【００７５】
第１のケースは、selectarea＝“Ａ面”かつＳＩＺＥ＝０の場合である。このケースでは、第１不揮発性メモリのブロックA#nのデータを第２不揮発性メモリB#nヘコピーする。
【００７６】
第２のケースは、selectarea＝“Ａ面”かつＳＩＺＥ≠０の場合である。このケースでは、ブロック差分復元ソフト６０２を実行して、その復元結果を復元エリア202bヘ格納する。さらに復元エリア202bの復元データを第２不揮発性メモリのブロックB#n（先頭アドレスMA, サイズMS）ヘ書込む。
【００７７】
第３のケースは、selectarea＝“Ｂ面”かつＳＩＺＥ＝０の場合である。このケースでは、第２不揮発性メモリのブロックB#nのデータを第１不揮発性メモリA#nヘコピーする。
【００７８】
第４のケースは、selectarea＝“Ｂ面”かつＳＩＺＥ≠０の場合である。このケースでは、ブロック差分復元ソフト６０２を実行して、その復元結果を復元エリア202bヘ格納する。さらに復元エリア202bの復元データを第１不揮発性メモリのブロックA#n（先頭アドレスMA, サイズMS）ヘ書込む。
【００７９】
８５０では、通信コマンドＣＭＤが$50であるか判定し、yesならば８５５を実行し、noならば８６０を実行する。
【００８０】
８５５では先頭アドレスMAとサイズMSで指示された診断エリアを診断ソフト６０４を実行してサム値による診断を行う。診断結果が正常ならば“正常”を記憶し、診断結果が異常ならば“異常”を記憶する。
【００８１】
８６０では通信コマンドＣＭＤが$60であるか判定し、yesならば８６５を実行し、noならば１つのブロック差分データによる新プログラムは書込み完了したので、通信コマンド処理を終了する。しかし、図６の６０３から、全てのブロック差分データを受信完了するまでブロック差分データ通信ソフト６０１は実行されることがわかる。
【００８２】
８６５は、第３不揮発性メモリの変数selectareaの値を変更するため、面切替えソフト６０５を実行する。
【００８３】
図９は、ブロック差分復元ソフト６０２のフローチャートである。
【００８４】
最初に、一般的な差分生成・差分復元ソフトの概要について説明する。差分生成ソフトは、差分抽出処理部において、新プログラムの部分命令列と類似の部分命令列を旧プログラムから検索して見つけ出し、その部分命令列を短い符号に置き換えてコピーコマンドに付属させる。一方、類似の部分命令列が見つからない場合には、追加コマンドにその部分命令列を付属させる。このコピーコマンドと追加コマンドの列が差分データである。このように、差分データとは、単に新プログラムから旧プログラムを減算した結果では無く、類似部分名列を短い符号に置き換えたコピーコマンドや追加コマンドなどの列で構成されている。
【００８５】
以上の準備を踏まえて、ブロック差分復元ソフト６０２の動作を説明する。
【００８６】
９００は、受信エリア２０２aのブロック差分本体データから差分コマンドを読み出す。
【００８７】
９１０で差分コマンドを解析し、９２０で差分コマンドがコピーコマンドか判定し、yesならば９２５で付属する符号から変数selectareaで指示された面のプログラムの部分命令列を復元エリア２０２bへ書込む。もしnoならば、９３０を実行する。
【００８８】
９３０では差分コマンドが追加コマンドか判定し、yesなら９３５の追加コマンドに付属するデータ（部分命令列）を復元エリア２０２bヘ追加書込みをする。もしnoならば、９４０を実行する。
【００８９】
９４０では、受信エリア２０２aの差分コマンドを全て読み出したか判定し、yesなら、差分復元処理は終了である。もしnoならば、９００へ戻って処理を繰返す。
【００９０】
以上で、差分復元した復元プログラムが復元リア２０２bに格納できたことになる。
【００９１】
図１０は、診断ソフト６０４のフローチャートである。
【００９２】
１０００では、新プログラム内の予め定められた特定アドレスに配置されている“新プログラムのサム値”を読み出し、変数ＳＵＭへ記憶する。
【００９３】
１０１０では、先頭アドレスＭＡ，サイズＭＳのエリアに書き込まれた新プログラムのデータを４バイト単位で加算し、その加算結果を変数Ｓへ記憶する。
【００９４】
１０２０では、変数ＳＵＭと変数Ｓの一致チェックを行い、一致した場合１０２５を実行し、不一致の場合１０３０を実行する。１０２５では、診断結果が正常なので、診断結果として“正常”を記憶する。１０３０では、診断結果が異常なので、診断結果として“異常”を記憶して終了する。
【００９５】
図１１は、面切替えソフト６０５のフローチャートである。
【００９６】
１１００では、診断結果が“異常”か判定し、yesならば終了する。すなわち新プログラムへ切替えは行わずに、現時点のプログラムで車載制御装置２００を実行することになる。
【００９７】
一方、noであれば、１１２０を実行する。１１２０では、現時点の変数selectareaの値が“Ａ面”か判定し、yesならば１１３０を実行し、noならば１１４０を実行する。１１３０では、変数selectareaを“Ｂ面”へ変更する。１１４０では変数selectareaを“Ａ面”へ変更する。以上で、新プログラムを実行可能にできた。
【符号の説明】
【００９８】
１００…車載書込み装置（ゲートウェイ）
１０１…マイコン（演算装置）
１０２…ＳＲＡＭ（揮発性メモリ）
１０３…ＦＬＡＳＨメモリ（不揮発性メモリ）
１０４…各種のＩＣ
１０５…通信装置（ＣＡＮプロトコル）
１０６…通信装置（車両の外部のネットワークのプロトコル）
２００…車載制御装置（ＥＣＵ）
２０１…マイコン（演算装置）
２０２…ＳＲＡＭ（揮発性メモリ）
２０３…ＦＬＡＳＨメモリ（不揮発性メモリ）
２０４…各種のＩＣ
２０５…通信装置（ＣＡＮプロトコル）
２０２a…受信エリア
２０２b…復元エリア
３０１…第１不揮発性メモリ（Ａ面配置プログラム）
３０２…第２不揮発性メモリ（Ｂ面配置プログラム）
３０３…プリブート（変数selectareaを参照してＡ面またはＢ面へ分岐するプログラム）
３０４…Ａ面ブート（Ａ面配置プログラムの初期化処理プログラム）
３０４Ａ…Ａ面更新ソフト（第１〜第３手段を実行するソフト）
３０５…Ａ面プログラム（Ａ面の更新対象プログラム）
３０６…Ｂ面ブート（Ｂ面配置プログラムの初期化処理プログラム）
３０７…Ｂ面更新ソフト（第１〜第３手段を実行するソフト）
３０８…Ｂ面プログラム（Ｂ面の更新対象プログラム）
３０９…第３不揮発性メモリ（実行面を指示する変数selectarea格納エリア）
４００…Ｂ面の新プログラム
４１０…ブロック差分データ
４２０…ブロックB#nのブロック差分ヘッダ
４３０…ブロックB#nのブロック差分本体データ
４４０…Ａ面の新プログラム
４５０…ブロック差分データ
４６０…ブロックA#nのブロック差分ヘッダ
４７０…ブロックA#nのブロック差分本体データ
５００…ブロックB#nのブロック差分ヘッダ
５１０…ブロックB#nのブロック差分本体データ
５２０…ブロックB#nの新プログラム
５３０…Ａ面更新ソフト３０４Ａの処理概要図
５４０…ブロックA#nのブロック差分ヘッダ
５５０…ブロックA#nのブロック差分本体データ
５６０…ブロックA#nの新プログラム
５７０…Ｂ面更新ソフト３０７の処理概要図
６０１…ブロック差分データ通信ソフト
６０２…ブロック差分復元ソフト
６０４…診断ソフト
６０５…面切替えソフト
【図１】
2018160208.tif 000003
【図２】
2018160208.tif 000004
【図３】
2018160208.tif 000005
【図４】
2018160208.tif 000006
【図５】
2018160208.tif 000007
【図６】
2018160208.tif 000008
【図７Ａ】
2018160208.tif 000009
【図７Ｂ】
2018160208.tif 000010
【図８】
2018160208.tif 000011
【図９】
2018160208.tif 000012
【図１０】
2018160208.tif 000013
【図１１】
2018160208.tif 000014