(57)【要約】      （修正有）【課題】自動車用電子制御装置における不揮発性メモリへのプログラムの書込み処理を高速に実行する。【解決手段】自動車用電子制御装置（ＥＣＵ）１００は、タイムアウト時間に応じてサイズ設定した分割データを外部の書込み装置３００から通信によって取得し、該取得した分割データのＲＯＭ１２０への書込み処理を開始してからタイムアウト時間が経過する前までに当該書込み処理が完了しない場合に、プログラムの再送を延期する延期要求を書込み装置３００に送信して、少なくともタイムアウト時間が再度経過するまでＲＯＭ１２０への分割データの書込みを継続可能にする。【選択図】図２
2020147157.tif 000002
【特許請求の範囲】
【請求項１】
通信によって外部装置から取得したプログラムを不揮発性メモリへ書き込む書込み処理を開始してから所定のタイムアウト時間が経過した後に前記書込み処理が完了していない場合に、前記外部装置から前記プログラムが再送される自動車用電子制御装置であって、
前記書込み処理を開始してから前記タイムアウト時間が経過する前までに前記書込み処理が完了していない場合に、前記プログラムの再送を延期する延期要求を前記外部装置に送信して、少なくとも前記タイムアウト時間が再度経過するまで前記書込み処理を継続可能にすることを特徴とする自動車用電子制御装置。
【請求項２】
前記延期要求を送信してから所定時間が経過しても、前記書込み処理が完了していない場合に、前記プログラムの再送要求を前記外部装置に送信することを特徴とする請求項１に記載の自動車用電子制御装置。
【請求項３】
前記所定時間は、前記タイムアウト時間よりも長いことを特徴とする請求項２に記載の自動車用電子制御装置。
【請求項４】
前記書込み処理は、前記プログラムを所定サイズに分割した複数の分割データを通信によって前記外部装置から取得し、該取得した各分割データを前記不揮発性メモリへ順次書き込むことを特徴とする請求項１〜３のいずれか１つに記載の自動車用電子制御装置。
【請求項５】
前記各分割データのサイズは、前記不揮発性メモリへの前記分割データの書込みに要する時間が前記タイムアウト時間よりも短くなるように設定されていることを特徴とする請求項４に記載の自動車用電子制御装置。
【請求項６】
通信によって外部装置から取得したプログラムを不揮発性メモリへ書き込む書込み処理を開始してから所定のタイムアウト時間が経過した後に前記書込み処理が完了していない場合に、前記外部装置から前記プログラムが再送される自動車用電子制御装置におけるプログラム書込み方法であって、
前記自動車用電子制御装置のプロセッサが、前記書込み処理を実行するステップと、
前記プロセッサが、前記書込み処理を開始してから前記タイムアウト時間が経過する前までに前記書込み処理が完了していない場合に、前記プログラムの再送を延期する延期要求を前記外部装置に送信して、少なくとも前記タイムアウト時間が再度経過するまで前記書込み処理を継続可能にするステップと、
を含むことを特徴とするプログラム書込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信によって外部から取得したプログラムを不揮発性メモリに書き込む自動車用電子制御装置及びプログラム書込み方法に関する。
【背景技術】
【０００２】
自動車に搭載されるＥＣＵ（Electronic Control Unit）などの自動車用電子制御装置は、電気的にデータの消去及び書込みが可能な不揮発性メモリを搭載している。自動車用電子制御装置は、不揮発性メモリに格納された制御プログラム等によって、エンジンの燃料噴射装置や自動変速機、各種ポンプなどの車載装置を制御する。
【０００３】
自動車用電子制御装置の不揮発性メモリにプログラムを書き込む（又は書き換える）ときには、特開２００８−１４６５２１号公報（引用文献１）に記載されているように、プログラムを転送するための外部の書込み装置を自動車用電子制御装置に接続し、該書込み装置から自動車用電子制御装置にプログラムを転送しながら、自動車用電子制御装置が転送プログラムを不揮発性メモリに書き込む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１４６５２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、従来の自動車用電子制御装置では、例えば、書込みのリトライなどが発生すると、不揮発性メモリへのプログラムの書込み処理を所定の時間内に完了することができずに、書込み装置側でタイムアウトになる可能性がある。このようなタイムアウトは、転送されるプログラムのサイズが大きくなる程、発生し易くなる。タイムアウトが発生すると、当該プログラムを書込み装置から自動車用電子制御装置に再送することが必要になるため、転送時間の増加を招き、プログラムが不揮発性メモリへ正常に書き込まれるまでに要する時間が長くなってしまうという課題がある。
【０００６】
本発明は上記の点に着目してなされたもので、不揮発性メモリへのプログラムの書込み処理を高速に実行することのできる自動車用電子制御装置及びプログラム書込み方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記の目的を達成するため本発明は、通信によって外部装置から取得したプログラムを不揮発性メモリへ書き込む書込み処理を開始してから所定のタイムアウト時間が経過した後に前記書込み処理が完了していない場合に、前記外部装置から前記プログラムが再送される自動車用電子制御装置を提供する。この自動車用電子制御装置は、前記書込み処理を開始してから前記タイムアウト時間が経過する前までに前記書込み処理が完了していない場合に、前記プログラムの再送を延期する延期要求を前記外部装置に送信して、少なくとも前記タイムアウト時間が再度経過するまで前記書込み処理を継続可能にする。
【０００８】
また、本発明は、通信によって外部装置から取得したプログラムを不揮発性メモリへ書き込む書込み処理を開始してから所定のタイムアウト時間が経過した後に前記書込み処理が完了していない場合に、前記外部装置から前記プログラムが再送される自動車用電子制御装置におけるプログラム書込み方法を提供する。このプログラム書込み方法は、前記自動車用電子制御装置のプロセッサが、前記書込み処理を実行するステップと、前記プロセッサが、前記書込み処理を開始してから前記タイムアウト時間が経過する前までに前記書込み処理が完了していない場合に、前記プログラムの再送を延期する延期要求を前記外部装置に送信して、少なくとも前記タイムアウト時間が再度経過するまで前記書込み処理を継続可能にするステップと、を含む。
【発明の効果】
【０００９】
上記のような本発明に係る自動車用電子制御装置及びプログラム書込み方法によれば、不揮発性メモリへのプログラムの書込み処理を高速に実行することができる。
【図面の簡単な説明】
【００１０】
【図１】データ書込みシステムの一例を示す構成図である。
【図２】電子制御装置及び書込み装置の一例を示す構成図である。
【図３】通信バッファの詳細を示す図である。
【図４】分割データのサイズ設定を説明するための概念図である。
【図５】電子制御装置の不揮発性メモリにアプリケーションプログラムを書き込む手順の一例を示すフローチャートである。
【図６】プログラム書込み処理の概要を示す図である。
【図７】書込み装置が実行するプログラム書込み処理の一例を示すフローチャートである。
【図８】電子制御装置が実行する書込みプログラム展開処理の一例を示すフローチャートである。
【図９】電子制御装置の揮発性メモリに書込みプログラムを展開して実行する手順の説明図である。
【図１０】電子制御装置の揮発性メモリの初期化について説明する図である。
【図１１】書込み装置が実行するアプリケーション転送処理の一例を示すフローチャートである。
【図１２】電子制御装置が実行するプログラム書込み処理の一例を示すフローチャートである。
【図１３】電子制御装置が実行するプログラム書込み処理の一例を示すフローチャートである。
【図１４】電子制御装置が実行するプログラム書込み処理の一例を示すフローチャートである。
【図１５】電子制御装置が実行するデータコピー処理の一例を示すフローチャートである。
【図１６】電子制御装置と書込み装置との間での書込み処理のシーケンスに関し、分割データの正常書込みに成功した場合の一例を示す図である。
【図１７】電子制御装置と書込み装置との間での書込み処理のシーケンスに関し、延期要求後に分割データの正常書込みに成功した場合の一例を示す図である。
【図１８】電子制御装置と書込み装置との間での書込み処理のシーケンスに関し、延期要求を複数回繰り返しても分割データの書込みに失敗する場合の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について添付図面を参照しながら詳細に説明する。
図１は、自動車用電子制御装置（ＥＣＵ）の不揮発性メモリに制御プログラムを書き込む、データ書込みシステムの一例を示す。図１において、ＥＣＵ１００は、ＣＡＮ（Controller Area Network）、シリアル通信、ＦｌｅｘＲａｙ（登録商標）などのネットワークケーブル２００を介して、作業者が操作する外部装置としての書込み装置３００に着脱可能に接続される。
【００１２】
ＥＣＵ１００は、自動車に搭載された各種機器、例えば、燃料噴射弁、自動変速機、電動ブレーキシステム、ＡＢＳ（Antilock Brake System）、可変バルブタイミング機構などを制御する電子機器である。具体的には、ＥＣＵ１００は、図２に示すように、マイクロコンピュータ１１０、不揮発性メモリの一例であるＲＯＭ（Read Only Memory）１２０、揮発性メモリの一例であるＲＡＭ（Random Access Memory）１３０、通信回路１４０及び通信バッファ部１５０を備えている。ここで、ＲＯＭ１２０としては、電気的にデータを消去する及び書き込むことで、任意のデータに書き換え可能なフラッシュＲＯＭを使用することができる。
【００１３】
マイクロコンピュータ１１０は、プロセッサとしてのＣＰＵ（Central Processing Unit）及びキャッシュメモリなどを内蔵し、ＲＯＭ１２０及びＲＡＭ１３０に格納された各種プログラムを実行する。ＲＯＭ１２０には、少なくとも、書込み装置３００から送信された任意のプログラムをＲＡＭ１３０に展開するＲＡＭ展開プログラムと、ＲＡＭ１３０の所定領域を初期化するＲＡＭ初期化プログラムと、が格納されている。なお、ＲＡＭ初期化プログラムは、ＲＡＭ展開プログラムに組み込まれていてもよい。ＲＡＭ１３０には、ＲＯＭ１２０に任意のデータを書き込むときに使用する、第１のバッファ領域１３２及び第２のバッファ領域１３４がそれぞれ確保されている。通信回路１４０は、通信バッファ部１５０を使用して、書込み装置３００を含む他の装置と通信する。
【００１４】
書込み装置３００は、例えば、パーソナルコンピュータから構成され、ハードディスクドライブ、ＳＳＤ（Solid State Drive）などのストレージ３１０と、通信回路３２０と、通信バッファ部３３０と、マンマシンインタフェースとして機能するモニタ３４０及びキーボード３５０と、を内蔵する。ストレージ３１０には、ＥＣＵ１００に転送される書込みプログラム及びアプリケーションプログラムなどが格納されている。通信回路３２０は、通信バッファ部３３０を使用して、ＥＣＵ１００と通信する。従って、書込み装置３００を操作する作業者は、モニタ３４０及びキーボード３５０を操作することで、ＥＣＵ１００に転送する書込みプログラム及びアプリケーションプログラムを対話的に指定することができる。
【００１５】
なお、本実施形態では、ＥＣＵ１００及び書込み装置３００を一対一で接続する構成例を示したが、１台の書込み装置３００に対して複数のＥＣＵ１００を接続し、１台の書込み装置３００が、各ＥＣＵ１００に対して時分割でデータを転送するようにしてもよい。
ここで、ＥＣＵ１００と書込み装置３００とが通信するときに使用する、ＥＣＵ１００の通信バッファ部１５０、及び、書込み装置３００の通信バッファ部３３０の詳細を説明する。
【００１６】
ＥＣＵ１００の通信バッファ部１５０には、図３上段に示すように、例えば、ＣＡＮにおけるメールボックスなど、一定のサイズの通信バッファが複数存在する。ＥＣＵ１００は、各装置と通信するとき、通信バッファ部１５０の通信バッファのうち、通信相手となる装置との通信用として予め割り当てられている通信バッファを使用する。なお、それぞれの通信バッファは、データの送信に使用する送信バッファＴＸ、データの受信に使用する受信バッファＲＸに分かれている。
【００１７】
一方、書込み装置３００の通信バッファ部３３０には、一定サイズの通信バッファが複数存在する。通信バッファ部３３０の通信バッファのサイズは、ＥＣＵ１００における通信バッファ部１５０の通信バッファのサイズと同じである。
【００１８】
図３上段において、ＥＣＵ１００の通信バッファ部１５０には、ＥＣＵ１００が書込み装置３００と通信するために使用する通信バッファ（以下、「書込み装置用通信バッファ」と略記する）として、２個の通信バッファ（送信バッファＴＸ１個、受信バッファＲＸ１個）が割り当てられている。また、通信バッファ部１５０の他の通信バッファは、書込み装置３００以外の装置との通信用に割り当てられている。
【００１９】
具体的に、例えば、通信バッファのサイズが８バイトであり、かつ、ＥＣＵ１００が１つのデータの受信ごとに書込み装置３００にその応答を返すように、ＥＣＵ１００と書込み装置３００との間で同期をとりながら通信を行う場合を考えてみる。この場合、１つのデータの受信に１個の受信バッファＲＸを使用するため、ＥＣＵ１００が、例えば、６４バイトのデータを取得するまでに必要となる通信回数は１６回になる。即ち、書込み装置３００が、ＥＣＵ１００に転送するプログラムを６４バイトごとに分割し、当該分割データを８バイトごとの小データに更に分けて転送し、ＥＣＵ１００は、８バイトの小データを受信するごとに書込み装置３００に応答を返す。このため、ＥＣＵ１００が６４バイトの分割データを取得するまでに１６回の通信が必要となる。
【００２０】
ところで、ＥＣＵ１００は、ＲＯＭ１２０にアプリケーションプログラムを書き込む場合、書込み装置３００以外の装置と通信しないため、書込み装置３００以外の装置と通信するために予め割り当てられている通信バッファ（以下、「他の装置用通信バッファ」と略記する）は使用されない。このため、書込みプログラムは、書込み装置用通信バッファに加えて、他の装置用通信バッファを、ＥＣＵ１００と書込み装置３００との間の通信に転用するように変更することができる。図３下段は、変更後の通信バッファ部１５０，３３０の一例である。
【００２１】
図３下段において、ＥＣＵ１００は、書込み装置３００と通信するとき、書込み装置用通信バッファとして２個の通信バッファ、及び、他の装置用通信バッファのうち７個の通信バッファを転用する。この場合、ＥＣＵ１００が使用する９個の通信バッファは、送信バッファＴＸが１個、受信バッファＲＸが８個となる。一方、書込み装置３００における通信バッファ部３３０の通信バッファは、送信バッファＴＸが８個、受信バッファＲＸが１個となる。
【００２２】
このような変更後の通信バッファ部１５０，３３０を使用して、ＥＣＵ１００と書込み装置３００との間で同期をとりながら通信を行う場合、１つのデータの受信に８個の受信バッファＲＸが使用できるため、ＥＣＵ１００が６４バイトのデータを書込み装置３００から取得するまでの通信回数は９回で済むことになる。即ち、書込み装置３００が、ＥＣＵ１００に転送するプログラムを６４バイトごとに分割し、当該分割データを８バイトごとの小データに更に分けて転送し、ＥＣＵ１００は、８バイトの小データを８個受信するごとに書込み装置３００に応答を返す。このため、ＥＣＵ１００が６４バイトの分割データを取得するまでの通信回数は９回となる。
【００２３】
このように、ＥＣＵ１００は、書込み装置用通信バッファに加えて他の装置用通信バッファを転用して通信することが可能であるため、同期をとるような通信では、通信回数が少なくなり、データの転送に要する時間が短縮し、データ転送の高速化を図ることができるようになる。さらに、書込み装置３００との通信に使用する通信バッファの数を増やす、及び／又は、個々の通信バッファのサイズを大きくすることができれば、大容量の分割データを高速に転送することも可能になる。
【００２４】
具体的な一例を挙げると、転用する他の装置用通信バッファを７個から３１個に増やすことができれば、８バイトの受信バッファＲＸを３２個使用して２５６バイトのデータのブロックを３３回の通信で転送することが可能になる。これに加えて、個々の通信バッファのサイズを８バイトから６４バイトに拡大することができれば、６４バイトの受信バッファＲＸを３２個使用して２０４８バイトのデータのブロックを同じ３３回の通信で転送することが可能になる。一方、前述の図３上段に示した設定（８バイトの受信バッファＲＸを１個使用）の場合、２５６バイトのデータを転送しようとすると通信回数は６４回、２０４８バイトのデータを転送しようとすると通信回数は５１２回にも及ぶことになる。
【００２５】
なお、通信バッファ部１５０，３３０の使い方は上記の具体例に限定されるものではなく、ＥＣＵ１００及び書込み装置３００間の通信で使用する通信バッファの数、並びに個々の通信バッファのサイズは、通信バッファ部１５０，３３０の容量に応じて適宜に設定することが可能である。
【００２６】
上記のようにＥＣＵ１００と書込み装置３００との間での通信回数を減らして転送時間の増加を抑えることを考えた場合、個々の分割データが大きなサイズを有するようになるため、ＥＣＵ１００におけるＲＯＭ１２０への分割データの書込み処理が所定の時間内に間に合わずにタイムアウトになってしまう可能性がある。タイムアウトになる所定の時間（以下、「タイムアウト時間」と呼ぶ）は、例えば、ＥＣＵ１００を車両に組み込んで使用する車両組み立てメーカーの規格等によって予め決められており、タイムアウト時間内に書込み処理が正常に完了したことを示す信号がＥＣＵ１００から書込み装置３００に送信されない場合には、プログラムの再送が必要になって転送時間の増加を招いてしまうことになる。そこで、本実施形態のＥＣＵ１００は、タイムアウト時間に応じて分割データのサイズを設定すると共に、タイムアウト時間が経過する前までに（好ましくはタイムアウト時間が経過する直前に）、タイムアウトによるプログラム再送の延期を要求する信号を書込み装置３００に送信することで、タイムアウトによる転送時間の増加を回避する。
【００２７】
ここで、タイムアウト時間に応じた分割データのサイズ設定について詳しく説明する。まず、分割データとは、図４の概念図に示すように、書込み装置３００からＥＣＵ１００に転送するプログラムの全体を所定サイズで分割したときの１つのブロックのデータである。図４上段の一例は、全体のサイズがＮバイトのプログラムをｎバイト単位で分割した場合を示しており、この場合の１つの分割データのサイズはｎバイトである。図４下段は、分割データのサイズをｍ倍に拡大した一例、即ち、全体のサイズがＮバイトのプログラムをｎ×ｍバイト単位で分割した場合を示しており、この場合の１つの分割データのサイズはｎ×ｍバイトである（Ｎ＞ｎ×ｍ＞ｎ）。
【００２８】
上記図４のように分割データのサイズをｎバイトからｍ倍にして通信回数の低減を図る場合、タイムアウト時間内に、ｎ×ｍバイトを有する分割データのＲＯＭ１２０への書込み処理が完了可能となるように倍率ｍを設定する必要がある。
【００２９】
具体的に、例えば、タイムアウト時間が５０［ｍｓ］であり、２５６バイトを有する分割データをｍ倍にして通信回数の低減を図ることを想定してみる。この想定において、２５６バイトの分割データのＲＯＭ１２０への書込み処理に、通常、０．４［ｍｓ］程度の時間を要し、最長でも６［ｍｓ］で書込み処理を完了することが可能であった場合、倍率ｍとして８倍を設定するのが好適である。すなわち、２５６バイトの８倍である２０４８バイトを有する分割データは、計算上、最長で４８［ｍｓ］（＝６［ｍｓ］×８）の時間内に書込み処理を完了することが可能であり、通常の書込み処理が実行されている状況下であれば、タイムアウト時間の５０［ｍｓ］を超えることはない。つまり、分割データのサイズは、ＥＣＵ１００が分割データをＲＯＭ１２０へ書き込むのに通常要する時間がタイムアウト時間よりも短くなるように設定するのがよい。分割データのサイズを２５６バイトから２０４８バイトに拡大することによって、プログラムの転送及び書込みに要する時間を３５％程度削減することが可能になる。
【００３０】
以下では、上記のようにタイムアウト時間に応じてサイズ設定された分割データを書込み装置３００からＥＣＵ１００に転送してＲＯＭ１２０へ書き込むための具体的な手順について詳しく説明する。なお、本発明における分割データのサイズ設定は上記一例に限定されない。
【００３１】
図５は、前述したデータ書込みシステム（図１及び図２）を使用して、ＥＣＵ１００のＲＯＭ１２０にアプリケーションプログラムを書き込む手順の一例を示す。
ステップ１（図では「Ｓ１」と略記する。以下同様。）では、作業者が、書込み装置３００にＥＣＵ１００を接続する。ＥＣＵ１００は、書込み装置３００に接続されると電源が投入され、書込み装置３００と通信可能になり、書込み装置３００から転送されるデータの受信待ち状態となる。
【００３２】
ステップ２では、作業者が書込み装置３００と対話して、ＥＣＵ１００のＲＯＭ１２０にプログラムを書き込むための書込みプログラムと、該書込みプログラムを使用してＥＣＵ１００のＲＯＭ１２０に書き込むアプリケーションプログラム（例えば、エンジン制御プログラムなど）とを指定する。書込み装置３００は、書込みプログラム及びアプリケーションプログラムが指定されると、それらのプログラムをＥＣＵ１００に転送する。このとき、書込みプログラムに比べて大きなサイズを有するアプリケーションプログラムの転送は、上述したようなタイムアウト時間に応じて分割データのサイズを設定する方法で行われ、サイズが比較的小さい書込みプログラムの転送は、従前の方法で行われるものとする。ＥＣＵ１００は、書込み装置３００から転送されたプログラムを受信しながら、指定された書込みプログラムに従いアプリケーションプログラムをＲＯＭ１２０に書き込む。以下、このステップ２の処理を、「プログラム書込み処理」と呼ぶ。
【００３３】
ステップ３では、作業者が、書込み装置３００からＥＣＵ１００を取り外す。ＥＣＵ１００は、書込み装置３００から取り外されると電源が遮断され、ＲＡＭ１３０に格納されている各種データが消失する。
【００３４】
図６は、プログラム書込み処理の概要を示す。
ステップ１１では、書込み装置３００が、作業者によって書込みプログラム及びアプリケーションプログラムが指定されると、ＥＣＵ１００に対し、書込みプログラム（例えば、書込みプログラム２）の転送を開始するメッセージを送信した後、書込みプログラムを転送する。
【００３５】
ここで、作業者が指定する書込みプログラムは、ストレージ３１０に構築された書込みプログラムデータベース３１２に格納されている。書込みプログラムは、ＥＣＵ１００に転送され、ＥＣＵ１００上で、通信環境（通信バッファの使用方法、通信速度、暗号化方式など）の変更などの初期化処理を実行すると共に、書込み装置３００からの要求に応じて、データの受信処理と当該受信データをＲＯＭ１２０の少なくとも一部に書き込む処理とを実行する。
【００３６】
また、作業者が指定するアプリケーションプログラムは、ストレージ３１０に構築されたアプリケーションプログラムデータベース３１４に格納されている。各アプリケーションプログラムは、例えば、ＥＣＵ１００の制御対象となる自動車のエンジン制御用のプログラムである。
【００３７】
ステップ１２では、ＥＣＵ１００が、書込み装置３００から書込みプログラムの転送を開始するメッセージを受信すると、ＲＯＭ１２０に格納されているＲＡＭ初期化プログラムを起動し、少なくとも書込みプログラムを展開するＲＡＭ１３０の領域を初期化する。また、ＲＡＭ１３０の初期化が完了すると、ＥＣＵ１００が、ＲＯＭ１２０に格納されているＲＡＭ展開プログラムを起動する。ここで、ＲＡＭ展開プログラムは、ＥＣＵ１００が受信した書込みプログラムをＲＡＭ１３０に展開する処理を行う。したがって、ＥＣＵ１００は、書込みプログラムを受信しながら、ＲＡＭ展開プログラムによって、受信した書込みプログラムをＲＡＭ１３０に展開する。
【００３８】
ステップ１３では、書込みプログラムの展開が完了すると、ＥＣＵ１００が、ＲＡＭ展開プログラムによって、ＲＡＭ１３０に展開した書込みプログラムを起動する。
ステップ１４では、ＥＣＵ１００が、書込みプログラムによって、ＥＣＵ１００と書込み装置３００との間の通信環境を、その書込みプログラムに応じた通信環境に変更し、書込み装置３００に対して、アプリケーションプログラムの送信を要求するメッセージを送信する。このとき、上述の図３に示したような通信バッファ部１５０，３３０の設定変更や、図４に示したような分割データのサイズ設定の変更も行われることになる。
【００３９】
ステップ１５では、書込み装置３００が、アプリケーションプログラムの送信を要求するメッセージを受信すると、ＥＣＵ１００に対して、作業者によって指定されたアプリケーションプログラム（例えば、アプリケーションプログラム１）の転送を開始する。
【００４０】
ステップ１６では、ＥＣＵ１００が、書込み装置３００からアプリケーションプログラムを受信しながら、書込みプログラムによって、受信したアプリケーションプログラムをＲＯＭ１２０に書き込む。このとき、後で詳しく説明するように、タイムアウトによる転送時間の増加を回避するための措置がとられる。
【００４１】
なお、アプリケーションプログラムの書込み完了後、ＥＣＵ１００は書込み装置３００から取り外され、電源がＯＦＦになる。次にＥＣＵ１００の電源が投入されたとき、ＥＣＵ１００の通信環境は、初期状態に戻る。また、プログラム書込み処理の途中で、何らかの異常（例えば、書込み装置３００との通信が遮断されたなど）が発生した場合には、ＥＣＵ１００が自らをリセットし、その通信環境が初期状態に戻る。
【００４２】
したがって、書込みプログラムを適宜選択することで、プログラム書込み処理において、通信環境及びアプリケーションプログラムの書込み条件などに適合した、書込みプログラムを動作させることができる。このため、例えば、通信速度がより高速な書込みプログラムを動作させることで高速に通信を行い、プログラム書込み処理を高速化することができる。また、プログラム書込み処理を実行するときに、書込みプログラムがＥＣＵ１００に転送されるため、書込みプログラムをＲＯＭ１２０に格納する必要がなく、ＲＯＭ１２０の使用量を削減することができる。さらに、書込みプログラムを変更することで、プログラム書込み処理に新しい機能を追加することができる。これにより、上述の具体例で説明したような分割データのサイズ設定を２５６バイトから２０４８バイトに拡大することも、書込みプログラムの変更により容易に対応することが可能である。
【００４３】
なお、ＥＣＵ１００に書込み装置３００に加えて他の装置が接続された状況でも、ＥＣＵ１００は、他の装置との通信を遮断し、書込み装置３００のみと通信するようにすれば、プログラム書込み処理を実行することができる。ＥＣＵ１００に書込み装置３００に加えて他の装置が接続された状況で、プログラム書込み処理を実行する一例として、ＥＣＵ１００が自動車に組付けられた状態で、アプリケーションプログラムの書込みを実施することが挙げられる。この場合、通信路の競合を防ぐため、ＥＣＵ１００は、書込み装置３００と通信するときに使用する通信環境を、他の装置と共通する通信環境（例えば、通信速度が共通）にする必要がある。このため、作業者は、他の装置と共通の通信環境を確立する書込みプログラムを指定し、プログラム書込み処理を実施する。
【００４４】
図７は、作業者がＥＣＵ１００を書込み装置３００に接続して、書込みプログラム及びアプリケーションプログラムを指定したことを契機として、書込み装置３００が実行するプログラム書込み処理の一例を示す。
【００４５】
ステップ３１では、書込み装置３００が、書込みプログラムの転送を開始することを示す転送開始メッセージをＥＣＵ１００に送信する。ここで、転送開始メッセージは、例えば、ＥＣＵ１００と書込み装置３００との間で送受信されるパケットのヘッダに格納することができる。
【００４６】
ステップ３２では、書込み装置３００が、作業者によって指定された書込みプログラムを、ＥＣＵ１００が１回の通信で受信可能なサイズの小データに順次分割し、例えば、パケットのデータ本体（ペイロード）に格納する。また、書込み装置３００は、書込みプログラムの書込み位置を示すアドレス（相対アドレス又は絶対アドレス）を、例えば、パケットのヘッダに格納する。なお、書込みプログラムの書込み位置を示すアドレスは、パケットのデータ本体に格納することもできる。
【００４７】
ステップ３３では、書込み装置３００が、ステップ３２で作成したパケットのデータ本体を参照し、そこに格納されているデータのすべてが初期値（例えば、０ｘＦＦ）になっているか否かを判定する。そして、書込み装置３００は、データのすべてが初期値になっていると判定すれば（Ｙｅｓ）、そのパケットの転送をスキップすべく、処理をステップ３５へと進める。一方、書込み装置３００は、データのすべてが初期値になっていない、要するに、そのデータは書込みプログラムの機能を実現する一部であると判定すれば（Ｎｏ）、処理をステップ３４へと進める。
【００４８】
ステップ３４では、書込み装置３００が、ステップ３２で作成したパケットをＥＣＵ１００に転送する。その後、書込み装置３００は、処理をステップ３５へと進める。
ステップ３５では、書込み装置３００が、ＥＣＵ１００からデータを要求するデータ要求メッセージを受信したか否かを判定する。ここで、データ要求メッセージであるか否かは、例えば、パケットのヘッダを参照することで判定することができる。そして、書込み装置３００は、データ要求メッセージを受信したと判定すれば（Ｙｅｓ）、処理をステップ３６へと進める。一方、書込み装置３００は、データ要求メッセージを受信していないと判定すれば（Ｎｏ）、データ要求メッセージを受信するまで待機する。
【００４９】
ステップ３６では、書込み装置３００が、作業者によって指定された書込みプログラムの転送を完了したか否かを判定する。そして、書込み装置３００は、書込みプログラムの転送が完了したと判定すれば（Ｙｅｓ）、処理をステップ３７へと進める。一方、書込み装置３００は、書込みプログラムの転送が完了していないと判定すれば（Ｎｏ）、処理をステップ３２へと戻す。
【００５０】
ステップ３７では、書込み装置３００が、書込みプログラムの転送が完了したことを示す転送完了メッセージをＥＣＵ１００に送信する。ここで、転送完了メッセージは、例えば、パケットのヘッダに格納することができる。
【００５１】
ステップ３８では、書込み装置３００が、ＥＣＵ１００から何らかのメッセージ（パケット）を受信したか否かを判定する。そして、書込み装置３００は、メッセージを受信したと判定すれば（Ｙｅｓ）、処理をステップ３９へと進める。一方、書込み装置３００は、メッセージを受信していないと判定すれば（Ｎｏ）、メッセージを受信するまで待機する。
【００５２】
ステップ３９では、書込み装置３００が、ＥＣＵ１００から受信したメッセージは、書込みプログラムが正常に転送されたことを示す転送正常メッセージであるか否かを判定する。ここで、転送正常メッセージであるか否かは、例えば、パケットのヘッダを参照することで判定することができる。そして、書込み装置３００は、転送正常メッセージであると判定すれば（Ｙｅｓ）、処理をステップ４０へと進める。一方、書込み装置３００は、転送正常メッセージでない、即ち、書込みプログラムが正常に転送されなかったことを示す転送異常メッセージであると判定すれば（Ｎｏ）、処理をステップ４１へと進める。
【００５３】
ステップ４０では、書込み装置３００が、作業者によって指定されたアプリケーションプログラムを分割しながらＥＣＵ１００に転送する、サブルーチン形式のアプリケーション転送処理を実行する。なお、アプリケーション転送処理は、サブルーチン形式に限らず、ステップ４０の位置に展開されてもよい。
【００５４】
ステップ４１では、書込みプログラムが正常に転送されなかったため、書込み装置３００が、書込みプログラムを先頭から再送するための設定、例えば、書込みプログラムの位置を示すポインタを先頭に戻すなどの設定を行う。その後、書込み装置３００は、処理をステップ３２へと戻す。
【００５５】
このようにすれば、書込み装置３００は、作業者によって書込みプログラム及びアプリケーションプログラムが指定されたことを契機として、書込みプログラムを、ＥＣＵ１００が１回の通信で受信可能なサイズの小データに順次分割し、これをパケットのデータ本体に格納する。そして、書込み装置３００は、パケットのデータ本体のすべてが初期値に設定されていれば、そのパケットの転送をスキップすることで、書込み装置３００からＥＣＵ１００へと転送するパケットの転送量を削減し、書込みプログラムの転送時間を短縮することができる。また、書込み装置３００は、ＥＣＵ１００からのメッセージによって、書込みプログラムが正常に転送できたならば、アプリケーションプログラムを転送する処理を実行する一方、書込みプログラムが正常に転送できなかったならば、書込みプログラムを再送する。
【００５６】
図８は、ＥＣＵ１００が書込みプログラムの転送開始メッセージを受信したことを契機として、ＥＣＵ１００のマイクロコンピュータ１１０が実行する書込みプログラム展開処理の一例を示す。ここで、ＥＣＵ１００のマイクロコンピュータ１１０は、ＲＯＭ１２０に格納されているＲＡＭ展開プログラム及びＲＡＭ初期化プログラムに従って、書込みプログラム展開処理を実行する。
【００５７】
ステップ５１では、ＥＣＵ１００のマイクロコンピュータ１１０が、ＲＡＭ１３０の記憶領域のうち、少なくとも、書込みプログラムを展開する領域を初期値で初期化する。なお、ＲＡＭ１３０を初期化するとき、第１のバッファ領域１３２及び第２のバッファ領域１３４も併せて初期化してもよい。
【００５８】
ステップ５２では、ＥＣＵ１００のマイクロコンピュータ１１０が、書込み装置３００からパケットを受信したか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、パケットを受信したと判定すれば（Ｙｅｓ）、処理をステップ５３へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、パケットを受信していないと判定すれば（Ｎｏ）、パケットを受信するまで待機する。
【００５９】
ステップ５３では、ＥＣＵ１００のマイクロコンピュータ１１０が、例えば、パケットのヘッダを参照することで、書込み装置３００からのパケットは書込みプログラムの転送完了メッセージであるか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、書込みプログラムの転送完了メッセージであると判定すれば（Ｙｅｓ）、処理をステップ５４へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、書込みプログラムの転送完了メッセージでない、即ち、書込みプログラムのデータが転送されたと判定すれば（Ｎｏ）、処理をステップ５７へと進める。
【００６０】
ステップ５４では、ＥＣＵ１００のマイクロコンピュータ１１０が、例えば、パケットのヘッダに格納されているチェックサムを参照し、書込み装置３００から転送された書込みプログラムが正常に転送されたか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、書込みプログラムが正常に転送されたと判定すれば（Ｙｅｓ）、処理をステップ５５へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、書込みプログラムが正常に転送されなかったと判定すれば（Ｎｏ）、処理をステップ５９へと進める。
【００６１】
ステップ５５では、ＥＣＵ１００のマイクロコンピュータ１１０が、転送正常メッセージを書込み装置３００に送信する。ここで、転送正常メッセージは、例えば、ＥＣＵ１００から書込み装置３００へと送信されるパケットのヘッダに格納することができる。
ステップ５６では、ＥＣＵ１００のマイクロコンピュータ１１０が、ＲＡＭ１３０に展開された書込みプログラムを起動する。
【００６２】
ステップ５７では、書込み装置３００から受信したパケットには書込みプログラムのデータが格納されているため、ＥＣＵ１００のマイクロコンピュータ１１０が、パケットのデータ本体をＲＡＭ１３０に展開する。このとき、ＥＣＵ１００のマイクロコンピュータ１１０は、書込み装置３００から転送された書込みプログラムは連続していない可能性があるため、パケットのヘッダに格納されたアドレスから展開する。
【００６３】
ステップ５８では、ＥＣＵ１００のマイクロコンピュータ１１０が、次のデータを要求するため、データ要求メッセージを書込み装置３００に送信する。ここで、データ要求メッセージは、例えば、ＥＣＵ１００から書込み装置３００へと送信されるパケットのヘッダに格納することができる。その後、ＥＣＵ１００のマイクロコンピュータ１１０は、処理をステップ５２へと戻す。
【００６４】
ステップ５９では、書込み装置３００から書込みプログラムが正常に転送されなかったため、ＥＣＵ１００のマイクロコンピュータ１１０が、転送異常メッセージを書込み装置３００に送信する。ここで、転送異常メッセージは、例えば、ＥＣＵ１００から書込み装置３００へと送信されるパケットのヘッダに格納することができる。その後、ＥＣＵ１００のマイクロコンピュータ１１０は、処理をステップ５１へと戻す。
【００６５】
このようにすれば、ＥＣＵ１００は、書込み装置３００から書込みプログラムの転送開始メッセージを受信したことを契機として、ＲＡＭ１３０の記憶領域のうち、少なくとも、書込みプログラムを展開する領域を初期化する。そして、ＥＣＵ１００は、ＲＡＭ１３０の初期化が完了すると、書込み装置３００から順次転送される書込みプログラムのデータをＲＡＭ１３０に展開して起動する。このとき、ＥＣＵ１００は、パケットのヘッダを参照し、そこに格納されているアドレスから書込みプログラムのデータを展開する。
【００６６】
即ち、ＥＣＵ１００は、図９に示すように、ＲＯＭ１２０に格納されているＲＡＭ展開プログラム及びＲＡＭ初期化プログラムによって、ＲＡＭ１３０を初期化した後、書込み装置３００から順次転送される書込みプログラムをＲＡＭ１３０に展開する。そして、ＥＣＵ１００は、書込みプログラムを起動し、書込み装置３００から順次転送される書込みデータをＲＯＭ１２０に書き込む。
【００６７】
上記のようなＥＣＵ１００での書込みプログラムに関する一連の処理においては、ＲＡＭ１３０に書込みプログラムを展開する前に、図１０に示すように、ＲＡＭ１３０の所定領域が初期化されるため、データ本体の全体が初期値に設定されているパケットの転送がスキップされても、これに対応するＲＡＭ１３０の領域が初期値となる。したがって、データ本体のすべてが初期値に設定されているパケットの転送がスキップ可能となり、書込みプログラムの転送時間を短縮することができる。要するに、書込みプログラムは、所定サイズごとに分割されたデータであって、その全体が初期値に設定されていない状態で順次取得されるので、アプリケーションプログラムの書込みに寄与するデータのみが転送され、書込みプログラムの転送時間を短縮することができる。
【００６８】
図１１は、書込み装置３００が実行する、アプリケーション転送処理の一例を示す。
ステップ６１では、書込み装置３００が、ＥＣＵ１００から何らかのメッセージを受信したか否かを判定する。そして、書込み装置３００は、メッセージを受信したと判定すれば（Ｙｅｓ）、処理をステップ６２へと進める。一方、書込み装置３００は、メッセージを受信していないと判定すれば（Ｎｏ）、メッセージを受信するまで待機する。
【００６９】
ステップ６２では、書込み装置３００が、例えば、パケットのヘッダを参照することで、ＥＣＵ１００から受信したメッセージは分割データの送信要求を示す送信要求メッセージであるか否かを判定する。そして、書込み装置３００は、送信要求メッセージでないと判定すれば（Ｙｅｓ）、処理をステップ６３へと進める。一方、書込み装置３００は、送信要求メッセージであると判定すれば（Ｎｏ）、処理をステップ７０へと進める。
【００７０】
ステップ６３では、書込み装置３００が、例えば、パケットのヘッダを参照することで、ＥＣＵ１００から受信したメッセージは分割データの再送要求を示す再送要求メッセージであるか否かを判定する。そして、書込み装置３００は、再送要求メッセージでないと判定すれば（Ｙｅｓ）、処理をステップ６４へと進める。一方、書込み装置３００は、再送要求メッセージであると判定すれば（Ｎｏ）、処理をステップ７２へと進める。
【００７１】
ステップ６４では、書込み装置３００が、例えば、パケットのヘッダを参照することで、ＥＣＵ１００から受信したメッセージは分割データを正常に受信できたことを示す正常受信メッセージであるか否かを判定する。そして、書込み装置３００は、正常受信メッセージでないと判定すれば（Ｙｅｓ）、処理をステップ６５へと進める。一方、書込み装置３００は、正常受信メッセージであると判定すれば（Ｎｏ）、ステップ７３に移って、タイムアウト時間（ここでは５０［ｍｓ］とする）を計測するためのタイマＴ０をスタートさせた後、処理をステップ６１へと戻す。
【００７２】
ステップ６５では、書込み装置３００が、例えば、パケットのヘッダを参照することで、ＥＣＵ１００から受信したメッセージは、タイムアウトによるプログラム再送処理を延期する要求を示す延期要求メッセージであるか否かを判定する。そして、書込み装置３００は、延期要求メッセージでないと判定すれば（Ｙｅｓ）、処理をステップ６６へと進める。一方、書込み装置３００は、延期要求メッセージであると判定すれば（Ｎｏ）、ステップ７４に移って、前述したタイムアウト計測用のタイマＴ０をリスタートさせた後に、処理をステップ６１へと戻す。
【００７３】
ステップ６６では、書込み装置３００が、タイマＴ０の経過時間が５０［ｍｓ］を超えてタイムアウトになったか否かを判定する。そして、書込み装置３００は、タイムアウトになっていないと判定すれば（Ｎｏ）、処理をステップ６７へと進める。一方、書込み装置３００は、タイムアウトになったと判定すれば（Ｙｅｓ）、処理をステップ７５へと進める。
【００７４】
ステップ６７では、書込み装置３００が、例えば、パケットのヘッダを参照することで、ＥＣＵ１００から受信したメッセージは分割データがＲＯＭ１２０に正常に書き込まれたこと（書込み完了）を示す書込み正常メッセージであるか否かを判定する。そして、書込み装置３００は、書込み正常メッセージであると判定すれば（Ｙｅｓ）、処理をステップ６８へと進める。一方、書込み装置３００は、分割データが正常に書き込まれなかったことを示す書込み異常メッセージであると判定すれば（Ｎｏ）、処理をステップ７５へと進める。
【００７５】
ステップ６８では、書込み装置３００が、作業者によって指定されたアプリケーションプログラムの転送が完了したか否かを判定する。そして、書込み装置３００は、アプリケーションプログラムの転送が完了したと判定すれば（Ｙｅｓ）、処理をステップ６９へと進める。一方、書込み装置３００は、アプリケーションプログラムの転送が完了していないと判定すれば（Ｎｏ）、処理をステップ６１へと戻す。
【００７６】
ステップ６９では、アプリケーションプログラムの転送が完了したので、書込み装置３００が、アプリケーションプログラムの転送が完了したことを示す転送完了メッセージをＥＣＵ１００に送信する。
【００７７】
ステップ７０では、ＥＣＵ１００からのメッセージは分割データの送信要求メッセージであるため、書込み装置３００が、作業者によって指定されたアプリケーションプログラムを所定サイズに分割した分割データを作成する。具体的には、書込み装置３００は、アプリケーションプログラムを所定サイズに順次分割して、パケットのデータ本体に格納する。前記所定サイズとしては、ＥＣＵ１００へと転送された書込みプログラムによって変更される通信環境において使用する、複数の通信バッファ（受信バッファＲＸ）の合計サイズとすることができる。ここでは、上述の図４に関連して具体例を挙げて説明したような、タイムアウト時間が５０［ｍｓ］の場合に対応する２０４８バイトを分割データの所定サイズとする。また、書込み装置３００は、アプリケーションプログラムの書込み位置を示すアドレス（相対アドレス又は絶対アドレス）を、例えば、パケットのヘッダに格納する。なお、アプリケーションプログラムの書込み位置を示すアドレスは、パケットのデータ本体に格納することもできる。
【００７８】
ステップ７１では、書込み装置３００が、ステップ７０で作成した分割データをＥＣＵ１００に転送する。このとき、書込み装置３００は、分割データを通信バッファ部３３０の送信バッファＴＸのサイズごとに分けて格納する。ここでは、分割データが２０４８バイト、１個あたり６４バイトの送信バッファＴＸが通信バッファ部３３０に３２個ある場合、書込み装置３００は、分割データを、６４バイトごとに３２個の小データに分けて各送信バッファＴＸに格納する。なお、送信バッファＴＸに格納された小データは、通信回路３２０によって、ＥＣＵ１００に転送される。その後、書込み装置３００は、処理をステップ６１へと戻す。
【００７９】
ステップ７２では、ＥＣＵ１００からのメッセージは分割データの再送要求メッセージであるため、書込み装置３００が、分割データをＥＣＵ１００に再送する。ここで、書込み装置３００は、ステップ７０で分割データを作成済であるため、新たに分割データを作成しなくとも、作成済の分割データを再送すればよい。その後、書込み装置３００は、処理をステップ６１へと戻す。
【００８０】
ステップ７５では、タイムアウトになった又はＥＣＵ１００からのメッセージは書込み異常メッセージであるため、書込み装置３００が、アプリケーションプログラムを先頭から再送するための設定、例えば、アプリケーションプログラムのポインタを先頭に戻すなどの設定を行う。その後、書込み装置３００が、処理をステップ６１へと戻す。
【００８１】
このようにすれば、書込み装置３００は、ＥＣＵ１００からの分割データの送信要求メッセージに応答して、アプリケーションプログラムを所定サイズごとに順次分割した分割データをＥＣＵ１００に転送する。また、書込み装置３００は、ＥＣＵ１００からの分割データの再送要求メッセージに応答して、作成済の分割データを再送する。さらに、書込み装置３００は、タイムアウトを判定するか又はＥＣＵ１００からの書込み異常メッセージに応答して、アプリケーションプログラムを先頭から転送し直す。
【００８２】
図１２〜図１４は、書込みプログラムが起動されたことを契機として、ＥＣＵ１００のマイクロコンピュータ１１０が実行する、プログラム書込み処理の一例を示す。
【００８３】
ステップ８０では、ＥＣＵ１００のマイクロコンピュータ１１０が、ＥＣＵ１００が書込み装置３００と通信するための通信環境を変更する。なお、ＥＣＵ１００が書込み装置３００以外の装置と通信可能である場合には、ＥＣＵ１００のマイクロコンピュータ１１０は、通信環境を変更しなくてもよい。
ステップ８１では、ＥＣＵ１００のマイクロコンピュータ１１０が、ＲＡＭ１３０の第１のバッファ領域１３２を、書込み装置３００から受信した分割データをコピーするためのコピー用の領域に設定する。
【００８４】
ステップ８２では、ＥＣＵ１００のマイクロコンピュータ１１０が、書込み装置３００から受信した分割データをＲＯＭ１２０に書き込む、書込みサブプログラムを起動する。
ステップ８３では、ＥＣＵ１００のマイクロコンピュータ１１０が、ＲＯＭ１２０に書き込むアプリケーションプログラムの分割データのうち、何番目の分割データを処理中であるかを示すカウンタ変数ｎに１を代入する。
【００８５】
ステップ８４では、ＥＣＵ１００のマイクロコンピュータ１１０が、初回の分割データを取得するために、分割データの送信要求メッセージを書込み装置３００に送信する。
ステップ８５では、ＥＣＵ１００のマイクロコンピュータ１１０が、書込み装置３００から受信した分割データがコピー用の領域にコピーされたことを示すコピー完了メッセージが、書込みサブプログラムから通知されたか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、コピー完了メッセージが通知されていると判定すれば（Ｙｅｓ）、処理をステップ８６へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、コピー完了メッセージが通知されていないと判定すれば（Ｎｏ）、コピー完了メッセージが通知されるまで待機する。
【００８６】
ステップ８６では、ＥＣＵ１００のマイクロコンピュータ１１０が、コピー用の領域に格納された初回の分割データを参照し、例えば、分割データに含まれているチェックサムを利用することで、その分割データが正常に受信できたか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、初回の分割データが正常に受信できたと判定すれば（Ｙｅｓ）、処理をステップ８７へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、初回の分割データが正常に受信できていないと判定すれば（Ｎｏ）、処理をステップ９４へと進める。
【００８７】
ステップ８７では、ＥＣＵ１００のマイクロコンピュータ１１０が、ＲＡＭ１３０の第１のバッファ領域１３２を、書込み装置３００から受信した分割データを書き込むときに使用する書込み用の領域に設定すると共に、ＲＡＭ１３０の第２のバッファ領域１３４を、書込み装置３００から受信した分割データをコピーするためのコピー用の領域に設定する。
【００８８】
ステップ８８では、ＥＣＵ１００のマイクロコンピュータ１１０が、２番目の分割データを取得するために、分割データの送信要求メッセージを書込み装置３００に送信すると共に、前回の分割データを正常に受信できたことを示す正常受信メッセージを書込み装置３００に送信する。
【００８９】
ステップ８９では、ＥＣＵ１００のマイクロコンピュータ１１０が、２つのタイマＴ１，Ｔ２をスタートさせる。タイマＴ１は、５０［ｍｓ］のタイムアウト時間が経過する前までに分割データのＲＯＭ１２０への書込み処理を完了できそうにない場合に、タイムアウトによりプログラムを再送する処理を延期する要求を示す延期要求メッセージを書込み装置３００に送信するために、タイムアウトになる直前のタイミング（例えば、書込み処理の開始から４９［ｍｓ］が経過した時など）を計測するものである。また、タイマＴ２は、タイムアウトによるプログラム再送開始の延期要求が複数回繰り返された場合に、該延期要求を終了するタイミングを計測するものである。この延期要求を終了するタイミングは、最初の延期要求を送信してからの経過時間（所定時間）がタイムアウト時間よりも長い、言い換えると、分割データの書込みを開始してからの経過時間がタイムアウト時間よりも２倍以上長い時間に設定され、ここでは例えば５０００［ｍｓ］とする。
【００９０】
ステップ９０では、ＥＣＵ１００のマイクロコンピュータ１１０が、書込み用の領域に格納されているｎ番目の分割データのデータ本体を、分割データのヘッダに格納されている書込みアドレスに応じて、ＲＯＭ１２０に書き込む。
【００９１】
ステップ９１（図１３）では、ＥＣＵ１００のマイクロコンピュータ１１０が、例えば、書込み用の領域に格納されている分割データとＲＯＭ１２０に書き込んだ分割データとを比較することで、ｎ番目の分割データがＲＯＭ１２０に正常に書き込まれたか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、分割データが正常に書き込まれたと判定すれば（Ｙｅｓ）、処理をステップ９２へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、分割データが正常に書き込まれなかったと判定すれば（Ｎｏ）、処理をステップ９５へと進める。
【００９２】
ステップ９２では、ＥＣＵ１００のマイクロコンピュータ１１０が、書込み装置３００から受信した分割データがコピー用の領域にコピーされたことを示すコピー完了メッセージが、書込みサブプログラムから通知されたか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、コピー完了メッセージが通知されていると判定すれば（Ｙｅｓ）、処理をステップ９３へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、コピー完了メッセージが通知されていないと判定すれば（Ｎｏ）、コピー完了メッセージが通知されるまで待機する。
【００９３】
ステップ９３では、ＥＣＵ１００のマイクロコンピュータ１１０が、コピー用の領域に格納されたデータはアプリケーションプログラムの転送完了メッセージであるか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、転送完了メッセージであると判定すれば（Ｙｅｓ）、処理を終了する。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、転送完了メッセージでないと判定すれば（Ｎｏ）、処理をステップ１０２へと進める。
【００９４】
ステップ９４（図１２）では、初回の分割データを正常に受信できなかったため、ＥＣＵ１００のマイクロコンピュータ１１０が、初回の分割データを再度取得するために、分割データの再送要求メッセージを書込み装置３００に送信する。なお、ＥＣＵ１００のマイクロコンピュータ１１０は、分割データの再送要求メッセージと共に、分割データを正常に受信できなかったことを示すメッセージを書込み装置３００に送信するようにしてもよい。その後、ＥＣＵ１００のマイクロコンピュータ１１０は、処理をステップ８５へと戻す。
【００９５】
ステップ９５（図１３）では、ｎ番目の分割データがＲＯＭ１２０に正常に書き込まれなかったため、ＥＣＵ１００のマイクロコンピュータ１１０は、タイマＴ１の経過時間がタイムアウトになる直前のタイミング（ここでは４９［ｍｓ］）に達したか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、タイムアウト直前のタイミングに達したと判定すれば（Ｙｅｓ）、処理をステップ９６へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、タイムアウト直前のタイミングに達していないと判定すれば（Ｎｏ）、処理をステップ９１へと戻す。
【００９６】
ステップ９６では、タイムアウト直前のタイミングになったため、ＥＣＵ１００のマイクロコンピュータ１１０は、タイマＴ２の経過時間がタイムアウトによるプログラム再送の延期要求を終了するタイミング（５０００［ｍｓ］）に達したか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、延期要求を終了するタイミングに達したと判定すれば（Ｙｅｓ）、処理をステップ９７へと進める。一方、ＥＣＵ１００のマイクロコンピュータ１１０は、延期要求を終了するタイミングに達していないと判定すれば（Ｎｏ）、処理をステップ１００へと進める。
【００９７】
ステップ９７では、延期要求を複数回繰り返したにもかかわらず、ｎ番目の分割データがＲＯＭ１２０に正常に書き込まれず失敗となり、該延期要求を終了するタイミングに達したため、ＥＣＵ１００のマイクロコンピュータ１１０が、分割データを正常に書き込むことができなかったことを示す書込み異常メッセージを書込み装置３００に送信する。
【００９８】
ステップ９８では、ＥＣＵ１００のマイクロコンピュータ１１０が、分割データを書き込もうとしたＲＯＭ１２０の領域を消去すると共に、タイマＴ１およびタイマＴ２をそれぞれリセットする。
【００９９】
ステップ９９では、ＥＣＵ１００のマイクロコンピュータ１１０が、ＲＡＭ１３０の第１のバッファ領域１３２を、書込み装置３００から受信した分割データをコピーするためのコピー用の領域に設定する。その後、ＥＣＵ１００のマイクロコンピュータ１１０は、アプリケーションプログラムの書込みを最初から実行すべく、処理をステップ８３へと戻す。
【０１００】
ステップ１００では、タイムアウト直前のタイミングになり、かつ、延期要求を終了するタイミングにはまだ達していないため、ＥＣＵ１００のマイクロコンピュータ１１０が、タイムアウトによるプログラム再送を延期する要求を示す延期要求メッセージを書込み装置３００に送信する。
ステップ１０１では、ＥＣＵ１００のマイクロコンピュータ１１０が、タイマＴ１をリスタートさせた後に、処理をステップ９１へと戻す。
【０１０１】
ステップ１０２（図１４）では、アプリケーションプログラムの転送が完了していないので、ＥＣＵ１００のマイクロコンピュータ１１０が、例えば、チェックサムを利用して、コピー用の領域にコピーされたｎ＋１番目の分割データが正常に受信できたか否かを判定する。そして、ＥＣＵ１００のマイクロコンピュータ１１０は、分割データが正常に受信できたと判定すれば（Ｙｅｓ）、処理をステップ１０３へと進める。一方、分割データが正常に受信できなかったと判定すれば（Ｎｏ）、処理をステップ１０６へと進める。なお、ｎ＋１番目の分割データが正常に受信できたか否かは、その分割データを受信した直後に判定してもよい。
【０１０２】
ステップ１０３では、ＥＣＵ１００のマイクロコンピュータ１１０が、コピー用に設定されていたバッファ領域を書込み用の領域に設定すると共に、書込み用に設定されていたバッファ領域をコピー用の領域に設定する。
【０１０３】
ステップ１０４では、ＥＣＵ１００のマイクロコンピュータ１１０が、ｎ＋２番目の分割データを取得するために、分割データの送信要求メッセージを書込み装置３００に送信する。また、ＥＣＵ１００のマイクロコンピュータ１１０は、分割データの送信要求メッセージと共に、ｎ番目の分割データをＲＯＭ１２０に書き込んだ旨の書込み完了メッセージ、及び、ｎ＋１番目の分割データを受信した旨のメッセージを書込み装置３００に送信する。
【０１０４】
ステップ１０５では、ＥＣＵ１００のマイクロコンピュータ１１０が、カウンタ変数ｎに１を加算、要するに、カウンタ変数ｎをインクリメントする。その後、ＥＣＵ１００のマイクロコンピュータ１１０は、処理をステップ８９へと戻す。
【０１０５】
ステップ１０６では、ｎ＋１番目の分割データを正常に受信できなかったため、ＥＣＵ１００のマイクロコンピュータ１１０が、ｎ＋１番目の分割データを再度取得するために、ｎ＋１番目の分割データの再送要求メッセージを書込み装置３００に送信する。その後、ＥＣＵ１００のマイクロコンピュータ１１０は、処理をステップ９２へと戻す。なお、ＥＣＵ１００のマイクロコンピュータ１１０は、分割データの再送要求メッセージと共に、ｎ＋１番目の分割データを正常に受信できなかったことを示すメッセージを書込み装置３００に送信するようにしてもよい。
【０１０６】
図１５は、ＥＣＵ１００が書込み装置３００から分割データを受信したことを契機として、書込みサブプログラムに従って、ＥＣＵ１００のマイクロコンピュータ１１０が実行するデータコピー処理の一例を示す。
ステップ１１０では、ＥＣＵ１００のマイクロコンピュータ１１０が、書込み装置３００から受信した分割データを、通信回路１４０における通信バッファ部１５０の受信バッファＲＸからコピー用の領域にコピーする。
【０１０７】
ステップ１１１では、ＥＣＵ１００のマイクロコンピュータ１１０が、分割データのコピー完了メッセージを書込みプログラムに通知する。なお、ＥＣＵ１００のマイクロコンピュータ１１０は、コピー用の領域を、通信バッファ部１５０の受信バッファＲＸに相当する領域に設定し、このコピー用の領域を使用して分割データを受信するようにしてもよい。このようにすれば、通信バッファ部１５０の受信バッファＲＸからコピー用の領域に分割データをコピーする処理が不要となる。
【０１０８】
また、分割データの送信要求からコピー完了までの処理時間と、分割データをＲＯＭ１２０に書き込んで検証するまでの処理時間とで差がある場合、時間の長い方の処理が完了したときに、次の分割データの受信処理と、分割データをＲＯＭ１２０に書き込む処理とを開始するようにしてもよい。
【０１０９】
このように、書込み装置３００から受信した分割データをＥＣＵ１００の受信バッファＲＸにコピーし、ＲＯＭ１２０に書込みを行うためのバッファ領域を２つ用意する。そして、２つのバッファ領域のうち、一方のバッファ領域を、ＲＯＭ１２０に対する書き込む処理に使用している間、他方のバッファ領域を、ＥＣＵ１００が受信した分割データをコピーする処理に使用する。これにより、ＥＣＵ１００において、一方のバッファ領域を使用してＲＯＭ１２０に分割データを書き込む処理と、分割データの受信及び分割データを他方のバッファ領域にコピーする処理とを並列に行うことができる。このため、プログラム書込み処理に要する時間を短縮することができる。
また、これらの処理を実現するためには、ＥＣＵ１００で実行する処理を変更すればよいため、書込み装置３００を大幅に変更せずに、プログラム書込み処理に要する時間を短縮することができる。
【０１１０】
図１６〜図１８は、上記のようなＥＣＵ１００と書込み装置３００との間における分割データのＲＯＭ１２０への書込み処理のシーケンスを、分割データのサイズ増大に伴うタイムアウトを回避する方策を中心にまとめたものである。
図１６に示す書込み処理のシーケンスは、５０［ｍｓ］のタイムアウト時間内に、２０４８バイトの分割データをＲＯＭ１２０へ正常に書き込むことができた場合の一例である。この場合、ＥＣＵ１００は、書込み装置３００から転送された書込みプログラムを展開及び起動した後、分割データの送信要求メッセージを書込み装置３００に送信する。書込み装置３００は、ＥＣＵ１００からの送信要求メッセージを受けて、アプリケーションプログラムを２０４８バイトに分割した分割データを作成し、該作成した分割データを送信バッファＴＸのサイズ（６４バイト）に合わせて３２個の小データに分けてＥＣＵ１００に送信する。
【０１１１】
ＥＣＵ１００は、書込み装置３００からの分割データを正常に受信することができると、正常受信メッセージを書込み装置３００に送信すると共に、タイマＴ１およびタイマＴ２をスタートさせて、該分割データのＲＯＭ１２０への書込みを開始する。そして、タイムアウト時間が経過する前までに分割データのＲＯＭ１２０への書込みが成功すると、ＥＣＵ１００は、書込み完了メッセージと共に次の分割データの送信要求メッセージを書込み装置３００に送信し、タイマＴ１およびタイマＴ２をリセットする。書込み装置３００は、ＥＣＵ１００からの送信要求メッセージを受けて、次の分割メッセージをＥＣＵ１００に送信する。
【０１１２】
図１７に示す書込み処理のシーケンスは、２０４８バイトの分割データのＲＯＭ１２０への書込みが初回のタイムアウト時間が経過する前までに正常に完了できず、タイムアウトによるプログラム再送の延期要求後に、分割データをＲＯＭ１２０へ正常に書き込むことができた場合の一例である。この場合、ＥＣＵ１００は、上記図１６のときと同様にして、分割データの送信要求メッセージを書込み装置３００に送信し、書込み装置３００から転送される２０４８バイトの分割データを正常に受信すると、正常受信メッセージを書込み装置３００に送信すると共に、タイマＴ１およびタイマＴ２をスタートさせて、該分割データのＲＯＭ１２０への書込みを開始する。
【０１１３】
そして、ＥＣＵ１００は、タイマＴ１の経過時間がタイムアウトになる直前のタイミングの４９［ｍｓ］に達した段階で、分割データをＲＯＭ１２０へ正常に書き込むことができていないことを判断して、タイムアウトによるプログラム再送の延期要求を示す延期要求メッセージを書込み装置３００に送信する。書込み装置３００は、ＥＣＵ１００からの延期要求を受けて、タイムアウト時間を計測するためのタイマＴ０をリスタートして待機する。ＥＣＵ１００は、延期要求メッセージの送信後、タイマＴ１をリスタートすると共に、分割データのＲＯＭ１２０への書込み処理をリトライする。そして、２回目のタイムアウト時間になる前に分割データのＲＯＭ１２０への書込みが成功すると、ＥＣＵ１００は、書込み完了メッセージと共に次の分割データの送信要求メッセージを書込み装置３００に送信し、タイマＴ１およびタイマＴ２をリセットする。書込み装置３００は、ＥＣＵ１００からの送信要求メッセージを受けて、次の分割メッセージをＥＣＵ１００に送信する。
【０１１４】
図１８に示す書込み処理のシーケンスは、延期要求を複数回繰り返しても分割データをＲＯＭ１２０へ正常に書き込むことができない場合の一例である。この場合、ＥＣＵ１００は、上記図１７のときと同様にして、初回のタイムアウトになる直前に延期要求メッセージを書込み装置３００に送信し、タイマＴ１をリスタートして、分割データのＲＯＭ１２０への書込み処理をリトライする。そして、ＥＣＵ１００は、タイマＴ１の経過時間がタイムアウトになる直前のタイミングに再度達した段階で、分割データをＲＯＭ１２０へ正常に書き込むことができていないことを判定して、２度目の延期要求メッセージを書込み装置３００に送信する。書込み装置３００は、ＥＣＵ１００からの２度目の延期要求を受けてタイマＴ０を再度リスタートして待機する。
【０１１５】
以後、分割データのＲＯＭ１２０への書込みが成功するか、又はタイマＴ２の経過時間が延期要求を終了するタイミングの５０００［ｍｓ］に達するまで、上記のような延期要求が繰り返される。ここでは、タイマＴ２の経過時間が５０００［ｍｓ］に達しても分割データがＲＯＭ１２０へ正常に書き込まれなかったため、ＥＣＵ１００は、書込み異常メッセージを書込み装置３００に送信すると共に、タイマＴ１およびタイマＴ２をそれぞれリセットする。書込み装置３００は、ＥＣＵ１００からの書込み異常メッセージを受けて、アプリケーションプログラムの再送設定を行う。
【０１１６】
以上説明したように本実施形態によれば、タイムアウト時間に応じて分割データのサイズを設定したことでＥＣＵ１００と書込み装置３００との間での通信回数が減ってデータの転送速度が向上すると共に、タイムアウト時間が経過する前までに分割データの書込み処理が正常に完了しない場合にＥＣＵ１００が書込み装置３００にプログラム再送の延期要求を送信することで、分割データのサイズが増大してもタイムアウトによるプログラム再送が発生し難くなる。このため、分割データの転送時間を短縮して不揮発性メモリへの大容量プログラムの書込み処理を高速に実行することができる。これにより、例えば、数千台の車両に搭載されるＥＣＵ１００のそれぞれに大容量のプログラムを書き込む場合であっても、１台当たりの書込み時間が短縮されるので全体の書込み時間を大幅に短くすることができ、車両量産時のコスト削減に有効である。
【符号の説明】
【０１１７】
１００…ＥＣＵ（電子制御装置）
１１０…マイクロコンピュータ
１２０…ＲＯＭ（不揮発性メモリ）
１３０…ＲＡＭ（揮発性メモリ）
１４０，３２０…通信回路
１５０，３３０…通信バッファ部
２００…ネットワークケーブル
３００…書込み装置
【図１】
2020147157.tif 000003
【図２】
2020147157.tif 000004
【図３】
2020147157.tif 000005
【図４】
2020147157.tif 000006
【図５】
2020147157.tif 000007
【図６】
2020147157.tif 000008
【図７】
2020147157.tif 000009
【図８】
2020147157.tif 000010
【図９】
2020147157.tif 000011
【図１０】
2020147157.tif 000012
【図１１】
2020147157.tif 000013
【図１２】
2020147157.tif 000014
【図１３】
2020147157.tif 000015
【図１４】
2020147157.tif 000016
【図１５】
2020147157.tif 000017
【図１６】
2020147157.tif 000018
【図１７】
2020147157.tif 000019
【図１８】
2020147157.tif 000020