以下、本発明の実施の形態について添付図面を参照しながら詳細に説明する。
図1は、自動車用電子制御装置(ECU)の不揮発性メモリに制御プログラムを書き込む、データ書込みシステムの一例を示す。図1において、ECU100は、CAN(Controller Area Network)、シリアル通信、FlexRay(登録商標)などのネットワークケーブル200を介して、作業者が操作する外部装置としての書込み装置300に着脱可能に接続される。
ECU100は、自動車に搭載された各種機器、例えば、燃料噴射弁、自動変速機、電動ブレーキシステム、ABS(Antilock Brake System)、可変バルブタイミング機構などを制御する電子機器である。具体的には、ECU100は、図2に示すように、マイクロコンピュータ110、不揮発性メモリの一例であるROM(Read Only Memory)120、揮発性メモリの一例であるRAM(Random Access Memory)130、通信回路140及び通信バッファ部150を備えている。ここで、ROM120としては、電気的にデータを消去する及び書き込むことで、任意のデータに書き換え可能なフラッシュROMを使用することができる。
マイクロコンピュータ110は、プロセッサとしてのCPU(Central Processing Unit)及びキャッシュメモリなどを内蔵し、ROM120及びRAM130に格納された各種プログラムを実行する。ROM120には、少なくとも、書込み装置300から送信された任意のプログラムをRAM130に展開するRAM展開プログラムと、RAM130の所定領域を初期化するRAM初期化プログラムと、が格納されている。なお、RAM初期化プログラムは、RAM展開プログラムに組み込まれていてもよい。RAM130には、ROM120に任意のデータを書き込むときに使用する、第1のバッファ領域132及び第2のバッファ領域134がそれぞれ確保されている。通信回路140は、通信バッファ部150を使用して、書込み装置300を含む他の装置と通信する。
書込み装置300は、例えば、パーソナルコンピュータから構成され、ハードディスクドライブ、SSD(Solid State Drive)などのストレージ310と、通信回路320と、通信バッファ部330と、マンマシンインタフェースとして機能するモニタ340及びキーボード350と、を内蔵する。ストレージ310には、ECU100に転送される書込みプログラム及びアプリケーションプログラムなどが格納されている。通信回路320は、通信バッファ部330を使用して、ECU100と通信する。従って、書込み装置300を操作する作業者は、モニタ340及びキーボード350を操作することで、ECU100に転送する書込みプログラム及びアプリケーションプログラムを対話的に指定することができる。
なお、本実施形態では、ECU100及び書込み装置300を一対一で接続する構成例を示したが、1台の書込み装置300に対して複数のECU100を接続し、1台の書込み装置300が、各ECU100に対して時分割でデータを転送するようにしてもよい。
ここで、ECU100と書込み装置300とが通信するときに使用する、ECU100の通信バッファ部150、及び、書込み装置300の通信バッファ部330の詳細を説明する。
ECU100の通信バッファ部150には、図3上段に示すように、例えば、CANにおけるメールボックスなど、一定のサイズの通信バッファが複数存在する。ECU100は、各装置と通信するとき、通信バッファ部150の通信バッファのうち、通信相手となる装置との通信用として予め割り当てられている通信バッファを使用する。なお、それぞれの通信バッファは、データの送信に使用する送信バッファTX、データの受信に使用する受信バッファRXに分かれている。
一方、書込み装置300の通信バッファ部330には、一定サイズの通信バッファが複数存在する。通信バッファ部330の通信バッファのサイズは、ECU100における通信バッファ部150の通信バッファのサイズと同じである。
図3上段において、ECU100の通信バッファ部150には、ECU100が書込み装置300と通信するために使用する通信バッファ(以下、「書込み装置用通信バッファ」と略記する)として、2個の通信バッファ(送信バッファTX1個、受信バッファRX1個)が割り当てられている。また、通信バッファ部150の他の通信バッファは、書込み装置300以外の装置との通信用に割り当てられている。
具体的に、例えば、通信バッファのサイズが8バイトであり、かつ、ECU100が1つのデータの受信ごとに書込み装置300にその応答を返すように、ECU100と書込み装置300との間で同期をとりながら通信を行う場合を考えてみる。この場合、1つのデータの受信に1個の受信バッファRXを使用するため、ECU100が、例えば、64バイトのデータを取得するまでに必要となる通信回数は16回になる。即ち、書込み装置300が、ECU100に転送するプログラムを64バイトごとに分割し、当該分割データを8バイトごとの小データに更に分けて転送し、ECU100は、8バイトの小データを受信するごとに書込み装置300に応答を返す。このため、ECU100が64バイトの分割データを取得するまでに16回の通信が必要となる。
ところで、ECU100は、ROM120にアプリケーションプログラムを書き込む場合、書込み装置300以外の装置と通信しないため、書込み装置300以外の装置と通信するために予め割り当てられている通信バッファ(以下、「他の装置用通信バッファ」と略記する)は使用されない。このため、書込みプログラムは、書込み装置用通信バッファに加えて、他の装置用通信バッファを、ECU100と書込み装置300との間の通信に転用するように変更することができる。図3下段は、変更後の通信バッファ部150,330の一例である。
図3下段において、ECU100は、書込み装置300と通信するとき、書込み装置用通信バッファとして2個の通信バッファ、及び、他の装置用通信バッファのうち7個の通信バッファを転用する。この場合、ECU100が使用する9個の通信バッファは、送信バッファTXが1個、受信バッファRXが8個となる。一方、書込み装置300における通信バッファ部330の通信バッファは、送信バッファTXが8個、受信バッファRXが1個となる。
このような変更後の通信バッファ部150,330を使用して、ECU100と書込み装置300との間で同期をとりながら通信を行う場合、1つのデータの受信に8個の受信バッファRXが使用できるため、ECU100が64バイトのデータを書込み装置300から取得するまでの通信回数は9回で済むことになる。即ち、書込み装置300が、ECU100に転送するプログラムを64バイトごとに分割し、当該分割データを8バイトごとの小データに更に分けて転送し、ECU100は、8バイトの小データを8個受信するごとに書込み装置300に応答を返す。このため、ECU100が64バイトの分割データを取得するまでの通信回数は9回となる。
このように、ECU100は、書込み装置用通信バッファに加えて他の装置用通信バッファを転用して通信することが可能であるため、同期をとるような通信では、通信回数が少なくなり、データの転送に要する時間が短縮し、データ転送の高速化を図ることができるようになる。さらに、書込み装置300との通信に使用する通信バッファの数を増やす、及び/又は、個々の通信バッファのサイズを大きくすることができれば、大容量の分割データを高速に転送することも可能になる。
具体的な一例を挙げると、転用する他の装置用通信バッファを7個から31個に増やすことができれば、8バイトの受信バッファRXを32個使用して256バイトのデータのブロックを33回の通信で転送することが可能になる。これに加えて、個々の通信バッファのサイズを8バイトから64バイトに拡大することができれば、64バイトの受信バッファRXを32個使用して2048バイトのデータのブロックを同じ33回の通信で転送することが可能になる。一方、前述の図3上段に示した設定(8バイトの受信バッファRXを1個使用)の場合、256バイトのデータを転送しようとすると通信回数は64回、2048バイトのデータを転送しようとすると通信回数は512回にも及ぶことになる。
なお、通信バッファ部150,330の使い方は上記の具体例に限定されるものではなく、ECU100及び書込み装置300間の通信で使用する通信バッファの数、並びに個々の通信バッファのサイズは、通信バッファ部150,330の容量に応じて適宜に設定することが可能である。
上記のようにECU100と書込み装置300との間での通信回数を減らして転送時間の増加を抑えることを考えた場合、個々の分割データが大きなサイズを有するようになるため、ECU100におけるROM120への分割データの書込み処理が所定の時間内に間に合わずにタイムアウトになってしまう可能性がある。タイムアウトになる所定の時間(以下、「タイムアウト時間」と呼ぶ)は、例えば、ECU100を車両に組み込んで使用する車両組み立てメーカーの規格等によって予め決められており、タイムアウト時間内に書込み処理が正常に完了したことを示す信号がECU100から書込み装置300に送信されない場合には、プログラムの再送が必要になって転送時間の増加を招いてしまうことになる。そこで、本実施形態のECU100は、タイムアウト時間に応じて分割データのサイズを設定すると共に、タイムアウト時間が経過する前までに(好ましくはタイムアウト時間が経過する直前に)、タイムアウトによるプログラム再送の延期を要求する信号を書込み装置300に送信することで、タイムアウトによる転送時間の増加を回避する。
ここで、タイムアウト時間に応じた分割データのサイズ設定について詳しく説明する。まず、分割データとは、図4の概念図に示すように、書込み装置300からECU100に転送するプログラムの全体を所定サイズで分割したときの1つのブロックのデータである。図4上段の一例は、全体のサイズがNバイトのプログラムをnバイト単位で分割した場合を示しており、この場合の1つの分割データのサイズはnバイトである。図4下段は、分割データのサイズをm倍に拡大した一例、即ち、全体のサイズがNバイトのプログラムをn×mバイト単位で分割した場合を示しており、この場合の1つの分割データのサイズはn×mバイトである(N>n×m>n)。
上記図4のように分割データのサイズをnバイトからm倍にして通信回数の低減を図る場合、タイムアウト時間内に、n×mバイトを有する分割データのROM120への書込み処理が完了可能となるように倍率mを設定する必要がある。
具体的に、例えば、タイムアウト時間が50[ms]であり、256バイトを有する分割データをm倍にして通信回数の低減を図ることを想定してみる。この想定において、256バイトの分割データのROM120への書込み処理に、通常、0.4[ms]程度の時間を要し、最長でも6[ms]で書込み処理を完了することが可能であった場合、倍率mとして8倍を設定するのが好適である。すなわち、256バイトの8倍である2048バイトを有する分割データは、計算上、最長で48[ms](=6[ms]×8)の時間内に書込み処理を完了することが可能であり、通常の書込み処理が実行されている状況下であれば、タイムアウト時間の50[ms]を超えることはない。つまり、分割データのサイズは、ECU100が分割データをROM120へ書き込むのに通常要する時間がタイムアウト時間よりも短くなるように設定するのがよい。分割データのサイズを256バイトから2048バイトに拡大することによって、プログラムの転送及び書込みに要する時間を35%程度削減することが可能になる。
以下では、上記のようにタイムアウト時間に応じてサイズ設定された分割データを書込み装置300からECU100に転送してROM120へ書き込むための具体的な手順について詳しく説明する。なお、本発明における分割データのサイズ設定は上記一例に限定されない。
図5は、前述したデータ書込みシステム(図1及び図2)を使用して、ECU100のROM120にアプリケーションプログラムを書き込む手順の一例を示す。
ステップ1(図では「S1」と略記する。以下同様。)では、作業者が、書込み装置300にECU100を接続する。ECU100は、書込み装置300に接続されると電源が投入され、書込み装置300と通信可能になり、書込み装置300から転送されるデータの受信待ち状態となる。
ステップ2では、作業者が書込み装置300と対話して、ECU100のROM120にプログラムを書き込むための書込みプログラムと、該書込みプログラムを使用してECU100のROM120に書き込むアプリケーションプログラム(例えば、エンジン制御プログラムなど)とを指定する。書込み装置300は、書込みプログラム及びアプリケーションプログラムが指定されると、それらのプログラムをECU100に転送する。このとき、書込みプログラムに比べて大きなサイズを有するアプリケーションプログラムの転送は、上述したようなタイムアウト時間に応じて分割データのサイズを設定する方法で行われ、サイズが比較的小さい書込みプログラムの転送は、従前の方法で行われるものとする。ECU100は、書込み装置300から転送されたプログラムを受信しながら、指定された書込みプログラムに従いアプリケーションプログラムをROM120に書き込む。以下、このステップ2の処理を、「プログラム書込み処理」と呼ぶ。
ステップ3では、作業者が、書込み装置300からECU100を取り外す。ECU100は、書込み装置300から取り外されると電源が遮断され、RAM130に格納されている各種データが消失する。
図6は、プログラム書込み処理の概要を示す。
ステップ11では、書込み装置300が、作業者によって書込みプログラム及びアプリケーションプログラムが指定されると、ECU100に対し、書込みプログラム(例えば、書込みプログラム2)の転送を開始するメッセージを送信した後、書込みプログラムを転送する。
ここで、作業者が指定する書込みプログラムは、ストレージ310に構築された書込みプログラムデータベース312に格納されている。書込みプログラムは、ECU100に転送され、ECU100上で、通信環境(通信バッファの使用方法、通信速度、暗号化方式など)の変更などの初期化処理を実行すると共に、書込み装置300からの要求に応じて、データの受信処理と当該受信データをROM120の少なくとも一部に書き込む処理とを実行する。
また、作業者が指定するアプリケーションプログラムは、ストレージ310に構築されたアプリケーションプログラムデータベース314に格納されている。各アプリケーションプログラムは、例えば、ECU100の制御対象となる自動車のエンジン制御用のプログラムである。
ステップ12では、ECU100が、書込み装置300から書込みプログラムの転送を開始するメッセージを受信すると、ROM120に格納されているRAM初期化プログラムを起動し、少なくとも書込みプログラムを展開するRAM130の領域を初期化する。また、RAM130の初期化が完了すると、ECU100が、ROM120に格納されているRAM展開プログラムを起動する。ここで、RAM展開プログラムは、ECU100が受信した書込みプログラムをRAM130に展開する処理を行う。したがって、ECU100は、書込みプログラムを受信しながら、RAM展開プログラムによって、受信した書込みプログラムをRAM130に展開する。
ステップ13では、書込みプログラムの展開が完了すると、ECU100が、RAM展開プログラムによって、RAM130に展開した書込みプログラムを起動する。
ステップ14では、ECU100が、書込みプログラムによって、ECU100と書込み装置300との間の通信環境を、その書込みプログラムに応じた通信環境に変更し、書込み装置300に対して、アプリケーションプログラムの送信を要求するメッセージを送信する。このとき、上述の図3に示したような通信バッファ部150,330の設定変更や、図4に示したような分割データのサイズ設定の変更も行われることになる。
ステップ15では、書込み装置300が、アプリケーションプログラムの送信を要求するメッセージを受信すると、ECU100に対して、作業者によって指定されたアプリケーションプログラム(例えば、アプリケーションプログラム1)の転送を開始する。
ステップ16では、ECU100が、書込み装置300からアプリケーションプログラムを受信しながら、書込みプログラムによって、受信したアプリケーションプログラムをROM120に書き込む。このとき、後で詳しく説明するように、タイムアウトによる転送時間の増加を回避するための措置がとられる。
なお、アプリケーションプログラムの書込み完了後、ECU100は書込み装置300から取り外され、電源がOFFになる。次にECU100の電源が投入されたとき、ECU100の通信環境は、初期状態に戻る。また、プログラム書込み処理の途中で、何らかの異常(例えば、書込み装置300との通信が遮断されたなど)が発生した場合には、ECU100が自らをリセットし、その通信環境が初期状態に戻る。
したがって、書込みプログラムを適宜選択することで、プログラム書込み処理において、通信環境及びアプリケーションプログラムの書込み条件などに適合した、書込みプログラムを動作させることができる。このため、例えば、通信速度がより高速な書込みプログラムを動作させることで高速に通信を行い、プログラム書込み処理を高速化することができる。また、プログラム書込み処理を実行するときに、書込みプログラムがECU100に転送されるため、書込みプログラムをROM120に格納する必要がなく、ROM120の使用量を削減することができる。さらに、書込みプログラムを変更することで、プログラム書込み処理に新しい機能を追加することができる。これにより、上述の具体例で説明したような分割データのサイズ設定を256バイトから2048バイトに拡大することも、書込みプログラムの変更により容易に対応することが可能である。
なお、ECU100に書込み装置300に加えて他の装置が接続された状況でも、ECU100は、他の装置との通信を遮断し、書込み装置300のみと通信するようにすれば、プログラム書込み処理を実行することができる。ECU100に書込み装置300に加えて他の装置が接続された状況で、プログラム書込み処理を実行する一例として、ECU100が自動車に組付けられた状態で、アプリケーションプログラムの書込みを実施することが挙げられる。この場合、通信路の競合を防ぐため、ECU100は、書込み装置300と通信するときに使用する通信環境を、他の装置と共通する通信環境(例えば、通信速度が共通)にする必要がある。このため、作業者は、他の装置と共通の通信環境を確立する書込みプログラムを指定し、プログラム書込み処理を実施する。
図7は、作業者がECU100を書込み装置300に接続して、書込みプログラム及びアプリケーションプログラムを指定したことを契機として、書込み装置300が実行するプログラム書込み処理の一例を示す。
ステップ31では、書込み装置300が、書込みプログラムの転送を開始することを示す転送開始メッセージをECU100に送信する。ここで、転送開始メッセージは、例えば、ECU100と書込み装置300との間で送受信されるパケットのヘッダに格納することができる。
ステップ32では、書込み装置300が、作業者によって指定された書込みプログラムを、ECU100が1回の通信で受信可能なサイズの小データに順次分割し、例えば、パケットのデータ本体(ペイロード)に格納する。また、書込み装置300は、書込みプログラムの書込み位置を示すアドレス(相対アドレス又は絶対アドレス)を、例えば、パケットのヘッダに格納する。なお、書込みプログラムの書込み位置を示すアドレスは、パケットのデータ本体に格納することもできる。
ステップ33では、書込み装置300が、ステップ32で作成したパケットのデータ本体を参照し、そこに格納されているデータのすべてが初期値(例えば、0xFF)になっているか否かを判定する。そして、書込み装置300は、データのすべてが初期値になっていると判定すれば(Yes)、そのパケットの転送をスキップすべく、処理をステップ35へと進める。一方、書込み装置300は、データのすべてが初期値になっていない、要するに、そのデータは書込みプログラムの機能を実現する一部であると判定すれば(No)、処理をステップ34へと進める。
ステップ34では、書込み装置300が、ステップ32で作成したパケットをECU100に転送する。その後、書込み装置300は、処理をステップ35へと進める。
ステップ35では、書込み装置300が、ECU100からデータを要求するデータ要求メッセージを受信したか否かを判定する。ここで、データ要求メッセージであるか否かは、例えば、パケットのヘッダを参照することで判定することができる。そして、書込み装置300は、データ要求メッセージを受信したと判定すれば(Yes)、処理をステップ36へと進める。一方、書込み装置300は、データ要求メッセージを受信していないと判定すれば(No)、データ要求メッセージを受信するまで待機する。
ステップ36では、書込み装置300が、作業者によって指定された書込みプログラムの転送を完了したか否かを判定する。そして、書込み装置300は、書込みプログラムの転送が完了したと判定すれば(Yes)、処理をステップ37へと進める。一方、書込み装置300は、書込みプログラムの転送が完了していないと判定すれば(No)、処理をステップ32へと戻す。
ステップ37では、書込み装置300が、書込みプログラムの転送が完了したことを示す転送完了メッセージをECU100に送信する。ここで、転送完了メッセージは、例えば、パケットのヘッダに格納することができる。
ステップ38では、書込み装置300が、ECU100から何らかのメッセージ(パケット)を受信したか否かを判定する。そして、書込み装置300は、メッセージを受信したと判定すれば(Yes)、処理をステップ39へと進める。一方、書込み装置300は、メッセージを受信していないと判定すれば(No)、メッセージを受信するまで待機する。
ステップ39では、書込み装置300が、ECU100から受信したメッセージは、書込みプログラムが正常に転送されたことを示す転送正常メッセージであるか否かを判定する。ここで、転送正常メッセージであるか否かは、例えば、パケットのヘッダを参照することで判定することができる。そして、書込み装置300は、転送正常メッセージであると判定すれば(Yes)、処理をステップ40へと進める。一方、書込み装置300は、転送正常メッセージでない、即ち、書込みプログラムが正常に転送されなかったことを示す転送異常メッセージであると判定すれば(No)、処理をステップ41へと進める。
ステップ40では、書込み装置300が、作業者によって指定されたアプリケーションプログラムを分割しながらECU100に転送する、サブルーチン形式のアプリケーション転送処理を実行する。なお、アプリケーション転送処理は、サブルーチン形式に限らず、ステップ40の位置に展開されてもよい。
ステップ41では、書込みプログラムが正常に転送されなかったため、書込み装置300が、書込みプログラムを先頭から再送するための設定、例えば、書込みプログラムの位置を示すポインタを先頭に戻すなどの設定を行う。その後、書込み装置300は、処理をステップ32へと戻す。
このようにすれば、書込み装置300は、作業者によって書込みプログラム及びアプリケーションプログラムが指定されたことを契機として、書込みプログラムを、ECU100が1回の通信で受信可能なサイズの小データに順次分割し、これをパケットのデータ本体に格納する。そして、書込み装置300は、パケットのデータ本体のすべてが初期値に設定されていれば、そのパケットの転送をスキップすることで、書込み装置300からECU100へと転送するパケットの転送量を削減し、書込みプログラムの転送時間を短縮することができる。また、書込み装置300は、ECU100からのメッセージによって、書込みプログラムが正常に転送できたならば、アプリケーションプログラムを転送する処理を実行する一方、書込みプログラムが正常に転送できなかったならば、書込みプログラムを再送する。
図8は、ECU100が書込みプログラムの転送開始メッセージを受信したことを契機として、ECU100のマイクロコンピュータ110が実行する書込みプログラム展開処理の一例を示す。ここで、ECU100のマイクロコンピュータ110は、ROM120に格納されているRAM展開プログラム及びRAM初期化プログラムに従って、書込みプログラム展開処理を実行する。
ステップ51では、ECU100のマイクロコンピュータ110が、RAM130の記憶領域のうち、少なくとも、書込みプログラムを展開する領域を初期値で初期化する。なお、RAM130を初期化するとき、第1のバッファ領域132及び第2のバッファ領域134も併せて初期化してもよい。
ステップ52では、ECU100のマイクロコンピュータ110が、書込み装置300からパケットを受信したか否かを判定する。そして、ECU100のマイクロコンピュータ110は、パケットを受信したと判定すれば(Yes)、処理をステップ53へと進める。一方、ECU100のマイクロコンピュータ110は、パケットを受信していないと判定すれば(No)、パケットを受信するまで待機する。
ステップ53では、ECU100のマイクロコンピュータ110が、例えば、パケットのヘッダを参照することで、書込み装置300からのパケットは書込みプログラムの転送完了メッセージであるか否かを判定する。そして、ECU100のマイクロコンピュータ110は、書込みプログラムの転送完了メッセージであると判定すれば(Yes)、処理をステップ54へと進める。一方、ECU100のマイクロコンピュータ110は、書込みプログラムの転送完了メッセージでない、即ち、書込みプログラムのデータが転送されたと判定すれば(No)、処理をステップ57へと進める。
ステップ54では、ECU100のマイクロコンピュータ110が、例えば、パケットのヘッダに格納されているチェックサムを参照し、書込み装置300から転送された書込みプログラムが正常に転送されたか否かを判定する。そして、ECU100のマイクロコンピュータ110は、書込みプログラムが正常に転送されたと判定すれば(Yes)、処理をステップ55へと進める。一方、ECU100のマイクロコンピュータ110は、書込みプログラムが正常に転送されなかったと判定すれば(No)、処理をステップ59へと進める。
ステップ55では、ECU100のマイクロコンピュータ110が、転送正常メッセージを書込み装置300に送信する。ここで、転送正常メッセージは、例えば、ECU100から書込み装置300へと送信されるパケットのヘッダに格納することができる。
ステップ56では、ECU100のマイクロコンピュータ110が、RAM130に展開された書込みプログラムを起動する。
ステップ57では、書込み装置300から受信したパケットには書込みプログラムのデータが格納されているため、ECU100のマイクロコンピュータ110が、パケットのデータ本体をRAM130に展開する。このとき、ECU100のマイクロコンピュータ110は、書込み装置300から転送された書込みプログラムは連続していない可能性があるため、パケットのヘッダに格納されたアドレスから展開する。
ステップ58では、ECU100のマイクロコンピュータ110が、次のデータを要求するため、データ要求メッセージを書込み装置300に送信する。ここで、データ要求メッセージは、例えば、ECU100から書込み装置300へと送信されるパケットのヘッダに格納することができる。その後、ECU100のマイクロコンピュータ110は、処理をステップ52へと戻す。
ステップ59では、書込み装置300から書込みプログラムが正常に転送されなかったため、ECU100のマイクロコンピュータ110が、転送異常メッセージを書込み装置300に送信する。ここで、転送異常メッセージは、例えば、ECU100から書込み装置300へと送信されるパケットのヘッダに格納することができる。その後、ECU100のマイクロコンピュータ110は、処理をステップ51へと戻す。
このようにすれば、ECU100は、書込み装置300から書込みプログラムの転送開始メッセージを受信したことを契機として、RAM130の記憶領域のうち、少なくとも、書込みプログラムを展開する領域を初期化する。そして、ECU100は、RAM130の初期化が完了すると、書込み装置300から順次転送される書込みプログラムのデータをRAM130に展開して起動する。このとき、ECU100は、パケットのヘッダを参照し、そこに格納されているアドレスから書込みプログラムのデータを展開する。
即ち、ECU100は、図9に示すように、ROM120に格納されているRAM展開プログラム及びRAM初期化プログラムによって、RAM130を初期化した後、書込み装置300から順次転送される書込みプログラムをRAM130に展開する。そして、ECU100は、書込みプログラムを起動し、書込み装置300から順次転送される書込みデータをROM120に書き込む。
上記のようなECU100での書込みプログラムに関する一連の処理においては、RAM130に書込みプログラムを展開する前に、図10に示すように、RAM130の所定領域が初期化されるため、データ本体の全体が初期値に設定されているパケットの転送がスキップされても、これに対応するRAM130の領域が初期値となる。したがって、データ本体のすべてが初期値に設定されているパケットの転送がスキップ可能となり、書込みプログラムの転送時間を短縮することができる。要するに、書込みプログラムは、所定サイズごとに分割されたデータであって、その全体が初期値に設定されていない状態で順次取得されるので、アプリケーションプログラムの書込みに寄与するデータのみが転送され、書込みプログラムの転送時間を短縮することができる。
図11は、書込み装置300が実行する、アプリケーション転送処理の一例を示す。
ステップ61では、書込み装置300が、ECU100から何らかのメッセージを受信したか否かを判定する。そして、書込み装置300は、メッセージを受信したと判定すれば(Yes)、処理をステップ62へと進める。一方、書込み装置300は、メッセージを受信していないと判定すれば(No)、メッセージを受信するまで待機する。
ステップ62では、書込み装置300が、例えば、パケットのヘッダを参照することで、ECU100から受信したメッセージは分割データの送信要求を示す送信要求メッセージであるか否かを判定する。そして、書込み装置300は、送信要求メッセージでないと判定すれば(Yes)、処理をステップ63へと進める。一方、書込み装置300は、送信要求メッセージであると判定すれば(No)、処理をステップ70へと進める。
ステップ63では、書込み装置300が、例えば、パケットのヘッダを参照することで、ECU100から受信したメッセージは分割データの再送要求を示す再送要求メッセージであるか否かを判定する。そして、書込み装置300は、再送要求メッセージでないと判定すれば(Yes)、処理をステップ64へと進める。一方、書込み装置300は、再送要求メッセージであると判定すれば(No)、処理をステップ72へと進める。
ステップ64では、書込み装置300が、例えば、パケットのヘッダを参照することで、ECU100から受信したメッセージは分割データを正常に受信できたことを示す正常受信メッセージであるか否かを判定する。そして、書込み装置300は、正常受信メッセージでないと判定すれば(Yes)、処理をステップ65へと進める。一方、書込み装置300は、正常受信メッセージであると判定すれば(No)、ステップ73に移って、タイムアウト時間(ここでは50[ms]とする)を計測するためのタイマT0をスタートさせた後、処理をステップ61へと戻す。
ステップ65では、書込み装置300が、例えば、パケットのヘッダを参照することで、ECU100から受信したメッセージは、タイムアウトによるプログラム再送処理を延期する要求を示す延期要求メッセージであるか否かを判定する。そして、書込み装置300は、延期要求メッセージでないと判定すれば(Yes)、処理をステップ66へと進める。一方、書込み装置300は、延期要求メッセージであると判定すれば(No)、ステップ74に移って、前述したタイムアウト計測用のタイマT0をリスタートさせた後に、処理をステップ61へと戻す。
ステップ66では、書込み装置300が、タイマT0の経過時間が50[ms]を超えてタイムアウトになったか否かを判定する。そして、書込み装置300は、タイムアウトになっていないと判定すれば(No)、処理をステップ67へと進める。一方、書込み装置300は、タイムアウトになったと判定すれば(Yes)、処理をステップ75へと進める。
ステップ67では、書込み装置300が、例えば、パケットのヘッダを参照することで、ECU100から受信したメッセージは分割データがROM120に正常に書き込まれたこと(書込み完了)を示す書込み正常メッセージであるか否かを判定する。そして、書込み装置300は、書込み正常メッセージであると判定すれば(Yes)、処理をステップ68へと進める。一方、書込み装置300は、分割データが正常に書き込まれなかったことを示す書込み異常メッセージであると判定すれば(No)、処理をステップ75へと進める。
ステップ68では、書込み装置300が、作業者によって指定されたアプリケーションプログラムの転送が完了したか否かを判定する。そして、書込み装置300は、アプリケーションプログラムの転送が完了したと判定すれば(Yes)、処理をステップ69へと進める。一方、書込み装置300は、アプリケーションプログラムの転送が完了していないと判定すれば(No)、処理をステップ61へと戻す。
ステップ69では、アプリケーションプログラムの転送が完了したので、書込み装置300が、アプリケーションプログラムの転送が完了したことを示す転送完了メッセージをECU100に送信する。
ステップ70では、ECU100からのメッセージは分割データの送信要求メッセージであるため、書込み装置300が、作業者によって指定されたアプリケーションプログラムを所定サイズに分割した分割データを作成する。具体的には、書込み装置300は、アプリケーションプログラムを所定サイズに順次分割して、パケットのデータ本体に格納する。前記所定サイズとしては、ECU100へと転送された書込みプログラムによって変更される通信環境において使用する、複数の通信バッファ(受信バッファRX)の合計サイズとすることができる。ここでは、上述の図4に関連して具体例を挙げて説明したような、タイムアウト時間が50[ms]の場合に対応する2048バイトを分割データの所定サイズとする。また、書込み装置300は、アプリケーションプログラムの書込み位置を示すアドレス(相対アドレス又は絶対アドレス)を、例えば、パケットのヘッダに格納する。なお、アプリケーションプログラムの書込み位置を示すアドレスは、パケットのデータ本体に格納することもできる。
ステップ71では、書込み装置300が、ステップ70で作成した分割データをECU100に転送する。このとき、書込み装置300は、分割データを通信バッファ部330の送信バッファTXのサイズごとに分けて格納する。ここでは、分割データが2048バイト、1個あたり64バイトの送信バッファTXが通信バッファ部330に32個ある場合、書込み装置300は、分割データを、64バイトごとに32個の小データに分けて各送信バッファTXに格納する。なお、送信バッファTXに格納された小データは、通信回路320によって、ECU100に転送される。その後、書込み装置300は、処理をステップ61へと戻す。
ステップ72では、ECU100からのメッセージは分割データの再送要求メッセージであるため、書込み装置300が、分割データをECU100に再送する。ここで、書込み装置300は、ステップ70で分割データを作成済であるため、新たに分割データを作成しなくとも、作成済の分割データを再送すればよい。その後、書込み装置300は、処理をステップ61へと戻す。
ステップ75では、タイムアウトになった又はECU100からのメッセージは書込み異常メッセージであるため、書込み装置300が、アプリケーションプログラムを先頭から再送するための設定、例えば、アプリケーションプログラムのポインタを先頭に戻すなどの設定を行う。その後、書込み装置300が、処理をステップ61へと戻す。
このようにすれば、書込み装置300は、ECU100からの分割データの送信要求メッセージに応答して、アプリケーションプログラムを所定サイズごとに順次分割した分割データをECU100に転送する。また、書込み装置300は、ECU100からの分割データの再送要求メッセージに応答して、作成済の分割データを再送する。さらに、書込み装置300は、タイムアウトを判定するか又はECU100からの書込み異常メッセージに応答して、アプリケーションプログラムを先頭から転送し直す。
図12~図14は、書込みプログラムが起動されたことを契機として、ECU100のマイクロコンピュータ110が実行する、プログラム書込み処理の一例を示す。
ステップ80では、ECU100のマイクロコンピュータ110が、ECU100が書込み装置300と通信するための通信環境を変更する。なお、ECU100が書込み装置300以外の装置と通信可能である場合には、ECU100のマイクロコンピュータ110は、通信環境を変更しなくてもよい。
ステップ81では、ECU100のマイクロコンピュータ110が、RAM130の第1のバッファ領域132を、書込み装置300から受信した分割データをコピーするためのコピー用の領域に設定する。
ステップ82では、ECU100のマイクロコンピュータ110が、書込み装置300から受信した分割データをROM120に書き込む、書込みサブプログラムを起動する。
ステップ83では、ECU100のマイクロコンピュータ110が、ROM120に書き込むアプリケーションプログラムの分割データのうち、何番目の分割データを処理中であるかを示すカウンタ変数nに1を代入する。
ステップ84では、ECU100のマイクロコンピュータ110が、初回の分割データを取得するために、分割データの送信要求メッセージを書込み装置300に送信する。
ステップ85では、ECU100のマイクロコンピュータ110が、書込み装置300から受信した分割データがコピー用の領域にコピーされたことを示すコピー完了メッセージが、書込みサブプログラムから通知されたか否かを判定する。そして、ECU100のマイクロコンピュータ110は、コピー完了メッセージが通知されていると判定すれば(Yes)、処理をステップ86へと進める。一方、ECU100のマイクロコンピュータ110は、コピー完了メッセージが通知されていないと判定すれば(No)、コピー完了メッセージが通知されるまで待機する。
ステップ86では、ECU100のマイクロコンピュータ110が、コピー用の領域に格納された初回の分割データを参照し、例えば、分割データに含まれているチェックサムを利用することで、その分割データが正常に受信できたか否かを判定する。そして、ECU100のマイクロコンピュータ110は、初回の分割データが正常に受信できたと判定すれば(Yes)、処理をステップ87へと進める。一方、ECU100のマイクロコンピュータ110は、初回の分割データが正常に受信できていないと判定すれば(No)、処理をステップ94へと進める。
ステップ87では、ECU100のマイクロコンピュータ110が、RAM130の第1のバッファ領域132を、書込み装置300から受信した分割データを書き込むときに使用する書込み用の領域に設定すると共に、RAM130の第2のバッファ領域134を、書込み装置300から受信した分割データをコピーするためのコピー用の領域に設定する。
ステップ88では、ECU100のマイクロコンピュータ110が、2番目の分割データを取得するために、分割データの送信要求メッセージを書込み装置300に送信すると共に、前回の分割データを正常に受信できたことを示す正常受信メッセージを書込み装置300に送信する。
ステップ89では、ECU100のマイクロコンピュータ110が、2つのタイマT1,T2をスタートさせる。タイマT1は、50[ms]のタイムアウト時間が経過する前までに分割データのROM120への書込み処理を完了できそうにない場合に、タイムアウトによりプログラムを再送する処理を延期する要求を示す延期要求メッセージを書込み装置300に送信するために、タイムアウトになる直前のタイミング(例えば、書込み処理の開始から49[ms]が経過した時など)を計測するものである。また、タイマT2は、タイムアウトによるプログラム再送開始の延期要求が複数回繰り返された場合に、該延期要求を終了するタイミングを計測するものである。この延期要求を終了するタイミングは、最初の延期要求を送信してからの経過時間(所定時間)がタイムアウト時間よりも長い、言い換えると、分割データの書込みを開始してからの経過時間がタイムアウト時間よりも2倍以上長い時間に設定され、ここでは例えば5000[ms]とする。
ステップ90では、ECU100のマイクロコンピュータ110が、書込み用の領域に格納されているn番目の分割データのデータ本体を、分割データのヘッダに格納されている書込みアドレスに応じて、ROM120に書き込む。
ステップ91(図13)では、ECU100のマイクロコンピュータ110が、例えば、書込み用の領域に格納されている分割データとROM120に書き込んだ分割データとを比較することで、n番目の分割データがROM120に正常に書き込まれたか否かを判定する。そして、ECU100のマイクロコンピュータ110は、分割データが正常に書き込まれたと判定すれば(Yes)、処理をステップ92へと進める。一方、ECU100のマイクロコンピュータ110は、分割データが正常に書き込まれなかったと判定すれば(No)、処理をステップ95へと進める。
ステップ92では、ECU100のマイクロコンピュータ110が、書込み装置300から受信した分割データがコピー用の領域にコピーされたことを示すコピー完了メッセージが、書込みサブプログラムから通知されたか否かを判定する。そして、ECU100のマイクロコンピュータ110は、コピー完了メッセージが通知されていると判定すれば(Yes)、処理をステップ93へと進める。一方、ECU100のマイクロコンピュータ110は、コピー完了メッセージが通知されていないと判定すれば(No)、コピー完了メッセージが通知されるまで待機する。
ステップ93では、ECU100のマイクロコンピュータ110が、コピー用の領域に格納されたデータはアプリケーションプログラムの転送完了メッセージであるか否かを判定する。そして、ECU100のマイクロコンピュータ110は、転送完了メッセージであると判定すれば(Yes)、処理を終了する。一方、ECU100のマイクロコンピュータ110は、転送完了メッセージでないと判定すれば(No)、処理をステップ102へと進める。
ステップ94(図12)では、初回の分割データを正常に受信できなかったため、ECU100のマイクロコンピュータ110が、初回の分割データを再度取得するために、分割データの再送要求メッセージを書込み装置300に送信する。なお、ECU100のマイクロコンピュータ110は、分割データの再送要求メッセージと共に、分割データを正常に受信できなかったことを示すメッセージを書込み装置300に送信するようにしてもよい。その後、ECU100のマイクロコンピュータ110は、処理をステップ85へと戻す。
ステップ95(図13)では、n番目の分割データがROM120に正常に書き込まれなかったため、ECU100のマイクロコンピュータ110は、タイマT1の経過時間がタイムアウトになる直前のタイミング(ここでは49[ms])に達したか否かを判定する。そして、ECU100のマイクロコンピュータ110は、タイムアウト直前のタイミングに達したと判定すれば(Yes)、処理をステップ96へと進める。一方、ECU100のマイクロコンピュータ110は、タイムアウト直前のタイミングに達していないと判定すれば(No)、処理をステップ91へと戻す。
ステップ96では、タイムアウト直前のタイミングになったため、ECU100のマイクロコンピュータ110は、タイマT2の経過時間がタイムアウトによるプログラム再送の延期要求を終了するタイミング(5000[ms])に達したか否かを判定する。そして、ECU100のマイクロコンピュータ110は、延期要求を終了するタイミングに達したと判定すれば(Yes)、処理をステップ97へと進める。一方、ECU100のマイクロコンピュータ110は、延期要求を終了するタイミングに達していないと判定すれば(No)、処理をステップ100へと進める。
ステップ97では、延期要求を複数回繰り返したにもかかわらず、n番目の分割データがROM120に正常に書き込まれず失敗となり、該延期要求を終了するタイミングに達したため、ECU100のマイクロコンピュータ110が、分割データを正常に書き込むことができなかったことを示す書込み異常メッセージを書込み装置300に送信する。
ステップ98では、ECU100のマイクロコンピュータ110が、分割データを書き込もうとしたROM120の領域を消去すると共に、タイマT1およびタイマT2をそれぞれリセットする。
ステップ99では、ECU100のマイクロコンピュータ110が、RAM130の第1のバッファ領域132を、書込み装置300から受信した分割データをコピーするためのコピー用の領域に設定する。その後、ECU100のマイクロコンピュータ110は、アプリケーションプログラムの書込みを最初から実行すべく、処理をステップ83へと戻す。
ステップ100では、タイムアウト直前のタイミングになり、かつ、延期要求を終了するタイミングにはまだ達していないため、ECU100のマイクロコンピュータ110が、タイムアウトによるプログラム再送を延期する要求を示す延期要求メッセージを書込み装置300に送信する。
ステップ101では、ECU100のマイクロコンピュータ110が、タイマT1をリスタートさせた後に、処理をステップ91へと戻す。
ステップ102(図14)では、アプリケーションプログラムの転送が完了していないので、ECU100のマイクロコンピュータ110が、例えば、チェックサムを利用して、コピー用の領域にコピーされたn+1番目の分割データが正常に受信できたか否かを判定する。そして、ECU100のマイクロコンピュータ110は、分割データが正常に受信できたと判定すれば(Yes)、処理をステップ103へと進める。一方、分割データが正常に受信できなかったと判定すれば(No)、処理をステップ106へと進める。なお、n+1番目の分割データが正常に受信できたか否かは、その分割データを受信した直後に判定してもよい。
ステップ103では、ECU100のマイクロコンピュータ110が、コピー用に設定されていたバッファ領域を書込み用の領域に設定すると共に、書込み用に設定されていたバッファ領域をコピー用の領域に設定する。
ステップ104では、ECU100のマイクロコンピュータ110が、n+2番目の分割データを取得するために、分割データの送信要求メッセージを書込み装置300に送信する。また、ECU100のマイクロコンピュータ110は、分割データの送信要求メッセージと共に、n番目の分割データをROM120に書き込んだ旨の書込み完了メッセージ、及び、n+1番目の分割データを受信した旨のメッセージを書込み装置300に送信する。
ステップ105では、ECU100のマイクロコンピュータ110が、カウンタ変数nに1を加算、要するに、カウンタ変数nをインクリメントする。その後、ECU100のマイクロコンピュータ110は、処理をステップ89へと戻す。
ステップ106では、n+1番目の分割データを正常に受信できなかったため、ECU100のマイクロコンピュータ110が、n+1番目の分割データを再度取得するために、n+1番目の分割データの再送要求メッセージを書込み装置300に送信する。その後、ECU100のマイクロコンピュータ110は、処理をステップ92へと戻す。なお、ECU100のマイクロコンピュータ110は、分割データの再送要求メッセージと共に、n+1番目の分割データを正常に受信できなかったことを示すメッセージを書込み装置300に送信するようにしてもよい。
図15は、ECU100が書込み装置300から分割データを受信したことを契機として、書込みサブプログラムに従って、ECU100のマイクロコンピュータ110が実行するデータコピー処理の一例を示す。
ステップ110では、ECU100のマイクロコンピュータ110が、書込み装置300から受信した分割データを、通信回路140における通信バッファ部150の受信バッファRXからコピー用の領域にコピーする。
ステップ111では、ECU100のマイクロコンピュータ110が、分割データのコピー完了メッセージを書込みプログラムに通知する。なお、ECU100のマイクロコンピュータ110は、コピー用の領域を、通信バッファ部150の受信バッファRXに相当する領域に設定し、このコピー用の領域を使用して分割データを受信するようにしてもよい。このようにすれば、通信バッファ部150の受信バッファRXからコピー用の領域に分割データをコピーする処理が不要となる。
また、分割データの送信要求からコピー完了までの処理時間と、分割データをROM120に書き込んで検証するまでの処理時間とで差がある場合、時間の長い方の処理が完了したときに、次の分割データの受信処理と、分割データをROM120に書き込む処理とを開始するようにしてもよい。
このように、書込み装置300から受信した分割データをECU100の受信バッファRXにコピーし、ROM120に書込みを行うためのバッファ領域を2つ用意する。そして、2つのバッファ領域のうち、一方のバッファ領域を、ROM120に対する書き込む処理に使用している間、他方のバッファ領域を、ECU100が受信した分割データをコピーする処理に使用する。これにより、ECU100において、一方のバッファ領域を使用してROM120に分割データを書き込む処理と、分割データの受信及び分割データを他方のバッファ領域にコピーする処理とを並列に行うことができる。このため、プログラム書込み処理に要する時間を短縮することができる。
また、これらの処理を実現するためには、ECU100で実行する処理を変更すればよいため、書込み装置300を大幅に変更せずに、プログラム書込み処理に要する時間を短縮することができる。
図16~図18は、上記のようなECU100と書込み装置300との間における分割データのROM120への書込み処理のシーケンスを、分割データのサイズ増大に伴うタイムアウトを回避する方策を中心にまとめたものである。
図16に示す書込み処理のシーケンスは、50[ms]のタイムアウト時間内に、2048バイトの分割データをROM120へ正常に書き込むことができた場合の一例である。この場合、ECU100は、書込み装置300から転送された書込みプログラムを展開及び起動した後、分割データの送信要求メッセージを書込み装置300に送信する。書込み装置300は、ECU100からの送信要求メッセージを受けて、アプリケーションプログラムを2048バイトに分割した分割データを作成し、該作成した分割データを送信バッファTXのサイズ(64バイト)に合わせて32個の小データに分けてECU100に送信する。
ECU100は、書込み装置300からの分割データを正常に受信することができると、正常受信メッセージを書込み装置300に送信すると共に、タイマT1およびタイマT2をスタートさせて、該分割データのROM120への書込みを開始する。そして、タイムアウト時間が経過する前までに分割データのROM120への書込みが成功すると、ECU100は、書込み完了メッセージと共に次の分割データの送信要求メッセージを書込み装置300に送信し、タイマT1およびタイマT2をリセットする。書込み装置300は、ECU100からの送信要求メッセージを受けて、次の分割メッセージをECU100に送信する。
図17に示す書込み処理のシーケンスは、2048バイトの分割データのROM120への書込みが初回のタイムアウト時間が経過する前までに正常に完了できず、タイムアウトによるプログラム再送の延期要求後に、分割データをROM120へ正常に書き込むことができた場合の一例である。この場合、ECU100は、上記図16のときと同様にして、分割データの送信要求メッセージを書込み装置300に送信し、書込み装置300から転送される2048バイトの分割データを正常に受信すると、正常受信メッセージを書込み装置300に送信すると共に、タイマT1およびタイマT2をスタートさせて、該分割データのROM120への書込みを開始する。
そして、ECU100は、タイマT1の経過時間がタイムアウトになる直前のタイミングの49[ms]に達した段階で、分割データをROM120へ正常に書き込むことができていないことを判断して、タイムアウトによるプログラム再送の延期要求を示す延期要求メッセージを書込み装置300に送信する。書込み装置300は、ECU100からの延期要求を受けて、タイムアウト時間を計測するためのタイマT0をリスタートして待機する。ECU100は、延期要求メッセージの送信後、タイマT1をリスタートすると共に、分割データのROM120への書込み処理をリトライする。そして、2回目のタイムアウト時間になる前に分割データのROM120への書込みが成功すると、ECU100は、書込み完了メッセージと共に次の分割データの送信要求メッセージを書込み装置300に送信し、タイマT1およびタイマT2をリセットする。書込み装置300は、ECU100からの送信要求メッセージを受けて、次の分割メッセージをECU100に送信する。
図18に示す書込み処理のシーケンスは、延期要求を複数回繰り返しても分割データをROM120へ正常に書き込むことができない場合の一例である。この場合、ECU100は、上記図17のときと同様にして、初回のタイムアウトになる直前に延期要求メッセージを書込み装置300に送信し、タイマT1をリスタートして、分割データのROM120への書込み処理をリトライする。そして、ECU100は、タイマT1の経過時間がタイムアウトになる直前のタイミングに再度達した段階で、分割データをROM120へ正常に書き込むことができていないことを判定して、2度目の延期要求メッセージを書込み装置300に送信する。書込み装置300は、ECU100からの2度目の延期要求を受けてタイマT0を再度リスタートして待機する。
以後、分割データのROM120への書込みが成功するか、又はタイマT2の経過時間が延期要求を終了するタイミングの5000[ms]に達するまで、上記のような延期要求が繰り返される。ここでは、タイマT2の経過時間が5000[ms]に達しても分割データがROM120へ正常に書き込まれなかったため、ECU100は、書込み異常メッセージを書込み装置300に送信すると共に、タイマT1およびタイマT2をそれぞれリセットする。書込み装置300は、ECU100からの書込み異常メッセージを受けて、アプリケーションプログラムの再送設定を行う。
以上説明したように本実施形態によれば、タイムアウト時間に応じて分割データのサイズを設定したことでECU100と書込み装置300との間での通信回数が減ってデータの転送速度が向上すると共に、タイムアウト時間が経過する前までに分割データの書込み処理が正常に完了しない場合にECU100が書込み装置300にプログラム再送の延期要求を送信することで、分割データのサイズが増大してもタイムアウトによるプログラム再送が発生し難くなる。このため、分割データの転送時間を短縮して不揮発性メモリへの大容量プログラムの書込み処理を高速に実行することができる。これにより、例えば、数千台の車両に搭載されるECU100のそれぞれに大容量のプログラムを書き込む場合であっても、1台当たりの書込み時間が短縮されるので全体の書込み時間を大幅に短くすることができ、車両量産時のコスト削減に有効である。