"通信によって任意のプログラムを取得可能な自動車用電子制御装置であって、取得した前記プログラムを揮発性メモリに展開し、展開した前記プログラムを実行することを特徴とする自動車用電子制御装置。前記プログラムの実行によって、他の装置と通信するための通信環境を変更することを特徴とする請求項1に記載の自動車用電子制御装置。前記プログラムの転送元の装置以外の装置と通信できないときに、通信環境の変更が可能であることを特徴とする請求項2に記載の自動車用電子制御装置。制御プログラムに不具合があった場合、不具合を修正するため、制御プログラムのアップデートが実行される。アップデートでは、電子制御装置に対し、外部の装置から不具合を修正した制御プログラムが転送され、修正した制御プログラムを不揮発性メモリに書込む。このような書込み処理のために、不揮発性メモリには、制御プログラム等のデータを不揮発性メモリに書込むためのプログラムが予め格納されている。しかしながら、例えば、不揮発性メモリにデータを書込むプログラムは、制御プログラムのアップデートの場合等において一時的に使用されるため、常に不揮発性メモリに格納しておく必要はなかった。このため、そのプログラムのサイズ分だけ不揮発性メモリが無駄に使用されていた。そこで、本技術はこのような問題点に鑑み、電子制御装置において、不揮発性メモリの使用量を削減することを可能にする技術を提供することを目的とする。本技術の一実施形態の自動車用電子制御装置は、通信によって任意のプログラムを取得する。また、自動車用電子制御装置は、取得したプログラムを揮発性メモリに展開し、展開したプログラムを実行する。本技術によれば、電子制御装置において、不揮発性メモリの使用量を削減することが可能となる。以下、添付された図面を参照して本発明を実施するための実施形態について技術を詳細に説明する。ECU100に搭載されたROM例えば,フラッシュROMに対し、アプリケーションプログラム例えばエンジン制御プログラムを書込むためのECU製造工程10及びアプリケーションプログラム書込み工程20を図1に示す。ECU製造工程10では、ECU100に搭載されたROMに、ハードウェアの検査プログラムが実行でき、後の工程でアプリケーションプログラムの書込みが可能となるような必要最低限のプログラム以下、最低限プログラムと略記するを書込み、検査する。なお、ECU製造工程10は、例えば、ECUサプライヤ等によって行われる作業の一部である。アプリケーションプログラム書込み工程20では、ECU100上のROMに対し、書込みツール200を使用することにより、車種に応じたアプリケーションプログラムを書込む。これにより、ECU製造工程10から供給されるECU100は、各車種用ECU100となる。なお、後の検査工程において、自動車に組付けられたECU100のROMに、その自動車に応じたアプリケーションプログラムが書き込まれているか否か検査する。また、アプリケーションプログラム書込み工程20は、例えば、自動車工場等のECU組付け工程に関連して行われる作業である。このように、ECU100は、アプリケーションプログラム書込み工程20のROM書込みの前までは各車種共通のものであるため、例えば、ECUサプライヤ等は、各車種共通のECUを製造し、自動車工場等に納品すればよい。従って、ECUサプライヤ等では、各車種ごとのECU100のプログラミング、製造及び納品管理等が不要となる。また、自動車工場等では、アプリケーションプログラム書込み工程20のROM書込みの前まで、各車種ごとのECU100の保持及び管理在庫状況などが不要となる。よって、これらの工程により、ECUサプライヤ及び自動車工場等では、製造及び管理等を大幅に削減できるメリットがある。しかしながら、自動車工場等において、従来では存在しなかったアプリケーションプログラム書込み工程20が新たなに追加される。このアプリケーションプログラム書込み工程20において、車種に応じたアプリケーションプログラムを迅速にROMに書込むことが要求される。この要求に応じるECU100及び書込みツール200の構成を図2に示す。ECU100は、車両用エンジンにおける燃料噴射や点火等を制御するためのものであり、ROM110、マイクロコンピュータ120、及び、揮発性メモリであるRAMRandomAccessMemory130、通信回路140を含んで構成される。ECU100は、CANControllerAreaNetworkなどの通信回線300によって、書込みツール200に対し着脱可能に接続される。マイクロコンピュータ120は、CPU、及び、キャッシュメモリ等を備え、ROM110及びRAM130に格納された各種プログラムを実行する。RAM130には、第1のバッファ領域133及び第2のバッファ領域134が存在する。第1のバッファ領域133及び第2のバッファ領域134は、ROM110にデータを書込むときに使用される。通信回路140には、通信バッファ領域141が存在する。通信バッファ領域141は、ECU100が通信回路140によって他の装置と通信するときに使用される。書込みツール200は、ストレージ210例えばハードディスク及び通信回路240を含んで構成される。また、書込みツール200は、端末例えば、パーソナルコンピュータ及びECU100と接続する装置を含み、書込みツール200を操作する作業者が、書込みツール200に対し対話的に指示を出すことができる。書込みツール200はストレージ210に格納されている書込みデータを、ECU100に対して転送する。ストレージ210には、ECU100に転送されるアプリケーションプログラム等が格納されている。通信回路240には、通信バッファ領域241が存在する。通信バッファ領域241は、書込みツール200が通信回路240によってECU100と通信するときに使用される。ここで、ECU100が、書込みツール200と通信するときに使用する通信バッファ領域141の詳細を図3に示す。ECU100の通信バッファ領域141には、一定のサイズの通信バッファ例えば、CANにおけるメールボックスが複数存在する。ECU100は、各装置と通信するとき、通信バッファ領域141の通信バッファのうち、通信相手となる装置との通信用として予め割当てられている通信バッファを使用する。なお、それぞれの通信バッファは、データの送信に使用される送信バッファTX、データの受信に使用される受信バッファRXに分かれている。また、通信相手となる装置との通信用として予め割当てられている通信バッファの数を、車載状態の通信環境で使用する数とする。一方、書込みツール200の通信バッファ領域241には、一定のサイズの通信バッファが複数存在する。なお、通信バッファ領域241の通信バッファのサイズは、ECU100の通信バッファ領域141の通信バッファのサイズと同じである。図3において、ECU100の通信バッファ領域141には、ECU100が書込みツール200と通信するために使用する通信バッファ以下、書込みツール用通信バッファと略記するとして、2個の通信バッファTX1個、RX1個が、割り当てられている。また、通信バッファ領域141のその他の通信バッファは、書込みツール200以外の装置との通信用に割当てられている。従って、通信バッファのサイズが8バイトであり、かつ、ECU100が、1つのデータの受信ごとに書込みツール200にその応答を返すように、ECU100と書込みツール200との間で同期を取りながら通信を行う場合、1つのデータの受信に1個のRXを使用するため、ECU100が64バイトのデータを取得するまでに、16回の通信が必要になる。即ち、書込みツール200が64バイトのデータを8バイトごとに分けて転送し、ECU100は8バイト受信するごとに書込みツール200に応答を返すため、通信回数が16回となる。アプリケーションプログラム書込み工程20における手順を図4に示す。ステップ1図ではS1と略記する。以下同様では、作業者が、書込みツール200に、ECU100を接続する。ECU100は、接続されると電源が投入され、マイクロコンピュータ120が最低限プログラムを実行することによって、書込みツール200と通信可能になり、書込みツール200から転送されるデータの受信待ち状態となる。ステップ2では、作業者が、ROM110に書込むためのアプリケーションプログラム例えば車種A用のエンジン制御プログラム等を指定する。書込みツール200は、アプリケーションプログラムが指定されると、指定されたアプリケーションプログラムをECU100に転送する。ECU100は、転送されたアプリケーションプログラム等を受信しながら、アプリケーションプログラムをROM110に書き込む。以下、このステップ2の処理を、プログラム書込み全体処理と呼ぶ。ステップ3では、作業者が、書込みツール200からECU100を取外す。なお、この後、ECU100は、各自動車に組付けられる。また、検査工程において、ECU100のROM110に正しいアプリケーションプログラムが書き込まれた否か例えば、組付けられた自動車に応じたアプリケーションプログラムか否かチェックされる。正しいアプリケーションプログラムが書き込まれていなければ、自動車に組付けられたECU100に対し、書込みツール200を接続し、正しいアプリケーションプログラムを書込む。図5に、プログラム書込み全体処理の概要を示す。ステップ11では、書込みツール200は、作業者によって書込みプログラム及びROM110に書込むためのアプリケーションプログラムが指定されると、書込みプログラム及びアプリケーションプログラムを転送するデータ転送プログラムを起動する。そして、書込みツール200は、データ転送プログラムによって、ECU100に対し、書込みプログラム例えば書込みプログラム2の転送を開始するメッセージを送信すると共に、指定された書込みプログラムを転送する。ここで、作業者が指定する書込みプログラムは、ストレージ210に存在する書込みプログラムデータベース211に格納されている。書込みプログラムは、ECU100に転送され、通信環境の変更などの初期化処理、書込みデータの受信処理、及び、書込みデータをROM110に書込む処理をECU100上で実行する。また、書込みプログラムは、書込みメインプログラム及び書込みサブプログラムから構成される。書込みメインプログラムは、ECU100に転送された後にECU100上で動作し、書込みツール200とECU100との間で、書込みプログラムに応じた通信環境通信バッファの使用方法、通信速度、暗号化方式等を確立する。また、書込みメインプログラムは、書込みツール200から転送されるアプリケーションプログラムを、書込みプログラムに応じた書込み条件書込むROMの領域のアドレス等によってROM110に書込む。書込みサブプログラムは、書込みメインプログラムから起動され、通信バッファ領域141にある受信データを、第1のバッファ領域及び第2のバッファ領域にコピーする。さらに、作業者が指定するアプリケーションプログラムは、ストレージ210に存在するアプリケーションプログラムデータベース212に格納されている。各アプリケーションプログラムは、それぞれの車種に応じたエンジン制御用プログラム等である。ステップ12では、ECU100が、書込みプログラムの転送元である書込みツール200から、書込みプログラムの転送を開始するメッセージを受信すると、ROM110に格納されているRAM展開プログラムを起動する。ここで、RAM展開プログラムは、ECU100が受信した書込みプログラムをRAM130上に展開する処理を行う。従って、ECU100は、書込みプログラムを受信しながら、RAM展開プログラムによって、受信した書込みプログラムをRAM130に展開する。ステップ13で、ECU100は、書込みプログラムの展開が完了すると、RAM展開プログラムによって、RAM130に展開した書込みプログラムを起動する。ステップ14で、ECU100は、書込みプログラムによって、ECU100と書込みツール200との間の通信環境を、その書込みプログラムに応じた通信環境に変更し、書込みツール200に対し、アプリケーションプログラムの送信を要求するメッセージを送信する。ステップ15で、書込みツール200が、アプリケーションプログラムの送信を要求するメッセージを受信すると、データ転送プログラムによって、ECU100に対し、作業者によって指定されたアプリケーションプログラム例えば、アプリケーションプログラム1の転送を開始する。ステップ16で、ECU100は、書込みツール200からアプリケーションプログラムを受信しながら、書込みメインプログラム及び書込みサブプログラムによって、書込み条件に基づき、受信したアプリケーションプログラムを、ROM110に書き込む。なお、書込み終了後、ECU100は書込みツール200から取外され、電源がOFFになる。次にECU100の電源が投入されたとき、ECU100の通信環境は、初期状態ステップ1のときと同様の通信環境に戻る。また、プログラム書込み全体処理の途中で、何からの異常例えば、書込みプログラム動作時、書込みツール200との通信が切断された等が発生した場合は、ECU100が自らをリセットする。そして、ECU100の通信環境は、初期状態に戻る。従って、書込みプログラムを選択することで、プログラム書込み全体処理において、使用する通信環境及びアプリケーションプログラムの書込み条件等に応じて、より適した書込みプログラムを動作させることができる。このため、例えば、通信速度がより高速な書込みプログラムを動作させることで高速に通信を行い、プログラム書込み全体処理を高速化することができる。また、プログラム書込み全体処理のときに、書込みプログラムがECU100に転送されるため、書込みプログラムをROM110に格納する必要がなくなり、ROM110の使用量を削減することができる。さらに、書込みプログラムを変更することにより、プログラム書込み全体処理に新しい機能を追加することができる。なお、ECU100に書込みツール200に加えて他の装置が接続された状況でも、ECU100は、プログラム書込み全体処理の間、他の装置との通信を遮断し、書込みツール200のみと通信するようにすれば、プログラム書込み全体処理を実行することができる。ECU100に書込みツール200に加えて他の装置が接続された状況で、プログラム書込み全体処理を行う例として、ECU100が自動車に組付けられた状態で、アプリケーションプログラムの書込みを実施することが挙げられる。この場合、通信路の競合を防ぐため、ECU100は、書込みツール200と通信するときに使用する通信環境は、他の装置と共通する通信環境例えば、通信速度が共通である必要がある。このため、作業者は、書込みプログラムを、他の装置と共通の通信環境を確立するものを指定し、プログラム書込み全体処理を実施する。このとき、ECU100は、書込みツール200のみと通信し、他の装置との通信を遮断する。次に、ECU100が、書込みツール200から転送されるアプリケーションプログラムを受信するときに使用する、通信バッファ領域141の使用方法を説明する。アプリケーションプログラム書込み工程20のような状況において、ECU100は、書込みツール200以外の装置と通信しないため、書込みツール200以外の装置と通信するために予め割当てられた通信バッファ以下、他の装置用通信バッファと略記するは、使用されない。このため、書込みプログラムは、書込みツール用通信バッファに加えて他の装置用通信バッファを、ECU100と書込みツール200との間の通信に使用するように変更することができる。変更後の通信バッファ領域141の詳細を示したのが図6である。図6の例では、ECU100は、書込みツール200と通信するとき、書込みツール用通信バッファとして2個の通信バッファ、及び、他の装置用通信バッファのうちの7個の通信バッファを使用する。このとき、ECU100が使用する9個の通信バッファは、TXとして1個、RXとして8個を設定する。なお、このとき、書込みツール200の通信バッファ領域241の通信バッファは、TXが8個、RXが1個となる。例えば、1つの通信バッファのサイズが8バイトであり、かつ、ECU100が、1つのデータの受信ごとに書込みツール200にその応答を返すように、ECU100と書込みツール200との間で同期を取りながら通信を行う場合、1つのデータの受信に8個のRXが使用できるため、ECU100が64バイトのデータを書込みツール200から取得するまで、従来と比較して、9回の通信ですむことになる。即ち、書込みツール200が64バイトのデータを1つのデータとして8バイトごとに分けて転送し、ECU100は8バイトのデータを8個受信するごとに書込みツール200に応答を返す。このため、通信回数が9回となる。なお、書込みプログラムは、ECU100が書込みツール200との通信に使用する通信バッファの数を、データの送受信のサイズ、データの送受信のサイズの整数倍、ROM110への1回の書込みのサイズ又はROM110への1回の書込みのサイズの整数倍等に応じた数にしてもよい。このように、書込みツール用通信バッファに加えて他の装置用通信バッファも使用して通信することができるため、同期をとるような通信では、通信回数が少なくなり、データの転送に要する時間が減少し、データの転送の高速化が図れる。また、他の装置用通信バッファを使用するため、通信バッファのオーバライトを気にすることなく、書込みツール200が連続してデータを転送することができる。なお、通信バッファ領域141のうち、どの装置にも割当てられていない未使用の通信バッファがあれば、書込みプログラムが、未使用の通信バッファを、ECU100と書込みツール200との間の通信で使用するように変更することもできる。次に、プログラム書込み全体処理において動作する各プログラムを説明する。図7及び図8は、書込みツール200において、書込みプログラム及びアプリケーションプログラムが作業者によって指定されたことを契機として、データ転送プログラムが、書込みツール200によって実行する処理のフローチャートを示す。ステップ31では、データ転送プログラムが、書込みプログラムの転送を開始することを示すメッセージ書込みプログラムの転送開始メッセージをECU100に送信する。ステップ32では、データ転送プログラムが、指定された書込みプログラムのデータを、ECU100が1回の通信で受信可能なサイズだけ順次転送する。ステップ33では、データ転送プログラムが、ECU100から次のデータの要求メッセージを受信したか否かを判定する。データ転送プログラムは、ECU100から次のデータの要求メッセージを受信していれば、処理をステップ34に進めるYes一方、ECU100から次のデータの要求メッセージを受信していなければ、処理をステップ33に戻すNo。ステップ34では、データ転送プログラムが、指定された書込みプログラムの転送を完了したか否かを判定する。データ転送プログラムは、指定された書込みプログラムの転送を完了していれば、処理をステップ35に進めるYes一方、指定された書込みプログラムの転送を完了していなければ、処理をステップ32に戻すNo。ステップ35では、データ転送プログラムが、書込みプログラムの転送が完了したことを示すメッセージ書込みプログラムの転送完了メッセージをECU100に送信する。ステップ36では、データ転送プログラムが、ECU100からメッセージを受信したか否かを判定する。データ転送プログラムは、ECU100からメッセージを受信していれば、処理をステップ37に進めるYes一方、ECU100からメッセージを受信していなければ、処理をステップ36に戻すNo。ステップ37では、データ転送プログラムは、ECU100から受信したメッセージが、書込みプログラムが正当に転送された旨のメッセージかを否かを判定する。データ転送プログラムは、受信したメッセージが、書込みプログラムが正当に転送された旨のメッセージであれば、処理をステップ38に進めるYes一方、受信したメッセージが、書込みプログラムが正当に転送された旨のメッセージでなければ、処理をステップ39に進めるNo。ステップ38では、データ転送プログラムが、アプリケーション転送処理サブルーチンを実行する。なお、アプリケーション転送処理サブルーチンは、指定されたアプリケーションプログラムのデータを、分割して転送する処理を行う。以下では、この分割して転送するデータを分割データと呼ぶ。ステップ39では、データ転送プログラムが、書込みプログラムを再度先頭から転送するような設定例えば、書込みプログラムのインデックスを先頭に戻すなどを行う。図9~図10は、アプリケーション転送処理サブルーチンの処理のフローチャートを示す。ステップ41では、データ転送プログラムは、書込みツール200がECU100よりメッセージを受信したか否かを判定する。データ転送プログラムは、ECU100よりメッセージを受信していれば、処理をステップ42に進めるYes一方、ECU100よりメッセージを受信していなければ、処理をステップ41に戻すNo。ステップ42では、データ転送プログラムは、受信したメッセージが分割データの送信要求を示すメッセージ分割データの送信要求メッセージか否か判定する。データ転送プログラムは、受信したメッセージが分割データの送信要求メッセージなければ、処理をステップ43に進めるYes一方、受信したメッセージが分割データの送信要求メッセージであれば、処理をステップ44に進めるNo。ステップ43では、データ転送プログラムは、受信したメッセージが分割データの再送要求を示すメッセージ分割データの再送要求メッセージか否か判定する。データ転送プログラムは、受信したメッセージが分割データの再送要求メッセージでなければ、処理をステップ47に進めるYes一方、受信したメッセージが分割データの再送要求メッセージであれば、処理をステップ46に進めるNo。ステップ44では、データ転送プログラムが、指定されたアプリケーションプログラムのインデックスを表わす読出しポインタが指す位置からデータを読出し、その読出したデータにチェックサムを付加することで分割データを作成する。ここで、データの読出しサイズは、転送した書込みプログラムがECU100において確立する通信環境で使用する各RXのサイズの総計から、チェックサムのサイズを減算した値にする。また、読出しポインタの初期値は、アプリケーションプログラムの先頭のアドレスである。読出しポインタは、ステップ44が実行されるごとに、データの読出しサイズだけ加算される。例えば、転送した書込みプログラムが確立する通信環境で使用する各RXのサイズの総計が64バイト、及び、チェックサムのサイズが2バイトである場合、データの読出しサイズは62バイト、分割データのサイズは64バイトとなる。なお、データ検証用として、チェックサムの他にはCRCCyclicRedundancyCheckがある。また、分割データに対し、書込みツール200側で、何番目に転送した分割データであるかを示すシーケンス番号を分割データに含め、ECU100側で、受信した分割データのシーケンス番号をチェックすることで、正しい順序で分割データが受信できたかどうかチェックするようにしてもよい。ステップ45では、データ転送プログラムが、作成した分割データをECU100に転送する。このとき、データ転送プログラムは、分割データを転送するため、分割データを通信バッファ領域241のTXのサイズごとに分け、通信バッファ領域241の各TXに格納する。例えば、分割データが64バイト、及び、1個あたり8バイトのTXが通信バッファ領域241に8個ある場合、データ転送プログラムは、分割データを、8バイトごとに8個のデータに分けて各TXに格納する。なお、TXに格納されたデータは、通信回路240によって、ECU100に転送される。ステップ46では、データ転送プログラムが、作成した分割データを再度、ECU100に転送する。ステップ47では、データ転送プログラムは、受信したメッセージが、分割データがECU100のROM110に正常に書込まれなかったことを示すメッセージ分割データの書込みNGメッセージか否かを判定する。データ転送プログラムは、受信したメッセージが分割データ書込みNGメッセージでなければ、処理をステップ48に進めるYes一方、受信したメッセージが分割データの書込みNGメッセージであれば、処理をステップ50に進めるNo。ステップ48では、データ転送プログラムが、読出しポインタがアプリケーションプログラムの最後まで到達したか否かを介し、アプリケーションプログラムの転送を最後まで完了したか否かを判定する。データ転送プログラムは、アプリケーションプログラムの転送を最後まで完了していれば、処理をステップ49に進めるYes一方、アプリケーションプログラムの転送を最後まで完了していなければ、処理をステップ41に進めるNo。ステップ49では、データ転送プログラムが、アプリケーションプログラムの転送が完了したことを示すメッセージアプリケーションの転送完了メッセージをECU100に送信する。ステップ50では、データ転送プログラムが、アプリケーションプログラムを再度先頭から転送するために、読出しポインタの値をアプリケーションプログラムの先頭アドレスに設定する。図11は、ECU100が書込みプログラムの転送開始メッセージを受信したことを契機として、RAM展開プログラムがECU100によって実行する処理のフローチャートを示す。ステップ51では、RAM展開プログラムは、ECU100が書込みツール200からデータを受信したか否かを判定する。RAM展開プログラムは、書込みツール200からデータを受信していれば、処理をステップ52に進めるYes一方、書込みツール200からデータを受信していなければ、処理をステップ51に戻すNo。ステップ52では、RAM展開プログラムは、受信したデータが、書込みプログラムの転送完了メッセージであるか否かを判定する。RAM展開プログラムは、受信したデータが書込みプログラムの転送完了メッセージであれば、処理をステップ53に進めるYes一方、受信したデータが書込みプログラムの転送完了メッセージでなければ、処理をステップ56に進めるNo。ステップ53では、RAM展開プログラムが、チェックサム等によって、転送された書込みプログラムが正当か否かを判定する。RAM展開プログラムは、転送された書込みプログラムが正当であれば、処理をステップ54に進めるYes一方、転送された書込みプログラムが正当でなければ、処理をステップ58に進めるNo。ステップ54では、RAM展開プログラムが、書込みツール200に対し、書込みプログラムが正当に転送された旨のメッセージを送信する。ステップ55では、RAM展開プログラムが、RAM130に展開した書込みプログラムのなかの書込みメインプログラムを起動する。ステップ56では、RAM展開プログラムが、受信した書込みプログラムのデータを通信バッファ領域141のRXからRAM130に展開する。ステップ57では、RAM展開プログラムが、書込みツール200に対し、次のデータの要求メッセージを送信する。ステップ58では、RAM展開プログラムが、書込みツール200に対し、書込みプログラムが正当に転送されていない旨のメッセージを送信する。図12は、書込みメインプログラムが起動されたことを契機として、書込みメインプログラムが、ECU100によって実行する処理のフローチャートを示す。ステップ61では、書込みメインプログラムは、転送された書込みプログラムに応じて、ECU100が書込みツール200と通信するための通信環境を変更する。なお、ECU100が書込みツール200以外の他の装置と通信可能である場合は、通信環境を変更しないようにしてもよい。ステップ62では、書込みメインプログラムが、ROM書込み処理サブルーチンを実行する。なお、ROM書込み処理サブルーチンは、分割データの転送元である書込みツール200から分割データを受信し、分割データに基づいてアプリケーションプログラムのデータをROM110に書込む処理を行う。図13~図15は、ROM書込み処理サブルーチンを示す。ステップ71では、書込みメインプログラムが、第1のバッファ領域133を、書込みツール200から受信する分割データをコピーするためのコピー用の領域に設定する。ステップ72では、書込みメインプログラムが、書込みサブプログラムを起動する。ステップ73では、書込みメインプログラムが、ROM110に書込むデータアプリケーションプログラムのデータのうち、何番目のデータが処理中であるかを表わすカウンタである変数nに1を代入する。ステップ74では、書込みメインプログラムは、初回の分割データを取得するために、分割データの送信要求メッセージを書込みツール200に送信する。ステップ75では、書込みメインプログラムは、書込みツール200から受信した分割データがコピー用の領域にコピーされたことを示すメッセージ分割データのコピー完了メッセージを書込みサブプログラムより通知されたか否か判定する。書込みメインプログラムは、分割データのコピー完了メッセージが通知されていれば、処理をステップ76に進めるYes一方、分割データのコピー完了メッセージが通知されていなければ、処理をステップ75に戻すNo。ステップ76では、書込みメインプログラムが、コピー用の領域に格納された初回の分割データを参照し、分割データに含まれたチェックサムを利用することによって、初回の分割データが正常に受信できたか否かを判定する。書込みメインプログラムは、初回の分割データが正常に受信できていれば、処理をステップ77に進めるYes一方、初回の分割データが正常に受信できていなければ、処理をステップ78に進めるNo。ステップ77では、書込みメインプログラムが、第1のバッファ領域133を、ROM110に分割データを書込むときに使用する書込み用の領域に設定するとともに、第2のバッファ領域134をコピー用の領域に設定する。ステップ78では、書込みメインプログラムが、初回の分割データを再度取得するために、分割データの再送要求メッセージを書込みツール200に送信する。なお、分割データの再送要求メッセージと共に、分割データを正常に受信できなかったことを示すメッセージ分割データの受信NGメッセージを、書込みツール200に送信するようにしてもよい。ステップ79では、書込みメインプログラムが、2番目の分割データを取得するために分割データの送信要求メッセージを書込みツール200に送信する。なお、分割データの送信要求メッセージと共に、前回の分割データを正常に受信できたことを示すメッセージ分割データの受信OKメッセージを、書込みツール200に送信してもよい。ステップ80では、書込みメインプログラムが、書込み用の領域に格納されているn番目の分割データからチェックサムを取り除き、書込み条件に従って、書込み用の領域に格納されているデータをROM110に書込む。ステップ81では、書込みメインプログラムが、書込みデータのベリファイを実行することによって、n番目のデータがROM110に正常に書込まれたか否か判定する。書込みメインプログラムは、n番目のデータがROM110に正常に書込まれていれば、処理をステップ82に進めるYes一方、n番目のデータがROM110に正常に書込まれていなければ、処理をステップ84に進めるNo。なお、書込みデータのベリファイは、例えば、書込み用の領域の内容と、書き込んだROM110の領域の内容とを比較することで行われる。ステップ82では、書込みメインプログラムが、分割データのコピー完了メッセージが書込みサブプログラムから通知されたか否かを判定する。書込みメインプログラムは、分割データのコピー完了メッセージが通知されていれば、処理をステップ83に進めるYes一方、分割データのコピー完了メッセージが通知されていなければ、処理をステップ82に戻すNo。ステップ83では、書込みメインプログラムは、コピー用の領域に格納されたデータが、アプリケーションの転送完了メッセージであるか否か判定する。書込みメインプログラムは、コピー用の領域に格納されたデータがアプリケーションの転送完了メッセージであれば、処理を終了するYes一方、コピー用の領域に格納されたデータがアプリケーションの転送完了メッセージでなければ、処理をステップ87に進めるNo。ステップ84では、書込みメインプログラムが、分割データの書込みNGメッセージを、書込みツール200に送信する。ステップ85では、書込みメインプログラムが、書込みを行ったROM110の領域のデータを消去する。ステップ86では、書込みメインプログラムが、第1のバッファ領域133を、コピー用の領域に設定する。ステップ87では、書込みメインプログラムが、コピー用の領域にコピーされたn1番目の分割データをチェックサムにより検証することによって、n1番目の分割データが正常に受信できたか否かを判定する。書込みメインプログラムは、n1番目の分割データが正常に受信できていれば、処理をステップ88に進めるYes一方、n1番目の分割データが正常に受信できていなければ、処理をステップ91に進めるNo。なお、n1番目の分割データの検証は、n1番目の分割データを受信した直後に書込みサブプログラムが行ってもよい。ステップ88では、書込みメインプログラムが、コピー用に設定されていたバッファ領域を書込み用の領域にすると共に、書込み用に設定されていたバッファ領域をコピー用の領域にする。ステップ89では、書込みメインプログラムが、n2番目の分割データを取得するために、分割データの送信要求メッセージを書込みツール200に送信する。なお、分割データの送信要求メッセージと共に、n番目の分割データをROM110に書込んだ旨のメッセージ分割データの書込みOKメッセージ及びn1番目の分割データを受信した旨のメッセージ分割データの受信OKメッセージを書込みツール200に送信するようにしてもよい。ステップ90では、書込みメインプログラムが、nに1を加算する。ステップ91では、書込みメインプログラムが、n1番目の分割データを再度取得するために、分割データの再送要求メッセージを書込みツール200に送信する。なお、分割データの再送要求メッセージと共に、n1番目の分割データが正常に受信できなかった旨のメッセージ分割データの受信NGメッセージを、書込みツール200に送信するようにしてもよい。図16は、ECU100が書込みツール200からデータを受信したことを契機として、書込みサブプログラムがECU100によって実行する処理のフローチャートを示す。ステップ101では、書込みサブプログラムが、受信した分割データを、通信バッファ領域141のRXからコピー用の領域にコピーする。ステップ102では、書込みサブプログラムが、分割データのコピー完了メッセージを、書込みメインプログラムに通知する。なお、コピー用の領域を、通信バッファ領域141のRXに相当する領域に設定し、ECU100が、コピー用の領域を使用してデータを受信するようにしてもよい。この場合、通信バッファ領域141のRXからコピー用の領域に分割データをコピーする処理が不要となる。また、分割データの送信要求からコピー完了までの処理時間と、データをROM110に書込み及び検証処理に要する時間とで差がある場合、いずれかの時間の長い方の処理が完了したときに、次の分割データの受信処理と、データをROM110に書込む処理とを開始するようにしてもよい。このように、受信した分割データをECU100のRXにコピーし、ROM110に書込みを行うためのバッファ領域を2つ用意する。そして、2つのバッファ領域のうち、一方のバッファ領域を、ROM110に対する書込み処理に使用している間、他方のバッファ領域を、ECU100が受信した分割データをコピーする処理に使用する。これにより、ECU100において、一方のバッファ領域を使用しROM110にデータを書込む処理と、分割データの受信、及び、受信した分割データを他方のバッファ領域にコピーする処理とを並列に行うことができる。このため、プログラム書込み全体処理に要する時間を削減することができる。また、これらの処理を実現するには、ECU100側の処理を変更すればよいため、書込みツール200を大幅に変更することなく、プログラム書込み全体処理に要する時間を削減することができる。アプリケーションプログラムの転送及び書込み処理の実施例のシーケンスは図17に示すとおりとなる。ここで、書込みツール200が転送するプログラムの大きさは、180バイトである。また、ECU100の各RXのサイズの総計は64バイトである。ECU100は、初回の分割データの送信要求メッセージを、書込みツール200に送信する。書込みツール200は、アプリケーションプログラムのデータのうち、最初の62バイトのデータを読み、2バイトのチェックサムを付加して初回の分割データを作成し、ECU100に転送する。ECU100は、初回の分割データを受信した後、初回の分割データを通信バッファ領域141のRXから第1のバッファ領域133にコピーする。次に、ECU100は、初回の分割データの検証を行い、第2の分割データの送信要求メッセージを書込みツール200に送信する。また、ECU100は、第1のバッファ領域133を使用し、データをROM110に書込む処理、及び、書込みデータの検証を行う。書込みツール200は、第2の分割データの送信要求メッセージを受信すると、次に転送する62バイトのデータを読み、チェックサムを付加して第2の分割データを作成し、ECU100に転送する。ECU100は、第2の分割データを受信した後、第2の分割データを通信バッファ領域141のRXから第2のバッファ領域134にコピーする。次に、ECU100は、第2の分割データの検証を行う。また、ECU100は、第2の分割データの検証及び初回の書込みデータの検証が完了すると、第3の分割データの送信要求メッセージを書込みツール200に送信する。さらに、ECU100は、第2のバッファ領域134を使用し、データをROM110に書込む処理、及び、書込みの検証を行う。書込みツール200が、第3の分割データの送信要求メッセージを受信した後、残りの56バイトのデータを読み、チェックサムを付加して第3の分割データを作成し、ECU100に転送する。ECU100が、第3の分割データを受信した後の処理は、第2データを受信した後の処理と同様である。書込みツール200は、第4の分割データの送信要求メッセージを受信すると、アプリケーションの転送完了メッセージをECU100に送信する。なお、本実施形態はECU100を例にしたものであるが、ECU100に代えて、不揮発性メモリを搭載した他の電子制御装置にも適用できる。また、1つの書込みツール200に複数のECU100を接続し、1つの書込みツール200が、各ECU100に対し、ROM110に書き込むためのデータを時分割に転送するようにしてもよい。ここで、前記実施形態から把握し得る請求項以外の技術的思想について、以下に効果と共に記載する。イ前記プログラムによって、データを送受信することを特徴とする請求項1~請求項3のいずれか1つに記載の自動車用電子制御装置。受信したプログラムによって、データを送受信することで、不揮発性メモリに格納しているプログラムに依拠することなく、データを取得することができる。これにより、データを取得する処理を変更することができる。ロ前記プログラムによって、電気的にデータの消去及び書込みが可能な不揮発性メモリにデータを書込むことを特徴とする請求項1~請求項3、又は、イのいずれか1つに記載の自動車用電子制御装置。不揮発性メモリに格納しているプログラムに依拠することなく、受信したプログラムによってデータを不揮発性メモリに書込むことができる。これにより、データを不揮発性メモリに書込む処理を変更することができる。"