(57)【要約】      （修正有）【課題】高速かつ容易にリプログラミングを行うことができる車載制御装置、プログラム書き込み装置、プログラム生成装置及びプログラムを提供する。【解決手段】ＥＣＵ３００は、マイコン、ＳＲＡＭ、ＦＬＡＳＨメモリ及び通信装置を備える。ＦＬＡＳＨ（登録商標）メモリは、複数のブロックから構成され、旧プログラムを記憶する。通信装置は、ブロックデータ、ブロックデータの種類及びブロックデータを書き込むブロックのアドレスを含むフレームを受信する（Ｓ２５０）。マイコンは、ブロックデータの種類に応じて（Ｓ２５５、Ｓ２６０）、ブロックデータから新プログラムをＳＲＡＭに復元し（Ｓ２６０）、復元された新プログラムの１片をアドレスに対応するブロックへ書き込む（Ｓ２６５、Ｓ２７０）。【選択図】図２１
2019061690.tif 000002
【特許請求の範囲】
【請求項１】
複数のブロックから構成され、旧プログラムを記憶する不揮発性メモリと、
揮発性メモリと、
前記旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データ、又は前記第２のデータを圧縮した圧縮データを含んで構成されるブロックデータ、前記ブロックデータの種類、前記ブロックの書込みアドレスを含むフレームを受信する通信装置と、
前記ブロックデータの種類に応じて、前記第２のデータを前記揮発性メモリに復元し、復元された前記第２のデータを前記ブロックの書込みアドレスへ書き込む演算装置と、
を備えることを特徴とする車載制御装置。
【請求項２】
複数のブロックから構成され、車両制御装置の不揮発性メモリに記憶される旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと、新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データ、又は前記第２のデータを圧縮した圧縮データを含んで構成されるブロックデータに前記ブロックデータの種類を付加したフレームを生成する演算装置と、
前記フレームを車載制御装置へ送信する通信装置と、
を備えるプログラム書き込み装置。
【請求項３】
車両制御装置の不揮発性メモリに記憶されたプログラムと同じ旧プログラム、及び前記旧プログラムを更新した新プログラムを記憶する記憶装置と、
前記旧プログラムを前記不揮発性メモリのブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータ及び前記新プログラムを前記不揮発性メモリの前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータを生成する分割部、前記第１のデータと前記第２のデータの差分を生成する差分生成部、前記差分を圧縮した差分圧縮データを生成する圧縮部、及び前記差分圧縮データのサイズが基準値以上の場合、前記第２のデータを圧縮した圧縮データを生成し、前記差分圧縮データまたは前記圧縮データのいずれか小さい方をブロックデータとして選択する選択部を有する演算装置と、
前記ブロックデータを前記車載制御装置へ送信する通信装置と、
を備えることを特徴とするプログラム生成装置。
【請求項４】
旧プログラムを不揮発性メモリのブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと、新プログラムを前記不揮発性メモリの前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を生成する差分生成工程と、
前記差分を圧縮した差分圧縮データ、又は前記第２のデータを圧縮した圧縮データのいずれかを出力する選択工程と、
を演算装置に実行させるプログラム。
【請求項５】
圧縮データを伸長する伸長工程と、
前記伸長工程により生成されたデータが、旧プログラムを不揮発性メモリのブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと新プログラムを前記不揮発性メモリの前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分、又は前記第２のデータそのものであるか否かを判定するデータ種類判定工程と、
前記差分と前記不揮発性メモリの前記ブロックに格納された旧プログラムから新プログラムを復元する差分復元工程と、
前記データ種類判定工程によりデータの種類が差分であると判定された場合、前記差分復元工程により復元された新プログラムを出力し、前記データ種類判定工程によりデータの種類が前記第２のデータそのものであると判定された場合、前記第２のデータを出力する出力工程と、
を演算装置に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車載制御装置、プログラム書き込み装置、プログラム生成装置及びプログラムに関する。
【背景技術】
【０００２】
従来のリプログラミングでは、低速なＣＡＮ（Controller Area Network）を介して書込みツールとしてのＰＣ（Personal Computer）と車載制御装置（ＥＣＵ：Engine Contro
l Unit）を接続し、ロードモジュール（新プログラム）を分割転送しながらＥＣＵのフラッシュメモリへ書込みを行っている。
【０００３】
また、旧プログラムに対する新プログラムの更新部分が小さい場合においても、新プログラム全体をＣＡＮ経由で転送し、新プログラム全体の書込みを行っている。
【０００４】
従って、書込みに要する時間がかかるという問題があった。これに対し、従来から差分リプログラミングの考え方が提案されている（例えば、特許文献１参照）。すなわち、特許文献１の段落〔００２０〕には、書き換え方式の１つとして「差分書換」が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−０８１６０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に開示されるような技術では、一般的に新プログラム全体と旧プログラム全体の差分を送信する。
【０００７】
しかし、ＥＣＵのマイコンでは、プログラムを格納するＦＬＡＳＨメモリのサイズは大きいが、ワークメモリとして用いられるＳＲＡＭ（Static Random Access Memory）のサイズは小さい。そのため、新プログラム全体と旧プログラム全体の差分をＳＲＡＭに記憶し、新プログラム全体を復元することが困難であった。
【０００８】
本発明の目的は、高速かつ容易にリプログラミングを行うことができる車載制御装置、プログラム書き込み装置、プログラム生成装置及びプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明の基本的な考え方は、ＥＣＵのマイコンに内蔵されているＦＬＡＳＨメモリが複数のブロックで構成されている点に着目し、新プログラムと旧プログラムをブロック単位に分割し、当該ブロックの新プログラムと複数ブロックの旧プログラムとの差分を圧縮した差分圧縮データを車両制御装置へ転送し、車両制御装置側で受信した差分圧縮データを伸長してＦＬＡＳＨメモリの複数ブロックの旧プログラムを用いて新プログラムを復元して、ＦＬＡＳＨメモリの当該ブロックへ書込むことを各ブロックごとに繰返すことを基本にしている。これにより、差分をさらに圧縮していることから、小さなＳＲＡＭでもブロック単位に復元することで新プログラム全体を復元できるようになる。当然ながら、ＳＲＡＭのサイズに余裕があれば、新プログラムも複数のブロック単位に差分圧縮データを生成し、復元しても良い。また本発明は、新旧プログラムの単純な差分では無く、差分を圧縮した差分圧縮データによる書込み時間短縮を目的としている。
【００１０】
以上の基本的な考え方を基本にして、本発明は、複数のブロックから構成され、旧プログラムを記憶する不揮発性メモリ(ＦＬＡＳＨ)と、揮発性メモリ(ＳＲＡＭ)と、前記ブロック毎のサイズで分割し、当該ブロックの新プログラムと複数のブロックの旧プログラムとの差分を生成して圧縮した差分圧縮データまたは当該ブロックの新プログラムを圧縮した圧縮データを含む構成のブロックデータ、前記ブロックデータの種類、及び不揮発性メモリ(ＦＬＡＳＨ)の前記ブロックのアドレスを含むフレームを受信する通信装置と、前記ブロックデータの種類に応じて、前記ブロックデータと複数ブロックの旧プログラムから当該ブロックの新プログラムを揮発性メモリ(ＳＲＡＭ)に復元したり、前記ブロックデータから当該ブロックの新プログラムを揮発性メモリ(ＳＲＡＭ)に復元して、復元された当該ブロックの新プログラムを前記アドレスに対応する当該ブロックへ書き込む演算装置と、備えるようにしたものである。
【発明の効果】
【００１１】
本発明によれば、高速かつ容易にリプログラミングを行うことができる。上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１２】
【図１】発明の実施形態によるシステムの全体構成を示す模式図である。
【図２】図１に示すＰＣの構成図である。
【図３】図１に示す車載システムの構成図である。
【図４】図３に示すＥＣＵのＳＲＡＭの内部の構成を示す模式図である。
【図５】図３に示すＥＣＵのＦＬＡＳＨメモリの内部の構成を示す模式図である。
【図６】差分圧縮データ生成ソフトの構成図である。
【図７】圧縮データ生成ソフトの構成図である。
【図８】選択機能付き差分圧縮データ生成ソフトの構成図である。
【図９】制約機能付き差分圧縮データ生成ソフトの構成図である。
【図１０】図１のＰＣの処理を示す選択機能付き差分圧縮データ生成ソフトのフローチャートである。
【図１１】図１のＰＣの処理を示す制約機能付き差分圧縮データ生成ソフトのフローチャートである。
【図１２】小変更の新プログラムにおけるブロック選択の概要である。
【図１３】大きなプログラムが追加された新プログラムにおけるブロック選択の概要である。
【図１３Ａ】大きなプログラムが追加された新プログラムにおける複数の旧ブロック選択の概要である。
【図１３Ｂ】大きなプログラムが削除された新プログラムにおける複数の旧ブロック選択の概要である。
【図１４】ブロック選択のフローチャートである。
【図１４Ａ】大きなプログラムが追加された新プログラムにおける複数の旧ブロック選択時のフローチャートである。
【図１４Ｂ】大きなプログラムが削除された新プログラムにおける複数の旧ブロック選択時のフローチャートである。
【図１５】図１に示すサーバの処理を示すフローチャートである。
【図１６】図３に示すゲートウェイの処理を示すフローチャートである。
【図１７】ゲートウェイが生成するフレームの構成図の一例である。
【図１８】復元ソフトの構成図である。
【図１９】選択機能付き差分圧縮データ生成ソフトと制約機能付き差分圧縮データ生成ソフトに対応したＥＣＵの復元ソフトの構成である。
【図２０】選択機能付き差分圧縮データ生成ソフトに対応したＥＣＵのＦＬＡＳＨ書込み処理フローチャートである。
【図２１】制約機能付き差分圧縮データ生成ソフトに対応したＥＣＵのＦＬＡＳＨ書込み処理フローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を用いて本発明の実施形態による車載制御装置を含むシステムの構成及び動作を説明する。
【００１４】
最初に、図１を用いて、システムの全体構成を説明する。図１は、本発明の実施形態によるシステムの全体構成を示す模式図である。
【００１５】
本システムは、プログラム生成装置１００、車載システム３を備える。
【００１６】
プログラム生成装置１００は、新プログラムと車載システム３に含まれる車載制御装置に記憶された旧プログラムからデータを生成し、生成したデータを車載システム３に送信する。なお、その詳細は、図８〜図１５を用いて後述する。
【００１７】
プログラム生成装置１００は、ＰＣ１、サーバ２を備える。ＰＣ１は、例えば、ＬＡＮ（Local Area Network）を介して、サーバ２に接続される。なお、クロスケーブルを用いて、直接ＰＣ１とサーバ２を接続してもよい。
【００１８】
プログラム生成装置１００は、無線で車載システム３と通信を行う。通信は、例えば、インターネット、携帯電話網、無線LANなどを経由して行われる。なお、図１では、図面を見やすくするため、ルータ、アクセスポイントなどの中継機器は表示していない。
【００１９】
車載システム３は、プログラム生成装置１００からデータを受信し、受信したデータに基づいて、車載システム３に含まれる車載制御装置のプログラムを更新する。なお、その詳細は、図１６〜図２１を用いて後述する。
【００２０】
次に、図２を用いて、ＰＣ１の構成を説明する。図２は、図１に示すＰＣ１の構成図である。
【００２１】
ＰＣ１は、ＣＰＵ（Central Processing Unit）などの演算装置２０１、キーボード及びマウスなどの入力装置２０２、ＬＣＤ（Liquid Crystal Display）などの表示装置２０３、ＮＩＣ(Network Interface Card）などの通信装置２０４、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＨＤＤ（Hard Disk Drive）などの記憶装置２０５を備える。演算装置２０１、入力装置２０２、表示装置２０３、通信装置２０４は、バスに接続されている。
【００２２】
記憶装置２０５は、車載システム３に含まれる車載制御装置のフラッシュメモリに記憶されたプログラムと同じ旧プログラム及び旧プログラムを更新した新プログラムを記憶している。
【００２３】
なお、図１に示したサーバ２の構成もＰＣ１の構成と同様である。すなわち、サーバ２は、演算装置２０１Ｓ、入力装置２０２Ｓ、表示装置２０３Ｓ、通信装置２０４Ｓ、記憶装置２０５Ｓを備える。
【００２４】
次に、図３を用いて、車載システム３の構成を説明する。図３は、図１に示す車載システム３の構成図である。
【００２５】
車載システム３は、１つのゲートウェイ３１０（プログラム書き込み装置）、複数のＥＣＵ３００（３００１〜３００ｎ）を備える。ゲートウェイ３１０及びＥＣＵ３００は、相互に車載ネットワークＣＡＮを介して通信する。
【００２６】
ゲートウェイ３１０は、認証が成功した場合、車両の外部のネットワークと車両の内部のＣＡＮの間でデータを中継する。
【００２７】
ＥＣＵ３００は、マイコン３０１、ＥＣＵ３００毎の用途に応じた各種のＩＣ（Integrated Circuit）３０４、ＣＡＮトランシーバなどの通信装置３０５を備える。マイコン３０１は、ＳＲＡＭ３０２（揮発性メモリ）、ＦＬＡＳＨメモリ３０３（不揮発性メモリ）を内蔵する。
【００２８】
なお、ゲートウェイ３１０の構成もＥＣＵ３００の構成と基本的に同じであるが、車両の外部のネットワークのプロトコルに応じた通信装置をさらに備える。すなわち、ゲートウェイ３１０は、マイコン３１１、各種のＩＣ３１４、ＣＡＮトランシーバなどの通信装置３１５、車両の外部のネットワークのプロトコルに応じた通信装置３１６を備える。マイコン３１１は、ＳＲＡＭ３１２、ＦＬＡＳＨメモリ３１３を内蔵する。
【００２９】
次に、図４を用いて、ＥＣＵ３００のＳＲＡＭ３０２の構成を説明する。図４は、図３に示すＳＲＡＭ３０２の内部の構成を示す模式図である。
【００３０】
ＳＲＡＭ３０２は、データを一時的に記憶するための第１の領域３０２ａ、第１の領域３０２ａに記憶されたデータを復元するための第２の領域３０２ｂを備える。
【００３１】
本実施形態では、一例として、ＳＲＡＭ３０２のサイズは９６ｋＢであり、第１の領域３０２ａのサイズは１６ｋＢであり、第２の領域３０２ｂのサイズは６４ｋＢである。
【００３２】
次に、図５を用いて、ＦＬＡＳＨメモリ３０３の構成を説明する。図５は、図３に示すＦＬＡＳＨメモリ３０３の内部の構成を示す模式図である。
【００３３】
ＦＬＡＳＨメモリ３０３は、複数のサイズのブロックから構成される。本実施形態では、一例として、ＦＬＡＳＨメモリ３０３のサイズは２ＭＢである。ＦＬＡＳＨメモリ３０３は、８ｋＢ、６４ｋＢの２種類のブロックから構成される。ここで、ブロックとは、データを消去する最小単位である。例えば、８ｋＢのブロックに４ｋＢのデータを書き込む場合、８ｋＢのデータを消去してから４ｋＢのデータを書き込む。
【００３４】
図５に示すように、ＦＬＡＳＨメモリ３０３では、８ｋＢ、８ｋＢ、６４ｋＢ、６４ｋＢ、６４ｋＢ、６４ｋＢ、６４ｋＢのブロックにわたって旧プログラムが記憶されている。
【００３５】
また、ＦＬＡＳＨメモリ３０３は、ＳＲＡＭ３０２の第１の領域３０２ａに一時的に記憶されたデータの種類に応じて、第１の領域３０２aのデータと既にＦＬＡＳＨメモリ３０３に存在する旧プログラムからＳＲＡＭ３０２の第２の領域３０２ｂに新プログラムを復元したり、第１の領域３０２aの圧縮データを伸長して新プログラムを復元することができる、いわゆる復元ソフトを記憶している。
【００３６】
次に、図６を用いて、差分圧縮データ生成ソフトの概要を説明する。なお、ＰＣ１の演算装置２０１は、差分圧縮データ生成ソフト６００を実行することにより、以下の処理を実行する。
【００３７】
演算装置２０１（差分圧縮データ生成ソフト６００）は、旧プログラム６１０と新プログラム６２０を入力として差分データ６３０を生成する。差分生成部６０１は旧プログラムと新プログラムの差分を生成し、圧縮部６０２はその差分を圧縮して差分圧縮データ６３０を生成する。このように差分圧縮生成ソフト６００は、単に差分を生成するだけではなく、圧縮してより小さな差分圧縮データを生成する。
【００３８】
次に、図７を用いて、圧縮データ生成ソフトの概要を説明する。なお、ＰＣ１の演算装置２０１は、圧縮データ生成ソフト７００を実行することにより、以下の処理を実行する。
【００３９】
演算装置２０１（圧縮データ生成ソフト７００）は、新プログラム６２０を入力として圧縮データ７３０を生成する。圧縮部７０１はプログラムを圧縮する機能をもつ。このように圧縮データ生成ソフトは、単純に入力プログラムを圧縮して圧縮データを生成する動作を行っている。
【００４０】
次に図８を用いて、本発明の１つである選択機能付き差分圧縮データ生成ソフト８００を説明する。
【００４１】
一般に新旧プログラムの差分圧縮データと新プログラムの圧縮データのサイズを比較すると、差分圧縮データのほうが小さくなる。これは、差分圧縮データのほうが旧プログラムの情報を活用できるので、よりコンパクトにすることができるためである。しかしながら、新旧プログラムが全く異なるプログラムである場合には、逆に異なる部分が多すぎるため差分が大きくなりすぎて圧縮データの方が小さくなることがある。さらに、旧プログラムがＥＣＵ３００内のＦＬＡＳＨメモリに記憶されていない場合（最初の書込みの場合）、差分圧縮データを生成することができない。
【００４２】
そこでこの点に着目して発明した図８の選択機能付き差分圧縮データ生成ソフト８００の構成とその動作を説明する。選択機能付き差分圧縮データ生成ソフト８００は、差分生成部８１０と圧縮部８２０に加えて、入力判定部８３０と選択部８４０を追加した構成である。すなわち、入力判定部８３０は、旧プログラム６１０と新プログラム６２０が入力なのか、新プログラム６２０だけが入力なのか判定８３１で判定する。旧プログラム６１０と新プログラム６２０が存在する場合（８３１：ＹＥＳ）、差分生成部８１０により差分を生成し、圧縮部８２０で差分を圧縮した差分圧縮データ８４１を生成して選択部８４０へ渡す。
【００４３】
選択部８４０は判定８４２において差分圧縮データ８４１のサイズが基準値（閾値）以下であれば（８４２：ＹＥＳ）、差分圧縮データ８４１を出力データ８５０として出力する。もし基準値より大きいのであれば（８４２：ＮＯ），圧縮部８２０へ８１５を経由して新プログラム６２０を圧縮する指示を行う。圧縮部８２０は圧縮データ８４３を生成し、選択部８４０に一時的に保持する。選択部８４０は選択手段８４４により差分圧縮データ８４１と圧縮データ８４３のサイズの小さな方を選択して出力データ８５０へ出力する。
【００４４】
この結果、より小さな差分圧縮データまたは圧縮データを得ることができる。一方入力判定部８３０の判定８３１でＮＯの場合は８１５を経由して新プログラム６２０を圧縮部８２０へ渡し、圧縮データ８４３を生成する。選択部８４０は選択手段８４４で圧縮データ８４３を選択して出力データ８５０へ出力する。
【００４５】
このように、選択機能付き差分圧縮データ生成ソフト８００は、差分圧縮データ生成ソフト６００よりも小さなサイズの出力データを生成することができる。さらに旧プログラムが存在しない場合でも新プログラムを圧縮して出力することができる。ただし、もう少し簡略化した構成も考えられる。例えば８４３の圧縮データを生成した場合、選択手段８４４によるサイズ比較は行わずに圧縮データ８４３を出力データ８５０としても良い。これは判定８４２において既に差分圧縮データは基準値以上と判断しているので選択手段８４４は不要と考えることができるからである。また、入力となる新プログラムは、複数のブロックに分割された１つのブロックにおける新プログラム、旧プログラムは複数のブロックに分割されたいくつかのブロックにおける旧プログラムでも良い。
【００４６】
次に図９を用いて、本発明の１つである制約機能付き差分圧縮データ生成ソフト９００の構成とその動作を説明する。
【００４７】
最初に制約機能の必要性を説明する。差分圧縮データや圧縮データは、ＥＣＵ３００へ送信されると、ＥＣＵ３００の第１の領域３０２aに受信される。しかしながら差分圧縮データや圧縮データが第１の領域３０２aよりも大きいサイズであれば、そのデータを全て受信することができず、結果として復元することができない。これが制約の必要性である。
【００４８】
そこで制約機能付き差分圧縮データ生成ソフト９００は、入力判定部９１０と差分生成部９５０と圧縮部９６０と選択部９７０に加えて制約部９８０を付加した構成である。以下処理動作を説明する。入力には、ＥＣＵ３００の第１の領域サイズ1S（９２５）があり制約部９８０で使用する情報である。
【００４９】
まず、入力判定部９１０は、旧プログラム６１０と新プログラム６２０が入力されているか、新プログラム６２０だけが入力されているかを判定９１１で判定を行い、旧プログラム６１０と新プログラム６２０が存在すれば（９１１：ＹＥＳ）、差分生成部９５０は差分を生成し、圧縮部９６０は差分を圧縮した差分圧縮データ９７１を生成する。選択部９７０は判定９７２において差分圧縮データサイズが基準値以下であれば制約部９８０へ差分圧縮データ９７１を選択データ９８１として渡す。
【００５０】
もし差分圧縮データ９７１のサイズが基準値より大きいのであれば（９７２：ＮＯ）、圧縮部９６０へ９１５を経由して新プログラム６２０を圧縮する指示を行う。圧縮部９６０は新プログラム６２０を圧縮して圧縮データ９７３を生成する。選択部９７０の選択手段９７４は差分圧縮データ９７１と圧縮データ９７３のサイズの小さな方を選択データ９８１として制約部９８０へ渡す。
【００５１】
制約部９８０は制約手段９８２において選択データ９８１のサイズ（SS）と第１の領域サイズ（1S）を比較し、選択データ９８１の方が小さければ（ＳＳ≦１Ｓ），選択データ９８１を出力データ９３０として出力する。ここで選択データ９８１は差分圧縮データ９７１または圧縮データ９７３のいずれかとなる。一方選択データ９８１のサイズ（SS）が第１の領域サイズ（1S）よりも大きければ（ＳＳ＞１Ｓ），出力データ９３０は新プログラムそのものとなる。
【００５２】
新プログラムであれば、ＦＬＡＳＨメモリの当該のブロックを消去した後に第１の領域へ分割送信して当該ブロックへ複数回に分けて書込むことができる。
【００５３】
次にＰＣ１が図８の選択機能付き差分圧縮データ生成ソフト８００を用いて差分圧縮データまたは圧縮データを生成し、サーバ２へ送信するまでのフローチャートを図１０を用いて説明する。
【００５４】
基本的な考え方は、旧プログラムと新プログラム全体に対して差分圧縮データや圧縮データを生成するのでは無く、新旧プログラムを複数のブロックに分割し、１つのブロックに配置されている新プログラムとＥＣＵ３００のＦＬＡＳＨメモリ３０３の１つまたは複数のブロックに配置されている旧プログラムの差分圧縮データまたは圧縮データを生成する点にある。
【００５５】
ＰＣ１の演算装置２０１は、まずステップＳ１０で旧プログラムが存在するかチェックする。存在しない場合は（Ｓ１０：ＮＯ）、ステップＳ４０で新プログラムをＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｊ）（Ｊ＝１，２、・・・、Ｎ）のサイズに分割する。ステップＳ４５でブロックＢ（Ｊ）を選択して、ステップＳ６０まで繰返し処理を行う。ステップＳ５０で選択機能付き差分圧縮データ生成ソフト８００を用いて、選択したブロックＢ（Ｊ）の新プログラムを圧縮して圧縮データを生成する。また圧縮データのサイズも記憶しておく。
【００５６】
次にステップＳ５５でＢ（Ｊ）の圧縮データをサーバ２へ送信する。ステップＳ６０で全てのブロックを処理完了したかチェックし、Ｊ＝Ｎならば（Ｓ６０：ＹＥＳ）処理を終了する。Ｊ≠ＮならばＪ＝Ｊ＋１としてステップＳ４５へ戻り、繰返し実行する。
【００５７】
ステップＳ１０で旧プログラムが存在する場合は（Ｓ１０：ＹＥＳ）、ステップＳ１５でＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｉ）（Ｉ＝１、２、…、Ｎ）のサイズ毎に新プログラム及び旧プログラムを分割する。ここで、ＰＣ１の記憶装置２０５は、ＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｉ）毎のサイズ、ブロックＢ（Ｉ）のアドレス、及びＥＣＵ３００のＩＤ（識別子）を記憶している。
【００５８】
ＰＣ１の演算装置２０１は、ブロックB(Ｉ）に関するループの初期設定（Ｉ＝１）を行う（ステップＳ２０）。ＰＣ１の演算装置２０１はステップＳ２５でブロックＢ（Ｉ）の新プログラムとＩ個のブロックＢ（Ｉ）、Ｂ（Ｉ−１），Ｂ（Ｉ−２），・・・、Ｂ（１）の旧プログラムを入力して選択機能付き差分圧縮データ生成ソフト８００を実行する。この結果、ブロックＢ（Ｉ）の差分圧縮データまたは圧縮データが生成される。またそのサイズも記憶しておく。次にステップＳ３０でブロックＢ（Ｉ）の差分圧縮データまたは圧縮データをサーバ２へ送信する。次にステップＳ３５で全てのブロックを処理したかチェックしＩ＝Ｎならば終了する。Ｉ≠ＮならばＩ＝Ｉ＋１にしてステップＳ２０へ戻り、繰返し実行する。
【００５９】
以上でＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックサイズ毎に差分圧縮データまたは圧縮データ、そのデータサイズ、ブロックのサイズ、ブロックのアドレスをサーバ２へ送信できた。
【００６０】
次にもう１つの発明であるＰＣ１が図９の制約機能付き差分圧縮データ生成ソフト９００を用いて差分圧縮データまたは圧縮データまたは新プログラムそのものをサーバ２へ送信するまでのフローチャートを図１１を用いて説明する。
同様に基本的な考え方は、新旧プログラム全体の差分圧縮データや圧縮データを生成するのでは無く、新旧プログラムを複数のブロックに分割し、１つのブロックに配置されている新プログラムとＥＣＵ３００のＦＬＡＳＨメモリ３０３の１つまたは複数のブロックに配置されている旧プログラムの差分圧縮データまたは圧縮データを生成する点にある。
【００６１】
ＰＣ１の演算装置２０１は、ステップＳ７０で旧プログラムが存在するかチェックする。存在しない場合は（Ｓ７０：ＮＯ），ステップＳ１００以降の処理で新プログラムをブロックに分割して圧縮データまたは新プログラムそのものをサーバ２へ送信する処理を行う。
【００６２】
まずステップＳ１００で新プログラムをＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｊ）（Ｊ＝１，２、・・・、Ｎ）のサイズに分割する。ステップＳ１０５でブロックＢ（Ｊ）を選択して、ステップＳ１２０まで繰返し処理を行う。ステップＳ１１０において選択したブロックＢ（Ｊ）の新プログラムと第１の領域サイズ１Ｓ（図９の９２５）を入力して制約機能付き差分圧縮データ生成ソフト９００を実行する。
【００６３】
この結果、ブロックＢ（Ｊ）の圧縮データまたは新プログラムそのものが出力される。またそのデータサイズも記憶しておく。次のステップＳ１１５においてＢ（Ｊ）の圧縮データまたは新プログラムそのものをサーバ２へ送信する。ステップＳ１２０で全てのブロックを処理完了したかチェックし、Ｊ＝Ｎならば（Ｓ１２０：ＹＥＳ）、処理を終了する。Ｊ≠ＮならばＪ＝Ｊ＋１としてステップＳ１０５へ戻り、繰返し実行する。
【００６４】
ステップＳ７０で旧プログラムが存在する場合は（Ｓ７０：ＹＥＳ）、ステップＳ７５でＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｉ）（Ｉ＝１、２、…、Ｎ）のサイズ毎に新プログラムと旧プログラムを分割する。ここで、ＰＣ１の記憶装置２０５は、ＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｉ）毎のサイズ、ブロックＢ（Ｉ）のアドレス、及びＥＣＵ３００のＩＤ（識別子）を記憶している。ＰＣ１の演算装置１０１は、ブロックB(Ｉ）に関するループの初期設定（Ｉ＝１）を行う（ステップＳ８０）。
【００６５】
ＰＣ１の演算装置２０１はステップＳ８５においてブロックＢ（Ｉ）に配置されている新プログラムとＩ個のブロックＢ（Ｉ）、Ｂ（Ｉ−１），Ｂ（Ｉ−２），・・・、Ｂ（１）に配置されている旧プログラムと第１の領域サイズ１Ｓ（図９の９２５）を入力して制約機能付き差分圧縮データ生成ソフト９００を実行する。この結果、Ｂ（Ｉ）の差分圧縮データまたは圧縮データまたは新プログラムそのものが出力されるので、ステップＳ９０においてサーバ２へ送信する。次にステップＳ９５で全てのブロックＢ（Ｉ）（Ｉ＝１〜Ｎ）を処理したかチェックしＩ＝Ｎならば終了する。Ｉ≠ＮならばＩ＝Ｉ＋１としてステップＳ８０へ戻り、繰返し実行する。
【００６６】
以上でＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックサイズ毎に差分圧縮データまたは圧縮データまたは新プログラム、そのデータサイズ、ブロックのサイズ、ブロックのアドレスをサーバ２へ送信できた。
【００６７】
以上述べた図１０、図１１のＰＣ１の処理フローは、新旧プログラムをＥＣＵ３００のＦＬＡＳＨメモリの同一ブロックＢ（Ｉ）単位に分割して、分割された１つのブロックに配置されている新プログラムと複数のブロックに配置されている旧ブログラムから差分圧縮データを作成した。この理由を図１２、図１３、図１３Ａ，図１３Ｂを用いて説明する。
【００６８】
図１２のＯＬ１０は旧プログラムをＥＣＵのＦＬＡＳＨメモリのブロックＢ（１）〜Ｂ（７）に分割した構成を示している。一方、Ｎ１０は新プログラムをＥＣＵのＦＬＡＳＨメモリのブロックＢ（１）〜Ｂ（７）に分割した構成を示している。新プログラムにおけるＶ１０は追加・変更された箇所である。すなわち旧プログラムを追加・変更した部分である。
【００６９】
一方Ｒ１０，Ｒ２０，Ｒ３０はＶ１０の追加・変更に伴い、Ｖ１０内の変数への参照アドレスが変更されたマイコンの命令列を示している。すなわちＶ１０の追加・変更により変数のアドレスが変更されたため、これに伴い、これまでの変数のアドレスも変更されるので、同時にＲ１０〜Ｒ３０の参照アドレスも変更となる。このため、新プログラムＮ１０のブロックＢ（３）はＶ１０による追加・変更、ブロックＢ（５）はＲ１０とＲ２０による変更、ブロックＢ（６）はＲ３０による変更が発生している。
【００７０】
ここで注目すべきは本当の変更はＶ１０の１箇所だけであり、Ｒ１０〜Ｒ３０の変更は、Ｖ１０の変更に伴う副次的な変更が発生しているにもかかわらず、新プログラム全体から見ると、あまり大きな変更では無いという点である。従って、このような小変更の場合には、新旧プログラムを同一のブロックＢ（Ｉ）単位に差分圧縮データを生成しても、そのデータサイズは基準値以下になることが多い。
【００７１】
このため、ソフト不良などを原因とするプログラム更新を行う場合には、新旧プログラムをブロックに分割し、同一ブロック同志で差分圧縮データを生成しても十分小さな差分圧縮データを得ることができる。
【００７２】
一方、図１３は旧プログラムＯＬ２０と大きな変更が存在する新プログラムＮ２０を示した図である。ここでＮ２０のＢ（４）には、大きな追加変更部分ＡＤ１０がある。Ｒ１００，Ｒ１１０，Ｒ１２０，Ｒ１３０、Ｒ１４０，Ｒ１５０は、ＡＤ１０の追加・変更に伴う参照変数のアドレス変更を示している。ここでＮ２０のブロックＢ（３）の新プログラムは変更箇所が無いため旧プログラムＯＬ２０のＢ（３）と同一であるが、Ｎ２０のブロックＢ（４）の新プログラムはＯＬ２０のブロックＢ（４）の旧プログラムとは当然ながら全く異なる。
【００７３】
次のＮ２０のブロックＢ（５）の新プログラムは、ＯＬ２０のブロックＢ（５）の旧プログラムとは大きく異なり、ＯＬ２０のブロックＢ（４）の旧プログラムと類似していることが多い。これはＡＤ１０の追加によりＯＬ２０のＢ（４）の旧プログラムがＮ２０のＢ（５）の新プログラム部分へ移動したためと考えられる。従って、差分圧縮データを生成するに最適なブロックの選択方法は、単に同一ブロック間で行えば良いということでは無いことがわかる。
【００７４】
ここで、図１３のＣＰ１００はＢ（３）の新旧プログラム同志で差分圧縮データを生成した方が良いことを示している。一方、図１３のＣＰ１１０は、Ｂ（５）の新プログラムはＢ（４）の旧プログラムと類似していることを示しており、図１３のＣＰ１２０は、Ｂ（６）の新プログラムはＢ（５）の旧プログラムと類似していることを示している。結果として、Ｂ（４）の旧プログラムとＢ（５）の新プログラムで差分圧縮データを生成し、Ｂ（５）の旧プログラムとＢ（６）の新プログラムで差分圧縮データを生成した方が差分圧縮データサイズを小さくできることを示している。
【００７５】
以上述べたように、ブロックＢ（Ｋ）（Ｋ＝１〜Ｎ）の新プログラムに最適なブロックＢ（Ｉ）の旧プログラムを選択する概要を詳細に説明した。
【００７６】
しかし、新プログラムのブロック（Ｋ）に最適な旧ブロックＢ（Ｉ）を１つだけ選択する概要について説明したが、旧ブロックＢ（Ｉ）は複数個でも良い。
【００７７】
図１３Ａは、新プログラムＮ２０に大きなプログラムが追加された場合に、新ブロックＢ（Ｋ）にとって最適な複数の旧ブロックＢ（Ｉ）（Ｉ＝１〜Ｋ）を選択する概要を説明した図である。すなわち新ブロックＢ（４）に大きなプログラムＡＤ１０が追加されると、新ブロックＢ（５）に対応する旧ブロックはＢ（４）が最適であると既に説明したが、逆に言えば旧ブロックＢ（４）を含む複数の旧ブロックＢ（１）〜Ｂ（４）を選択すれば良い。
【００７８】
一般に差分生成アルゴリズムは旧ブロックにおける類似のバイナリーコードを見つけ出し、差分を生成するので、より大きな旧プログラムの方が、より小さな差分を生成できるからである。従って、新ブロックＢ（６）に最適な複数の旧ブロックは図１３ＡのＣＰ１００Ａで指示されているＢ（１）〜Ｂ（６）の６個の旧ブロックであり、新ブロックＢ（５）に最適な複数の旧ブロックは図１３ＡのＣＰ１１０Ａで指示されているＢ（１）〜Ｂ（５）であり、新ブロックＢ（４）に最適な複数の旧ブロックは図１３ＡのＣＰ１２０Ａで指示されているＢ（１）〜Ｂ（４）である。
【００７９】
このように、大きなプログラムが追加された場合は、ブロックの番号の大きな順に差分圧縮データを生成すること、新プログラムのブロックに対応した複数の旧ブロックの選択は当該ブロックから小さい番号のブロックの順に複数個選択することが重要である。このように旧プログラムのブロックを選択すれば、ブロックを新プログラムへ書き換えたとしても、復元で使用する旧プログラムを選択することが可能となる。
【００８０】
図１３Ｂは、旧プログラムＯＬ２０から大きなプログラムが削除された場合に、新プログラムのブロックＢ（Ｋ）にとって最適な旧プログラムの複数のブロックＢ（Ｉ）（Ｉ＝Ｎ〜Ｋ）を選択する概要を説明した図である。
【００８１】
新プログラムＮ２０のブロックＢ（４）は、大きなプログラムＡＤ１０Ｂが削除されたことを示している。この結果、その内容は旧プログラムＯＬ２０のブロックＢ（５）の内容に近いものであることを示した図である。この結果、Ｎ２０のブロックＢ（５）はＯＬ２０のブロックはＢ（６）が最適であると考えられる。従って、Ｎ２０のブロックＢ（５）に最適な旧プログラムのブロックは、ＯＬ２０のブロックＢ（６）を含む複数のブロックＢ（５）〜Ｂ（７）を選択すれば良い。一般に差分生成アルゴリズムは旧プログラムにおける類似のバイナリーコードを見つけ出し、差分を生成するので、より大きな旧プログラムの方が、より小さな差分を生成できるからである。
【００８２】
従って、Ｎ２０のブロックＢ（４）に最適なＯＬ２０の複数のブロックはＣＰ１００Ｂで指示されているＢ（４）〜Ｂ（７）の４個の旧ブロックであり、Ｎ２０のブロックＢ（５）に最適なＯＬ２０の複数のブロックはＣＰ１１０Ｂで指示されているＢ（５）〜Ｂ（７）であり、Ｎ２０のブロックＢ（６）に最適なＯＬ２０の複数のブロックはＣＰ１２０Ｂで指示されているＢ（６）〜Ｂ（７）である。このように、大きなプログラムが削除された場合は、ブロックの番号の小さな順に差分圧縮データを生成すること、新ブロックに対応した複数の旧ブロックの選択は当該ブロックから大きい番号のブロックの順に複数個選択することが重要である。このように旧プログラムのブロックを選択すれば、ブロックを新プログラムへ書き換えたとしても復元で使用する旧プログラムを選択することが可能となる。
【００８３】
以上述べた図１３、図１３Ａ，図１３Ｂの概要に従い、ＰＣ１で新プログラムのブロックＢ（Ｋ）に最適な旧プログラムのブロックＢ（Ｉ）または複数の旧ブロックを選択するフローチャートを図１４、図１４Ａ，図１４Ｂに示す。これにより、差分圧縮データを生成するに最適な旧ブロックまたは複数の旧ブロックを選択できる。
【００８４】
最初に、図１３におけるブロックＢ（Ｋ）（Ｋ＝１〜Ｎ）の新プログラムに最適なブロックＢ（Ｉ）の旧プログラムを選択する処理フローを図１４に示す。
【００８５】
ＰＣ１の演算装置２０１は、ステップＳ１３０で新プログラムをＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｋ）（Ｋ＝１〜Ｎ）に分割する。次にステップＳ１３５でブロックＢ（Ｋ）（Ｋ＝１：初期値）の新プログラムを選択する。ステップＳ１４０で旧プログラムをＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｉ）（Ｉ＝１〜Ｎ）に分割する。ステップＳ１４５でブロックＢ（Ｉ）（Ｉ＝１：初期値）を選択し、ステップＳ１５０でＢ（Ｋ）とＢ（Ｉ）の差分圧縮データを生成する。次にステップＳ１５５で差分圧縮データサイズと基準値を比較し、差分圧縮データサイズが基準値以下の場合（ステップＳ１５５：ＹＥＳ）、ステップＳ１７０でブロックＢ（Ｉ）の旧プログラムを選択する。逆に、差分圧縮データサイズが基準値より大きい場合（ステップＳ１５５：ＮＯ）、ステップＳ１６０においてＩ＝Ｉ＋１としてステップＳ１４５へ戻り、処理を繰返す。もし全てのブロックＢ（Ｉ）の旧プログラムをステップＳ１５５で比較した結果、ＮＯであった場合はステップＳ１６０でＩ＝Ｎとなるので、ステップＳ１６５を実行し、ブロック無し（Ｂ（Ｋ）の圧縮を選択）を選択する。次にステップＳ１７５で全てのＢ（Ｋ）（Ｋ＝１〜Ｎ）の処理を完了したかチェックし、Ｋ＝Ｎならば処理を終了となる。もしＫ≠ＮならばＫ＝Ｋ＋１としてステップＳ１３５へ戻り処理を繰返す。
【００８６】
以上でＢ（Ｋ）（Ｋ＝１〜Ｎ）毎に最適なブロックの旧プログラムを選択できたことになる。
【００８７】
図１４Ａは、大きなプログラムが追加された新プログラムにおける複数の旧ブロック選択時のフローチャートである。
【００８８】
ＰＣ１の演算装置２０１は、ステップＳ１３０Ａで新プログラムをＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｋ）（Ｋ＝Ｎ〜１）に分割する。次にステップＳ１３５ＡでブロックＢ（Ｋ）（Ｋ＝Ｎ：初期値）の新プログラムを選択する。ステップＳ１４０Ａで旧プログラムをＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｉ）（Ｉ＝１〜Ｎ）に分割する。
【００８９】
ステップＳ１４５ＡでＫ個のブロックＢＢ（ＢＢ＝Ｂ（１）〜Ｂ（Ｋ））の旧プログラムを選択し、ステップＳ１５０ＡでＢ（Ｋ）の新プログラムとＢＢの旧プログラムの差分圧縮データを生成する。次にステップＳ１５５Ａで差分圧縮データサイズと基準値を比較し、差分圧縮データサイズが基準値以下の場合（ステップＳ１５５Ａ：ＹＥＳ）、ステップＳ１７０ＡでブロックＢ（１）からブロックＢ（Ｋ）の旧プログラムを選択する。逆に、差分圧縮データサイズが基準値より大きい場合（ステップＳ１５５Ａ：ＮＯ）、ステップＳ１６５Ａにおいてブロック無し（Ｂ（Ｋ）の新プログラムを圧縮）を選択し、ステップＳ１７５ＡにおいてＫ＝Ｋ−１としてステップＳ１３５Ａへ戻り、処理を繰返す。なお、Ｋ＝１で処理は終了する。このように、最後のブロック番号ＮのブロックＢ（Ｎ）の新プログラムから開始して、Ｂ（Ｋ）の新プログラムに対応する複数ブロックの旧プログラム（Ｂ（１）〜Ｂ（Ｋ））を選択し、その差分圧縮データを生成している。
【００９０】
また、差分圧縮データと旧プログラムから復号する順番も、最後のブロックから開始すれば良い。
【００９１】
図１４Ｂは、大きなプログラムが削除された新プログラムにおける複数の旧ブロック選択時のフローチャートである。
【００９２】
ＰＣ１の演算装置２０１は、ステップＳ１３０Ｂで新プログラムをＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｋ）（Ｋ＝１〜Ｎ）に分割する。次にステップＳ１３５ＢでブロックＢ（Ｋ）（Ｋ＝１：初期値）の新プログラムを選択する。ステップＳ１４０Ｂで旧プログラムをＥＣＵ３００のＦＬＡＳＨメモリ３０３のブロックＢ（Ｉ）（Ｉ＝１〜Ｎ）に分割する。
【００９３】
ステップＳ１４５Ｂで複数のブロックＢＢ（ＢＢ＝Ｂ（Ｋ）〜Ｂ（Ｎ））の旧プログラムを選択し、ステップＳ１５０ＢでＢ（Ｋ）の新プログラムとＢＢの旧プログラムの差分圧縮データを生成する。次にステップＳ１５５Ｂで差分圧縮データサイズと基準値を比較し、差分圧縮データサイズが基準値以下の場合（ステップＳ１５５Ｂ：ＹＥＳ）、ステップＳ１７０ＢでブロックＢ（Ｋ）からブロックＢ（Ｎ）の旧プログラムを選択する。逆に、差分圧縮データサイズが基準値より大きい場合（ステップＳ１５５Ｂ：ＮＯ）、ステップＳ１６５Ｂにおいてブロック無し（Ｂ（Ｋ）の新プログラムを圧縮）を選択し、ステップＳ１７５ＢにおいてＫ＝Ｋ＋１としてステップＳ１３５Ｂへ戻り、処理を繰返す。なお、Ｋ＝Ｎで処理は終了する。このように、最初のブロック番号１のブロックＢ（１）の新プログラムから開始して、Ｂ（Ｋ）の新プログラムに対応する複数ブロックの旧プログラム（Ｂ（Ｋ）〜Ｂ（Ｎ））を選択し、その差分圧縮データを生成している。
【００９４】
また、差分圧縮データと旧プログラムから復号する順番も、最初のブロックから開始すれば良い。
【００９５】
以上によりブロックの新プログラムに最適な複数のブロックの旧プログラムを選択する方法を詳細に説明した。なお、図１４Ａ及び図１４Ｂで説明した例では、差分圧縮データは複数のブロックに対応する第１のデータ（旧プログラム）と１つのブロックに対応する第２のデータ（新プログラム）の差分を圧縮したものである。ここで、第１のデータは旧プログラムをブロックのサイズに分割することにより得られるデータを少なくとも１つ含み、第２のデータは新プログラムをブロックのサイズに分割することにより得られるデータを１つ含む。
【００９６】
次に、図１５を用いて、サーバ２の動作を説明する。図１５は、図１に示すサーバ２の処理を示すフローチャートである。
【００９７】
サーバ２の演算装置２０１Ｓは、ＰＣ１の要求に応答して、ＰＣ１からブロックＢ（Ｋ）（Ｋ＝１〜Ｎ）のデータ（差分圧縮データまたは圧縮データまたは新プログラムそのもの）を通信装置２０４で受信する（ステップＳ１８０）。サーバ２の演算装置２０１Ｓは、ＰＣ１から受信したデータを記憶装置２０５に記憶する（ステップＳ１８５）。ここで、サーバ２の演算装置２０１Ｓは、全ブロックＢ（Ｋ）（Ｋ＝１〜Ｎ）について、ステップＳ１８０からステップＳ１８５の処理を行う。
【００９８】
次にサーバ２の演算装置２０１Ｓは、所定のイベントをトリガーとして、記憶装置２０５に記憶したＢ（Ｋ）（Ｋ＝１〜Ｎ）のデータをゲートウェイ３１０へ送信する（ステップＳ１９０）。所定のイベントは、例えば、所定タイミングにおけるゲートウェイ３１０からの要求、ユーザが所定の操作を実行したことに起因するゲートウェイ３１０からの要求などである。
【００９９】
次に、ゲートウェイ３１０の動作を説明する。図１６は、図３に示すゲートウェイ３１０の処理を示すフローチャートである。
【０１００】
ゲートウェイ３１０のマイコン３１１は、サーバ２の要求に応答して、ブロックＢ（Ｋ）（Ｋ＝１〜Ｎ）のデータ（差分圧縮データまたは圧縮データまたは新プログラムそのもの）を、通信装置３１６を介して受信する（ステップＳ２００）。ゲートウェイ３１０のマイコン３１１は、サーバ２から受信したデータをＦＬＡＳＨメモリ３１３に記憶する（ステップＳ２０５）。次にゲートウェイ３１０のマイコン３１１は、全ブロックＢ（Ｋ）
（Ｋ＝１〜Ｎ）について、ステップＳ２００からステップＳ２０５の処理を行う。
【０１０１】
ゲートウェイ３１０のマイコン３１１は、ＥＣＵ３００のＦＬＡＳＨメモリ３０３に記憶されたプログラムを更新する条件が成立しているか否かを判定する（ステップＳ２１０）。例えば、所定の運転状態において、ユーザが所定の操作をした場合に、プログラムを更新する条件は満たされたと判定される。
【０１０２】
プログラムを更新する条件が満たされた場合（ステップＳ２１０：ＹＥＳ）、ゲートウェイ３１０のマイコン３１１は、ＦＬＡＳＨメモリ３１３に記憶されたデータからフレームを生成する（ステップＳ２１５）。
【０１０３】
詳細には、ゲートウェイ３１０のマイコン３１１は、図１７に示すように、ＥＣＵ３００へのコマンドｆ１、ブロックデータの種類ｆ２、ブロックデータのサイズｆ３、ブロックデータを書き込むブロックのアドレスｆ４、復元処理で参照する旧プログラムのブロックのアドレスf５, ブロックデータf６を含むフレームを生成する。
【０１０４】
ここでコマンドｆ１は、書き込みを指示するコマンドが設定される。ブロックデータは、ブロックＢ（Ｋ）の差分圧縮データまたは圧縮データまたは新プログラムである。ブロックデータの種類f２は、ブロックデータが差分圧縮データ、圧縮データ、新プログラムのいずれかであることを示す。ブロックデータのサイズf３は差分圧縮データサイズ、圧縮データサイズ、新プログラムそのもののサイズのいずれかを示す。
【０１０５】
このようにして、ゲートウェイ３１０（プログラム書き込み装置）のマイコン３１１（演算装置）は、ブロックデータｆ６にブロックデータの種類ｆ２を付加したフレームを生成する。
【０１０６】
なお、図１７では、図示していないが、フレームには、送信ノードのＩＤ、受信ノードのＩＤが含まれる。ここで、送信ノードは、ゲートウェイ３１０のＩＤであり、受信ノードは、ＥＣＵ３００のＩＤである。
【０１０７】
図１６に戻り、ゲートウェイ３１０のマイコン３１１は、生成したフレームを、通信装置３１６を介してＥＣＵ３００へ送信する（ステップＳ２２０）。
【０１０８】
次にＥＣＵ３００のＦＬＡＳＨメモリ３０３に配置された復元ソフトについて説明する。図１８は、復元ソフトの構成である。なお、ＥＣＵ３００の演算装置３０１は、復元ソフト１８００を実行することにより、以下の処理を実行する。
【０１０９】
演算装置３０１（復元ソフト１８００）への入力は差分圧縮データ１８１０と旧プログラム１８２０である。復元ソフト１８００は、圧縮された差分圧縮データを伸長する伸長部１８４０と伸長部１８４０の出力である差分と旧プログラム１８２０から新プログラム１８３０を復元する差分復元部１８５０で構成されている。このように復元ソフト１８００は伸長部と差分復元部で構成されている。
【０１１０】
一方、選択機能付き差分圧縮データや制約機能付き差分圧縮データを取り扱うには、差分圧縮データばかりでなく圧縮データも復元する必要がある。図１９に選択機能付き差分圧縮データ生成ソフト８００（図８）と制約機能付き差分圧縮データ生成ソフト９００（図９）に対応した新しい復元ソフト１９００の構成を示す。なお、ＥＣＵ３００の演算装置３０１は、復元ソフト１９００を実行することにより、以下の処理を実行する。
【０１１１】
まず演算装置３０１（復元ソフト１９００）への入力はブロックデータ１９１０と旧プログラム１９２０である。ブロックデータ１９１０は差分圧縮データまたは圧縮データである。新プログラムそのものは、後述する図２１で説明するが、本復元ソフト１９００では取り扱わない。このため本復元ソフト１９００の入力となるブロックデータ１９１０は差分圧縮データまたは圧縮データとする。
【０１１２】
復元ソフト１９００は伸長部１９４０と差分復元部１９５０に加えてデータ種類判定部１９６０を備えている点が特徴である。ブロックデータ１９１０が入力されると伸長部１９４０はブロックデータ１９１０を伸長したデータを生成する。データ種類判定部１９６０は判定１９６１で伸長したデータの種類が差分であれば差分を差分復元部１９５０へ渡す。差分復元部１９５０は差分と旧プログラム１９２０を入力として新プログラム１９３０を生成する。一方判定１９６１で伸長したデータの種類が新プログラムの場合は１９３０へ新プログラムを出力する。
【０１１３】
このように、復元ソフト１９００は、１９００内部で差分または新プログラムを判定する機能を有している。図８の選択機能付き差分圧縮データ生成ソフト８００の出力データ８５０には差分圧縮データまたは圧縮データかを判別できる情報が記載されており、同様に図９の制約機能付き差分圧縮データ生成ソフト９００の出力データ９３０にも差分圧縮データまたは圧縮データまたは新プログラムそのもののいずれかであることを示す判別情報が記載されている。
【０１１４】
次に選択機能付き差分圧縮データ生成ソフト８００で送信されたブロックデータ（図１０）を復元してＥＣＵ３００のＦＬＡＳＨメモリ３０３を更新するフローチャートを図２０を用いて説明する。
【０１１５】
ＥＣＵ３００はステップＳ２３０でフレームを受信すると、ステップＳ２３５でそのブロックデータとＥＣＵ３００内のＦＬＡＳＨメモリのブロックの旧プログラムを復元ソフト１９００へ入力して復元ソフト１９００を実行する。その結果新プログラムをＳＲＡＭの第２領域に復元している。次にステップＳ２４０でＥＣＵ３００のアドレスｆ４のＦＬＡＳＨのブロックを消去し、書込み可能な状態にしている。最後にステップＳ２４５でＳＲＡＭの第２の領域の新プログラムをブロックに書込み、処理を終了する。
【０１１６】
以上でブロック単位に新プログラムを更新することができた。全プログラムを更新するためには、全てのフレームを受信（ステップＳ２３０）して、各ブロックの新プログラムを書込むことで達成できる。
【０１１７】
次に制約機能付き差分圧縮データ生成ソフト９００で送信されたブロックデータ（図１１）を復元してＥＣＵ３００のＦＬＡＳＨメモリ３０３を更新するフローチャートを図２１を用いて説明する。
【０１１８】
ＥＣＵ３００はステップＳ２５０でフレームを受信すると、ステップＳ２５５でブロックデータの種類ｆ２から差分圧縮データまたは圧縮データと、新プログラムそのものの２つにケースに区分している。差分圧縮データまたは圧縮データのケースはステップＳ２６０でそのブロックデータとＥＣＵ３００内のＦＬＡＳＨメモリのブロックの旧プログラムを復元ソフト１９００へ入力して復元ソフト１９００を実行している。
【０１１９】
その結果、新プログラムをＳＲＡＭの第２領域に復元している。次にステップＳ２６５でＥＣＵ３００のアドレスｆ４のＦＬＡＳＨのブロックを消去し、書込み可能な状態にしている。次にステップＳ２７０でＳＲＡＭの第２の領域の新プログラムをブロックに書込み、処理を終了する。一方ステップＳ２５５でブロックデータの種類ｆ２が新プログラムそのもののケースであれば、ステップＳ２６５でＥＣＵ３００のアドレスｆ４のＦＬＡＳＨのブロックを消去し、書込み可能な状態にしている。次にステップＳ２７０で新プログラムをブロックに書込み、処理を終了する。
【０１２０】
以上でブロック単位に新プログラムを更新することができた。全プログラムを更新するためには、全てのフレームを受信（ステップＳ２５０）し、各ブロックの新プログラムを書込むことで達成できる。
【０１２１】
以上説明したように、本実施形態によれば、高速かつ容易にリプログラミングを行うことができる。また、ユーザは、ディーラへ車両を持ち込むことなく、どこでもリプログラミングを行うことができる。
【０１２２】
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１２３】
上記実施形態では、プログラム生成装置１００は、２台のコンピュータ（ＰＣ１及びサーバ２）から構成されるが、コンピュータの台数は任意である。
【０１２４】
上記実施形態では、ＰＣ１からサーバ２へブロック単位で送信しているが、ＰＣ１やサーバ２のメモリ容量が十分あれば差分圧縮データや圧縮データを複数ブロックまとめて送信しても良い。またサーバ２からゲートウェイ３１０への送信は、ゲートウェイ３１０のＳＲＡＭ３１２とＦＬＡＳＨメモリ３１３の容量に依存する。ＳＲＡＭ３１２とＦＬＡＳＨメモリ３１３が十分なサイズであれば、まとめて送信しても良い。
【０１２５】
一方ゲートウェイ３１０からＣＡＮを介してＥＣＵ３００への送信は、ＥＣＵのＳＲＡＭ容量３０２が小さいことから、１または複数のブロック単位で送信すべきである。本実施例では、復元に必要なＳＲＡＭサイズとして１つブロックサイズとしているがＳＲＡＭ３０２のサイズに応じて複数のブロック単位で差分圧縮データや圧縮データを生成しても良い。この選択はＳＲＡＭ３０２のサイズで決めて良い。
【０１２６】
上記実施形態では、ＦＬＡＳＨメモリ３０３は、２種類のサイズのブロックから構成されるが、異なる３つ以上のサイズのブロックから構成されていてもよい。また、ＦＬＡＳＨメモリ３０３は、１種類のサイズのブロックから構成されていてもよい。
【０１２７】
また、上記の各構成、機能等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD（Solid State Drive）等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【０１２８】
なお、本発明の実施形態は以下の態様であってもよい。
【０１２９】
（第１の態様）
演算装置は、
ブロックデータの種類が差分圧縮データである場合、ブロックデータとアドレスに対応するブロックに記憶された旧プログラムから新プログラムを復元して、復元された新プログラムをブロックの書込みアドレスへ書き込むことを特徴とする車載制御装置。
【０１３０】
（第２の態様）
演算装置は、
ブロックデータの種類が圧縮データである場合、ブロックデータから新プログラムを復元して、復元された新プログラムをブロックの書込みアドレスへ書き込むことを特徴とする車載制御装置。
【０１３１】
（第３の態様）
不揮発性メモリは、
少なくとも２つの異なるサイズのブロックから構成される
ことを特徴とする車載制御装置。
【０１３２】
（第４の態様）
不揮発性メモリは、ＦＬＡＳＨメモリである
ことを特徴とする車載制御装置。
【０１３３】
（第５の態様）
揮発性メモリは、ＳＲＡＭである
ことを特徴とする車載制御装置。
【０１３４】
（第６の態様）
演算装置は、マイコンであり、
揮発性メモリ及び不揮発性メモリは、マイコンに内蔵される
ことを特徴とする車載制御装置。
【０１３５】
（第７の態様）
第１のデータの入力の有無を判定する入力判定工程を備え、
選択工程は、
入力判定工程により第１のデータの入力が無いと判定された場合、第２のデータを圧縮した圧縮データを出力することを含む差分圧縮データ生成プログラム。
【０１３６】
（第８の態様）
第１のデータの入力の有無を判定する入力判定工程を備え、
選択工程は、
入力判定工程により第１のデータの入力が有ると判定され、かつ、差分圧縮データのサイズが基準値より小さい場合、差分圧縮データを出力することを含む差分圧縮データ生成プログラム。
【符号の説明】
【０１３７】
１…ＰＣ
２…サーバ
３…車載システム
１００…プログラム生成装置
１０１…演算装置
１０２…入力装置
１０３…表示装置
１０４…通信装置
１０５…記憶装置
２０１…演算装置
２０２…入力装置
２０３…表示装置
２０４…通信装置
２０５…記憶装置
３００…ＥＣＵ（車載制御装置）
３０１…マイコン（演算装置）
３０２…ＳＲＡＭ（揮発性メモリ）
３０２ａ…ＳＲＡＭの第１の領域
３０２ｂ…ＳＲＡＭの第２の領域
３０３…ＦＬＡＳＨメモリ（不揮発性メモリ）
３０４…各種のＩＣ
３０５…通信装置
３１０…ゲートウェイ（プログラム書き込み装置）
３１１…マイコン
３１２…ＳＲＡＭ
３１３…ＦＬＡＳＨメモリ
３１４…各種のＩＣ
３１５…通信装置（ＣＡＮプロトコル）
３１６…通信装置（車両の外部のネットワークのプロトコル）
６００…差分圧縮データ生成ソフト
７００…圧縮データ生成ソフト
８００…選択機能付き差分圧縮データ生成ソフト
９００…制約機能付き差分圧縮データ生成ソフト
１８００…差分圧縮データ復元ソフト
１９００…新しい差分圧縮データ復元ソフト
【図１】
2019061690.tif 000003
【図２】
2019061690.tif 000004
【図３】
2019061690.tif 000005
【図４】
2019061690.tif 000006
【図５】
2019061690.tif 000007
【図６】
2019061690.tif 000008
【図７】
2019061690.tif 000009
【図８】
2019061690.tif 000010
【図９】
2019061690.tif 000011
【図１０】
2019061690.tif 000012
【図１１】
2019061690.tif 000013
【図１２】
2019061690.tif 000014
【図１３】
2019061690.tif 000015
【図１３Ａ】
2019061690.tif 000016
【図１３Ｂ】
2019061690.tif 000017
【図１４】
2019061690.tif 000018
【図１４Ａ】
2019061690.tif 000019
【図１４Ｂ】
2019061690.tif 000020
【図１５】
2019061690.tif 000021
【図１６】
2019061690.tif 000022
【図１７】
2019061690.tif 000023
【図１８】
2019061690.tif 000024
【図１９】
2019061690.tif 000025
【図２０】
2019061690.tif 000026
【図２１】
2019061690.tif 000027
【手続補正書】
【提出日】平成30年11月30日(2018.11.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のブロックから構成され、旧プログラムを記憶する不揮発性メモリと、
揮発性メモリと、
前記旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データ、前記ブロックの書込みアドレスを含むフレームを受信する通信装置と、
前記差分圧縮データから前記第２のデータを前記揮発性メモリに復元し、復元された前記第２のデータを前記ブロックの書込みアドレスへ書き込む演算装置と、
を備える車載制御装置であって、
前記差分圧縮データは、
異なるブロックの前記第１のデータと前記第２のデータの差分を圧縮したものであることを特徴とする車載制御装置。
【請求項２】
請求項１に記載の車載制御装置であって、
前記差分圧縮データは、
サイズが基準値以下であることを特徴とする車載制御装置。
【請求項３】
複数のブロックから構成され、旧プログラムを記憶する不揮発性メモリと、
揮発性メモリと、
前記旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データ、前記ブロックの書込みアドレスを含むフレームを受信する通信装置と、
前記差分圧縮データから前記第２のデータを前記揮発性メモリに復元し、復元された前記第２のデータを前記ブロックの書込みアドレスへ書き込む演算装置と、
を備える車載制御装置であって、
前記差分圧縮データは、
複数の前記ブロックに対応する前記第１のデータと１つのブロックに対応する前記第２のデータの差分を圧縮したものであることを特徴とする車載制御装置。
【請求項４】
請求項３に記載の車載制御装置であって、
前記第１のデータは、
最初のブロックから前記１つのブロックまでの複数ブロックに配置されている旧プログラムで構成することを特徴とする車載制御装置。
【請求項５】
請求項３に記載の車載制御装置であって、
前記第１のデータは、
前記１つのブロックから最後のブロックまでの複数ブロックに配置されている旧プログラムで構成することを特徴とする車載制御装置。
【請求項６】
複数のブロックから構成され、車両制御装置の不揮発性メモリに記憶される旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと、新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データを含むフレームを生成する演算装置と、
前記フレームを車載制御装置へ送信する通信装置と、
を備えるプログラム書き込み装置であって、
前記差分圧縮データは、
異なるブロックの前記第１のデータと前記第２のデータの差分を圧縮したものであることを特徴とするプログラム書き込み装置。
【請求項７】
複数のブロックから構成され、車載制御装置の不揮発性メモリに記憶される旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと、新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データを含むフレームを生成する演算装置と、
前記フレームを車載制御装置へ送信する通信装置と、
を備えるプログラム書込み装置であって、
前記第１のデータは、
最初のブロックから前記１つのブロックまでの複数ブロックに配置されている旧プログラムで構成することを特徴とするプログラム書込み装置。
【請求項８】
複数のブロックから構成され、車載制御装置の不揮発性メモリに記憶される旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと、新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データを含むフレームを生成する演算装置と、
前記フレームを車載制御装置へ送信する通信装置と、
を備えるプログラム書込み装置であって、
前記第１のデータは、
前記１つのブロックから最後のブロックまでの複数ブロックに配置されている旧プログラムで構成することを特徴とするプログラム書込み装置。
【請求項９】
請求項６−８のいずれかに記載のプログラム書き込み装置であって、
前記差分圧縮データは、
所定個数の前記第１のデータと前記所定個数の前記第２のデータの差分を圧縮したものであることを特徴とするプログラム書き込み装置。
【請求項１０】
複数のブロックから構成され、旧プログラムを記憶する不揮発性メモリと、
揮発性メモリと、
前記旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと、新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データ、前記ブロックの書込みアドレスを含むフレームを受信する通信装置と、
前記差分圧縮データから前記第２のデータを前記揮発性メモリに復元し、復元された前記第２のデータを前記ブロックの書込みアドレスへ書き込む演算装置と、
を備える車載制御装置であって、
前記旧プログラムと前記新プログラムの前記ブロックにはそれぞれ番号が付与され、
前記新プログラムの前記ブロックのデータに大きな追加があった場合には、前記ブロックに付与された番号が小さい順に差分圧縮データを生成し、
前記ブロックのデータに大きな削除があった場合には、前記ブロックに付与された番号が大きい順番に差分圧縮データを生成することを特徴とする車載制御装置。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
本発明の目的は、高速かつ容易にリプログラミングを行うことができる車載制御装置及びプログラム書き込み装置を提供することにある。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
以上の基本的な考え方を基本にして、本発明の一例は、複数のブロックから構成され、旧プログラムを記憶する不揮発性メモリと、揮発性メモリと、前記旧プログラムを前記ブロックのサイズに分割することにより得られるデータを少なくとも１つ含む第１のデータと新プログラムを前記ブロックのサイズに分割することにより得られるデータを１つ含む第２のデータの差分を圧縮した差分圧縮データ、前記ブロックの書込みアドレスを含むフレームを受信する通信装置と、前記差分圧縮データから前記第２のデータを前記揮発性メモリに復元し、復元された前記第２のデータを前記ブロックの書込みアドレスへ書き込む演算装置と、を備える車載制御装置であって、前記差分圧縮データは、異なるブロックの前記第１のデータと前記第２のデータの差分を圧縮したものである。