(57)【特許請求の範囲】
【請求項１】
複数のＣＰＵ（１１，１２）を有し、所定の制御対象を制御するための制御処理を実行するように構成された電子制御装置（１）であって、
複数の前記ＣＰＵが共有してデータを記憶することが可能な共有メモリ（１４）と、
記憶内容の書き換えが可能であり、前記制御処理を実行するための制御プログラムを記憶する不揮発性メモリ（１３，１８，１９）を備え、
複数の前記ＣＰＵのうちの少なくとも１つの前記ＣＰＵは、
データを記憶することが可能な内蔵メモリ（２１，２２）と、
前記不揮発性メモリに記憶される前記制御プログラムの内容を書き換える処理を行うための書換プログラムを前記内蔵メモリに記憶させるプログラム記憶手段（Ｓ５０，Ｓ１４０，Ｓ５５，Ｓ１４５）と、
前記内蔵メモリに記憶された前記書換プログラムを実行するプログラム実行手段（Ｓ６０，Ｓ８０，Ｓ１５０，Ｓ１７０，Ｓ６５，Ｓ８５，Ｓ１５５，Ｓ１７５）とを備え、
前記書換プログラムは、前記不揮発性メモリに記憶される前記制御プログラムの内容を書き換えるためのデータである書換データを当該電子制御装置が外部から受信すると、受信した前記書換データの全てを、前記共有メモリに設けられた受信バッファに格納し、その後、前記受信バッファに格納された前記書換データを前記不揮発性メモリに書き込む処理を実行するプログラムである
ことを特徴とする電子制御装置。
【請求項２】
複数の前記ＣＰＵのうちの１つの前記ＣＰＵを第１ＣＰＵ（１１）とし、
複数の前記ＣＰＵのうち前記第１ＣＰＵと異なる１つの前記ＣＰＵを第２ＣＰＵ（１２）とし、
前記第１ＣＰＵが備える前記内蔵メモリを第１内蔵メモリ（２１）とし、
前記第２ＣＰＵが備える前記内蔵メモリを第２内蔵メモリ（２２）として、
前記第１ＣＰＵが備える前記プログラム記憶手段（Ｓ５０）は、
前記書換データを当該電子制御装置が外部から受信すると、受信した前記書換データを、前記受信バッファに格納する処理を行うための格納プログラムを、前記書換プログラムとして前記第１内蔵メモリに記憶し、
前記第１ＣＰＵが備える前記プログラム実行手段（Ｓ６０，Ｓ８０）は、
前記第１内蔵メモリに記憶された前記格納プログラムを実行し、
前記第２ＣＰＵが備える前記プログラム記憶手段（Ｓ１４０）は、
前記受信バッファに格納された前記書換データを前記不揮発性メモリに書き込むことにより、前記不揮発性メモリに記憶される前記制御プログラムの内容を書き換える書込処理を行うための書込プログラムを、前記書換プログラムとして前記第２内蔵メモリに記憶し、
前記第２ＣＰＵが備える前記プログラム実行手段（Ｓ１５０，Ｓ１７０）は、
前記第２内蔵メモリに記憶された前記書込プログラムを実行する
ことを特徴とする請求項１に記載の電子制御装置。
【請求項３】
前記不揮発性メモリは、
少なくとも、前記第１ＣＰＵが前記制御処理を実行するための第１制御プログラムを記憶する第１不揮発性メモリ（１８）と、前記第２ＣＰＵが前記制御処理を実行するための第２制御プログラムを記憶する第２不揮発性メモリ（１９）とから構成され、
前記第１ＣＰＵは、
前記書換データの書き換え先が前記第１不揮発性メモリであるか前記第２不揮発性メモリであるかを示す書換先情報を当該電子制御装置が外部から受信すると、受信した前記書換先情報を、前記第２ＣＰＵへ通知する書換先通知手段（Ｓ５３０）を備え、
前記第２ＣＰＵは、
前記第１ＣＰＵから通知された前記書換先情報が前記第１不揮発性メモリを示す場合に、前記第１制御プログラムの内容を書き換えるためのデータである第１書換データを当該電子制御装置が外部から受信すると、受信した前記第１書換データを前記受信バッファに格納する処理を行うためのプログラムを前記第２内蔵メモリに記憶する第２プログラム切替手段（Ｓ６１０）を備え、
前記第１ＣＰＵは、更に、
前記書換先情報が前記第１不揮発性メモリを示す場合に、前記受信バッファに格納された前記第１書換データを前記第１不揮発性メモリに書き込むことにより前記第１制御プログラムの内容を書き換える処理を行うためのプログラムを前記第１内蔵メモリに記憶する第１プログラム切替手段（Ｓ５８０）とを備える
ことを特徴とする請求項２に記載の電子制御装置。
【請求項４】
複数のＣＰＵを有する電子制御装置のメモリ書換方法であって、
記憶内容の書き換えが可能であり所定の制御対象を制御するための制御プログラムを記憶する不揮発性メモリに記憶される前記制御プログラムの内容を書き換える処理を行うための書換プログラムを、前記ＣＰＵが備える内蔵メモリに記憶させるプログラム記憶手順（Ｓ５０，Ｓ１４０，Ｓ５５，Ｓ１４５）と、
前記内蔵メモリに記憶された前記書換プログラムを実行するプログラム実行手順（Ｓ６０，Ｓ８０，Ｓ１５０，Ｓ１７０，Ｓ６５，Ｓ８５，Ｓ１５５，Ｓ１７５）とを備え、
前記書換プログラムは、前記不揮発性メモリに記憶される前記制御プログラムの内容を書き換えるためのデータである書換データを当該電子制御装置が外部から受信すると、受信した前記書換データの全てを、複数の前記ＣＰＵが共有してデータを記憶することが可能な共有メモリに設けられた受信バッファに格納し、その後、前記受信バッファに格納された前記書換データを前記不揮発性メモリに書き込む処理を実行するプログラムである
ことを特徴とするメモリ書換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定の制御対象の制御に用いる制御プログラムを書き換え可能な電子制御装置およびメモリ書換方法に関する。
【背景技術】
【０００２】
従来、記憶内容の書き換えが可能な不揮発性メモリに制御プログラムを記憶する電子制御装置において、制御プログラムを書き換える書換プログラムを、外部から受信した書換データを一時的に格納する受信バッファが設けられたＲＡＭにロードした後に実行させるものが知られている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−２０３８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１に記載の技術では、書換プログラムをＲＡＭにロードするため、ＲＡＭに設けられた受信バッファのために確保できる記憶容量が少なくなる。これにより、受信バッファに一度に記憶させておくことができる書換データの量が少なくなる。このため、大量の書換データを不揮発性メモリに書き込む場合には、少ないデータ量の書換データを書き込む処理を何回も行う必要があり、制御プログラムの書き換えに要する時間が長くなってしまうという問題があった。
【０００５】
本発明は、こうした問題に鑑みてなされたものであり、制御プログラムの書き換えに要する時間を短縮することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するためになされた第１発明は、少なくとも１つのＣＰＵを有し、所定の制御対象を制御するための制御処理を実行するように構成された電子制御装置であって、不揮発性メモリを備える。不揮発性メモリは、記憶内容の書き換えが可能であり、制御処理を実行するための制御プログラムを記憶する。
【０００７】
また、少なくとも１つのＣＰＵは、データを記憶することが可能な内蔵メモリと、プログラム記憶手段と、プログラム実行手段とを備える。
プログラム記憶手段は、不揮発性メモリに記憶される制御プログラムの内容を書き換える処理を行うための書換プログラムを内蔵メモリに記憶させる。プログラム実行手段は、内蔵メモリに記憶された書換プログラムを実行する。
【０００８】
このように構成された電子制御装置では、書換プログラムがＣＰＵの内蔵メモリに記憶される。このため、第１発明の電子制御装置では、電子制御装置の外部から受信した書換データを不揮発性メモリに書き込む前に一時的に記憶する受信バッファが設けられたデータ記憶装置に書換プログラムを記憶する必要がなくなる。これにより、第１発明の電子制御装置は、上記データ記憶装置に書換プログラムを記憶する必要がなくなる分、受信バッファの記憶容量を増加させることができる。すなわち、第１発明の電子制御装置は、受信バッファに一度に記憶させておくことができる書換データの量を増やすことができる。
【０００９】
これにより、第１発明の電子制御装置は、受信バッファに格納された書換データを一度に不揮発性メモリに書き込むときのデータ量を大きくすることができる。このため、第１発明の電子制御装置は、大量の書換データを不揮発性メモリに書き込むときの書込回数を減らすことができ、制御プログラムの書き換えに要する時間を短縮することができる。
【００１０】
また、上記目的を達成するためになされた第２発明は、少なくとも１つのＣＰＵを有する電子制御装置のメモリ書換方法であって、プログラム記憶手順と、プログラム実行手順とを備える。
【００１１】
プログラム記憶手順は、記憶内容の書き換えが可能であり所定の制御対象を制御するための制御プログラムを記憶する不揮発性メモリに記憶される制御プログラムの内容を書き換える処理を行うための書換プログラムを、ＣＰＵが備える内蔵メモリに記憶させる。プログラム実行手順は、内蔵メモリに記憶された書換プログラムを実行する。
【００１２】
第２発明のメモリ書換方法は、第１発明の電子制御装置にて実行される方法であり、当該方法を実行することで、第１発明の電子制御装置と同様の効果を得ることができる。
【図面の簡単な説明】
【００１３】
【図１】第１実施形態のＥＣＵ１の構成を示すブロック図である。
【図２】第１実施形態のＣＰＵ１１で実行される処理を示すフローチャートである。
【図３】第１実施形態のＣＰＵ１２で実行される処理を示すフローチャートである。
【図４】第１書換処理を示すフローチャートである。
【図５】第２書換処理を示すフローチャートである。
【図６】フラッシュＲＯＭ１３のプログラムを書き換える手順を示すブロック図である。
【図７】送信データを書き込む動作を示すシーケンス図である。
【図８】第２実施形態のＥＣＵ１の構成を示すブロック図である。
【図９】第２実施形態のＣＰＵ１１で実行される処理を示すフローチャートである。
【図１０】第２実施形態のＣＰＵ１２で実行される処理を示すフローチャートである。
【図１１】書換切替処理を示すフローチャートである。
【図１２】フラッシュＲＯＭ１８，１９のプログラムを書き換える手順を示すブロック図である。
【発明を実施するための形態】
【００１４】
（第１実施形態）
以下に本発明の第１実施形態を図面とともに説明する。
本実施形態の電子制御装置（Electronic Control Unit）１（以下、ＥＣＵ１という）は、車両に搭載され、車両に搭載されたエンジン（不図示）を制御する。
【００１５】
ＥＣＵ１は、図１に示すように、マイクロコンピュータ（以下、マイコンという）２と、通信回路３とを備える。
マイコン２は、ＣＰＵ１１、ＣＰＵ１２、フラッシュＲＯＭ１３、ＲＡＭ１４およびＣＡＮ（登録商標：Controller  Area  Network）モジュール１５を備える。
【００１６】
ＣＰＵ１１，１２はそれぞれ、内蔵ＲＡＭ２１，２２を備える。そしてＣＰＵ１１は、フラッシュＲＯＭ１３に格納されたプログラムと、ＲＡＭ１４および内蔵ＲＡＭ２１にロードされたプログラムとに基づいて各種処理を実行することが可能に構成されている。同様にＣＰＵ１２は、フラッシュＲＯＭ１３に格納されたプログラムと、ＲＡＭ１４および内蔵ＲＡＭ２２にロードされたプログラムとに基づいて各種処理を実行することが可能に構成されている。
【００１７】
フラッシュＲＯＭ１３は、記憶内容を書き換え可能な不揮発性メモリである。フラッシュＲＯＭ１３には、ブートプログラムと、制御プログラムと、書換プログラムとが記憶されている。ブートプログラムは、マイコン２のリセット解除直後に実行されるプログラムである。制御プログラムは、エンジンを制御するためのプログラムである。制御プログラムは、エンジン制御用の制御プログラムを構成するデータと、その制御プログラムの実行時に参照される制御データとを含む。書換プログラムは、フラッシュＲＯＭ１３の記憶内容（すなわち、制御プログラムを構成するデータと、制御データ）を書き換えるためのプログラムである。
【００１８】
ブートプログラム、制御プログラムおよび書換プログラムは、ＣＰＵ１１が実行するプログラムと、ＣＰＵ１２が実行するプログラムとを含む。
以下、ＣＰＵ１１が実行するブートプログラム、制御プログラムおよび書換プログラムをそれぞれ、第１ブートプログラム、第１制御プログラムおよび第１書換プログラムという。また、ＣＰＵ１２が実行するブートプログラム、制御プログラムおよび書換プログラムをそれぞれ、第２ブートプログラム、第２制御プログラムおよび第２書換プログラムという。
【００１９】
ＲＡＭ１４は、揮発性メモリであり、ＣＰＵ１１，１２の演算結果等を一時的に記憶する。またＲＡＭ１４には、受信バッファ３１が設けられている。受信バッファ３１は、フラッシュＲＯＭ１３に記憶されるプログラムの書き換え等を行うためのプログラム書換装置６から受信したデータを一時的に記憶するための記憶領域である。
【００２０】
ＣＡＮモジュール１５は、通信回路３を介して通信フレームを送受信する送受信制御、および複数のＥＣＵ（不図示）から同時に通信フレームが送信された場合の調停を行う調停制御等のＣＡＮ通信プロトコルに従った制御を実行する。
【００２１】
また、ＣＰＵ１１とＣＰＵ１２との間、ＣＰＵ１１，１２とフラッシュＲＯＭ１３との間、ＣＰＵ１１，１２とＲＡＭ１４との間、およびＣＰＵ１１，１２とＣＡＮモジュール１５との間は、データ通信可能に接続されている。
【００２２】
通信回路３は、マイコン２のＣＡＮモジュール１５から入力するデジタル信号をＣＡＮ通信プロトコルに従う差動信号に変換して通信線７へ出力するとともに、通信線７から入力する差動信号をデジタル信号に変換してＣＡＮモジュール１５へ出力する。
【００２３】
また通信回路３には、プログラム書換装置６が通信線７を介して接続される。プログラム書換装置６は、例えば、コネクタ８を介して着脱可能になっており、プログラムの書き換え時等にＥＣＵ１に接続される。なおプログラム書換装置６は、マイコンおよび表示装置を備えたハンディタイプの装置または小型のパソコン等である。
【００２４】
このように構成されたＥＣＵ１において、マイコン２のＣＰＵ１１は、リセット解除直後に、フラッシュＲＯＭ１３内の第１ブートプログラムを実行し、マイコン２のＣＰＵ１２は、リセット解除直後に、フラッシュＲＯＭ１３内の第２ブートプログラムを実行する。
【００２５】
次に、マイコン２のＣＰＵ１１で実行される処理を説明する。図２は、ＣＰＵ１１で実行される処理を示すフローチャートである。図２におけるＳ１０〜Ｓ６０の処理が、フラッシュＲＯＭ１３内の第１ブートプログラムによって実行される。Ｓ７０の処理が、フラッシュＲＯＭ１３内の第１制御プログラムによって実行される。Ｓ８０の処理が、内蔵ＲＡＭ２１内の第１書換プログラムによって実行される。
【００２６】
車両のイグニッションスイッチ（不図示）のオンに伴い電源が投入されると、マイコン２のＣＰＵ１１がリセット状態から動作を開始して、第１ブートプログラムの実行を開始し、図２に示すように、まずＳ１０にて、プログラム書換装置６からプログラム書換要求を受信したか否かを判断する。なお、プログラム書換要求には、書き込まれるプログラムの総データ量を示す総書込データ量情報が含まれる。
【００２７】
ここで、プログラム書換要求を受信していない場合には（Ｓ１０：ＮＯ）、Ｓ２０にて、第１制御プログラムが既にフラッシュＲＯＭ１３に書き込まれているか否かを判断する。ここで、第１制御プログラムが書き込まれていない場合には（Ｓ２０：ＮＯ）、Ｓ１０に移行して、上述の処理を繰り返す。一方、第１制御プログラムが書き込まれている場合には（Ｓ２０：ＹＥＳ）、Ｓ３０にて、フラッシュＲＯＭ１３内の第１制御プログラムへジャンプする。これにより、フラッシュＲＯＭ１３内の第１制御プログラムが実行されて、Ｓ７０に示すように、エンジンを制御するための制御処理が行われることとなる。
【００２８】
一方、プログラム書換要求を受信した場合には（Ｓ１０：ＹＥＳ）、Ｓ４０にて、受信したプログラム書換要求をＣＰＵ１２へ送信する。さらにＳ５０にて、第１書換プログラムを内蔵ＲＡＭ２１へロードする。そしてＳ６０にて、内蔵ＲＡＭ２１内の第１書換プログラムへジャンプする。これにより、内蔵ＲＡＭ２１内の第１書換プログラムが実行されて、Ｓ８０に示すように、第１書換処理が行われる。なお第１書換処理は、ＥＣＵ１がプログラム書換装置６からのリセットコマンドを受信するか、ＥＣＵ１への電源供給が遮断された場合に終了させられる。
【００２９】
次に、マイコン２のＣＰＵ１２で実行される処理を説明する。図３は、ＣＰＵ１２で実行される処理を示すフローチャートである。図３におけるＳ１１０〜Ｓ１５０の処理が、フラッシュＲＯＭ１３内の第２ブートプログラムによって実行される。Ｓ１６０の処理が、フラッシュＲＯＭ１３内の第２制御プログラムによって実行される。Ｓ１７０の処理が、内蔵ＲＡＭ２２内の第２書換プログラムによって実行される。
【００３０】
車両のイグニッションスイッチ（不図示）のオンに伴い電源が投入されると、マイコン２のＣＰＵ１２がリセット状態から動作を開始して、第２ブートプログラムの実行を開始し、図３に示すように、まずＳ１１０にて、ＣＰＵ１１からプログラム書換要求を受信したか否かを判断する。
【００３１】
ここで、プログラム書換要求を受信していない場合には（Ｓ１１０：ＮＯ）、Ｓ１２０にて、第２制御プログラムが既にフラッシュＲＯＭ１３に書き込まれているか否かを判断する。ここで、第２制御プログラムが書き込まれていない場合には（Ｓ１２０：ＮＯ）、Ｓ１１０に移行して、上述の処理を繰り返す。一方、第２制御プログラムが書き込まれている場合には（Ｓ１２０：ＹＥＳ）、Ｓ１３０にて、フラッシュＲＯＭ１３内の第２制御プログラムへジャンプする。これにより、フラッシュＲＯＭ１３内の第２制御プログラムが実行されて、Ｓ１６０に示すように、エンジンを制御するための制御処理が行われることとなる。
【００３２】
一方、プログラム書換要求を受信した場合には（Ｓ１１０：ＹＥＳ）、Ｓ１４０にて、第２書換プログラムを内蔵ＲＡＭ２２へロードする。そしてＳ１５０にて、内蔵ＲＡＭ２２内の第２書換プログラムへジャンプする。これにより、内蔵ＲＡＭ２２内の第２書換プログラムが実行されて、Ｓ１７０に示すように、第２書換処理が行われる。なお第２書換処理は、ＥＣＵ１がプログラム書換装置６からのリセットコマンドを受信するか、ＥＣＵ１への電源供給が遮断された場合に終了させられる。
【００３３】
次に、ＣＰＵ１１がＳ８０で実行する第１書換処理の手順を説明する。
この第１書換処理が実行されると、ＣＰＵ１１は、図４に示すように、まずＳ２１０にて、プログラム書換装置６から送信されて来る書換データをＣＡＮモジュール１５が新たに受信したか否かを判断する。ここで、書換データを受信していない場合には（Ｓ２１０：ＮＯ）、Ｓ２５０に移行する。
【００３４】
一方、書換データを新たに受信した場合には（Ｓ２１０：ＹＥＳ）、Ｓ２２０にて、受信した書換データをＲＡＭ１４内の受信バッファ３１に格納する。
次にＳ２３０にて、受信バッファ３１に格納された書換データのデータ量（以下、格納データ量という）が予め設定された書込実行データ量（本実施形態では、例えば８キロバイト）以上であるか否かを判断する。ここで、格納データ量が書込実行データ量未満である場合には（Ｓ２３０：ＮＯ）、Ｓ２５０に移行する。一方、格納データ量が書込実行データ量以上である場合には（Ｓ２３０：ＹＥＳ）、Ｓ２４０にて、ＣＰＵ１２へ書込処理要求を送信し、Ｓ２５０に移行する。
【００３５】
そしてＳ２５０に移行すると、ＣＰＵ１２から書込完了応答（後述）を受信したか否かを判断する。ここで、書込完了応答を受信していない場合には（Ｓ２５０：ＮＯ）、Ｓ２１０に移行して、上述の処理を繰り返す。
【００３６】
一方、書込完了応答を受信した場合には（Ｓ２５０：ＹＥＳ）、Ｓ２６０にて、内蔵ＲＡＭ２１に設けられた第１書込回数カウンタをインクリメント（１加算）する。そしてＳ２７０にて、第１書込回数カウンタの値（以下、第１書込回数という）が終了判定回数以上であるか否かを判断する。なお終了判定回数は、総書込データ量情報が示すデータ量を書込実行データ量で除した除算値である。
【００３７】
ここで、第１書込回数が終了判定回数未満である場合には（Ｓ２７０：ＮＯ）、Ｓ２１０に移行して、上述の処理を繰り返す。一方、第１書込回数が終了判定回数以上である場合には（Ｓ２７０：ＹＥＳ）、今回のプログラム書換要求で書き込むべきプログラムに関する全ての書き込みが終了したと判断し、第１書換処理を終了する。
【００３８】
次に、ＣＰＵ１２がＳ１７０で実行する第２書換処理の手順を説明する。
この第２書換処理が実行されると、ＣＰＵ１２は、図５に示すように、まずＳ３１０にて、ＣＰＵ１１から書込処理要求を受信したか否かを判断する。ここで、書込処理要求を受信していない場合には（Ｓ３１０：ＮＯ）、Ｓ３１０の処理を繰り返すことにより、書込処理要求を受信するまで待機する。
【００３９】
そして、書込処理要求を受信すると（Ｓ３１０：ＹＥＳ）、Ｓ３２０にて、ＲＡＭ１４内の受信バッファ３１から、フラッシュＲＯＭ１３に書き込まれていないデータ（以下、未書込データという）を書込実行データ量分だけ読み出し、読み出した未書込データをフラッシュＲＯＭ１３に書き込む。
【００４０】
そして、書込実行データ量分の未書込データの書き込みが終了すると、Ｓ３３０にて、書き込んだデータのベリファイ（ｖｅｒｉｆｙ）を実行する。具体的には、受信バッファ３１から読み出したデータと、フラッシュＲＯＭ１３に書き込まれたデータが互いに一致しているか否かを確認する。
【００４１】
そしてＳ３４０にて、Ｓ３３０でのベリファイの結果に基づいて、受信バッファ３１から読み出したデータと、フラッシュＲＯＭ１３に書き込まれたデータが互いに一致しているかを判断する。ここで、両データが一致していない場合には（Ｓ３４０：ＮＯ）、Ｓ３２０に移行し、上述の処理を繰り返す。
【００４２】
一方、両データが一致している場合には（Ｓ３４０：ＹＥＳ）、Ｓ３５０にて、ＲＡＭ１４に設けられた第２書込回数カウンタをインクリメントする。さらにＳ３６０にて、ＣＰＵ１１へ書込完了応答を送信する。
【００４３】
そしてＳ３７０にて、第２書込回数カウンタの値（以下、第２書込回数という）が終了判定回数以上であるか否かを判断する。
ここで、第２書込回数が終了判定回数未満である場合には（Ｓ３７０：ＮＯ）、Ｓ３１０に移行して、上述の処理を繰り返す。一方、第２書込回数が終了判定回数以上である場合には（Ｓ３７０：ＹＥＳ）、第２書換処理を終了する。
【００４４】
このように構成されたＥＣＵ１は、ＣＰＵ１１，１２を有し、エンジンを制御するための制御処理を実行する。そしてＥＣＵ１は、フラッシュＲＯＭ１３を備える。フラッシュＲＯＭ１３は、記憶内容の書き換えが可能であり、制御処理を実行するための第１，２制御プログラムを記憶する。
【００４５】
ＣＰＵ１１，１２はそれぞれ、内蔵ＲＡＭ２１，２２を備える。
ＣＰＵ１１は、フラッシュＲＯＭ１３に記憶される第１，２制御プログラムの内容を書き換える処理を行うための第１書換プログラムを内蔵ＲＡＭ２１に記憶させる（Ｓ５０）。またＣＰＵ１１は、内蔵ＲＡＭ２１に記憶された第１書換プログラムを実行する（Ｓ６０，Ｓ８０）。
【００４６】
ＣＰＵ１２は、フラッシュＲＯＭ１３に記憶される第１，２制御プログラムの内容を書き換える処理を行うための第２書換プログラムを内蔵ＲＡＭ２２に記憶させる（Ｓ１４０）。またＣＰＵ１２は、内蔵ＲＡＭ２２に記憶された第２書換プログラムを実行する（Ｓ１５０，Ｓ１７０）。
【００４７】
このようにＥＣＵ１では、第１，２書換プログラムがＣＰＵ１１，１２の内蔵ＲＡＭ２１，２２に記憶される。このため、ＥＣＵ１では、ＥＣＵ１の外部から受信した書換データをフラッシュＲＯＭ１３に書き込む前に一時的に記憶する受信バッファ３１が設けられたＲＡＭ１４に第１，２書換プログラムを記憶する必要がなくなる。これによりＥＣＵ１は、ＲＡＭ１４に第１，２書換プログラムを記憶する必要がなくなる分、受信バッファ３１の記憶容量を増加させることができる。すなわち、ＥＣＵ１は、受信バッファ３１に一度に記憶させておくことができる書換データの量を増やすことができる。
【００４８】
これによりＥＣＵ１は、受信バッファ３１に格納された書換データを一度にフラッシュＲＯＭ１３に書き込むときのデータ量を大きくすることができる。このため、ＥＣＵ１は、大量の書換データをフラッシュＲＯＭ１３に書き込むときの書込回数を減らすことができ、第１，２制御プログラムの書き換えに要する時間を短縮することができる。
【００４９】
またＣＰＵ１１は、書換データをＥＣＵ１が外部から受信すると、受信した書換データを、フラッシュＲＯＭ１３に書き込む前に一時的に記憶する受信バッファ３１に格納する処理を行うための格納プログラムを、第１書換プログラムとして内蔵ＲＡＭ２１に記憶する（Ｓ５０）。
【００５０】
またＣＰＵ１２は、受信バッファ３１に格納された書換データをフラッシュＲＯＭ１３に書き込むことにより、フラッシュＲＯＭ１３に記憶される第１，２制御プログラムの内容を書き換える書込処理を行うための書込プログラムを、第２書換プログラムとして内蔵ＲＡＭ２２に記憶する（Ｓ１４０）。
【００５１】
これによりＥＣＵ１は、例えば図６に示すように、書換データを受信バッファ３１に格納する処理と、フラッシュＲＯＭ１３に書換データを書き込む処理とをそれぞれ別のＣＰＵで実行することができる。
【００５２】
図６では、まず、プログラム書換装置６が書換データを送信すると（矢印ＡＬ１を参照）、ＣＡＮモジュール１５は、通信回路３を介して書換データを受信する（矢印ＡＬ２を参照）。
【００５３】
ＣＰＵ１１は、内蔵ＲＡＭ２１内の第１書換プログラムを実行することにより、ＣＡＮモジュール１５から書換データを取得し（矢印ＡＬ３を参照）、取得した書換データをＲＡＭ１４内の受信バッファ３１に格納する（矢印ＡＬ４を参照）。
【００５４】
そしてＣＰＵ１２は、内蔵ＲＡＭ２２内の第２書換プログラムを実行することにより、受信バッファ３１から書換データを読み出し（矢印ＡＬ５を参照）、読み出した書換データをフラッシュＲＯＭ１３に書き込む（矢印ＡＬ６を参照）。
【００５５】
これによりＥＣＵ１は、書換データを受信バッファ３１に格納する処理と、フラッシュＲＯＭ１３に書換データを書き込む処理との何れか一方しか実行できないという事態の発生を抑制し、制御プログラムの書き換えに要する時間を更に短縮することができる。
【００５６】
図７は、プログラム書換装置６から送信されたデータがフラッシュＲＯＭ１３に書き込まれるまでの動作を示すシーケンス図である。図７の左側は、従来技術として、１つのＣＰＵが、プログラム書換装置から受信した書換データを受信バッファに格納した後に、フラッシュＲＯＭに書き込む動作を示す。図７の右側は、本実施形態のＥＣＵ１が書換データの受信と書き込みを行う場合の動作を示す。
【００５７】
まず、図７の左側で示されている動作を説明する。なお、受信バッファは第１バッファと第２バッファとから構成されているとする。
プログラム書換装置からは、データＤＡ、データＤＢ、データＤＣ、データＤＤ、データＤＥ、データＤＦ、データＤＧの順に書換データが送信される。
【００５８】
ＣＰＵは、受信したデータＤＡを第１バッファに格納する（処理ＳＡ１を参照）。なお、データＤＡを全て格納すると、第１バッファに空き領域が無くなるとする。そしてＣＰＵは、フラッシュＲＯＭに対して、データ消去の要求と、データＤＡの書き込み要求を送信する（処理ＲＡ１を参照）。これにより、フラッシュＲＯＭは、記憶されているデータの消去を行い、その後、予め設定された書込データ量分のデータＤＡの書き込みを行う（処理ＷＡ１を参照）。ＣＰＵは、書込データ量分のデータＤＡが書き込まれる毎に、書き込み要求を送信する（処理ＲＡ２，ＲＡ３，ＲＡ４を参照）。フラッシュＲＯＭは、データＤＡの書き込み要求を受信する毎に、書込データ量分のデータＤＡを書き込む。
【００５９】
またＣＰＵは、データＤＡの書き込み要求を送信する処理が行われていないときに、受信したデータＤＢを第２バッファに格納する（処理ＳＢ１，ＳＢ２，ＳＢ３，ＳＢ４を参照）。なお、データＤＢを全て格納すると、第２バッファに空き領域が無くなるとする。
【００６０】
そして、データＤＢ１が第２バッファに格納されると、ＣＰＵは、フラッシュＲＯＭに対して、データＤＢの書き込み要求を送信する（処理ＲＢ１を参照）。これにより、フラッシュＲＯＭは、書込データ量分のデータＤＢの書き込みを行う（処理ＷＢ１を参照）。ＣＰＵは、書込データ量分のデータＤＢが書き込まれる毎に、書き込み要求を送信する（処理ＲＢ２，ＲＢ３，ＲＢ４を参照）。フラッシュＲＯＭは、データＤＢの書き込み要求を受信する毎に、書込データ量分のデータＤＢを書き込む。
【００６１】
その後、ＣＰＵとフラッシュＲＯＭは、上述した処理を、データＤＣ、データＤＤ、データＤＥ、データＤＦおよびデータＤＧについて順次実行する。なお、データＤＣ、データＤＥおよびデータＤＧは第１バッファに格納され、データＤＤおよびデータＤＦは第２バッファに格納される。
【００６２】
次に、図７の右側で示されている動作を説明する。なお、受信バッファ３１は第１バッファと第２バッファとから構成されているとする。また、受信バッファ３１の第１バッファおよび第２バッファの記憶容量は、図７の左側に示す処理において用いられた第１バッファおよび第２バッファの２倍であるとする。
【００６３】
プログラム書換装置６からは、データＤＡ、データＤＢ、データＤＣ、データＤＤ、データＤＥ、データＤＦ、データＤＧの順に書換データが送信される。
ＣＰＵ１１は、受信したデータＤＡおよびデータＤＢを第１バッファに格納する（処理ＳＡ１１，ＳＢ１１を参照）。なお、データＤＡおよびデータＤＢを全て格納すると、第１バッファに空き領域が無くなるとする。そしてＣＰＵ１２は、フラッシュＲＯＭ１３に対して、データ消去の要求と、データＤＡ，ＤＢの書き込み要求を送信する（処理ＲＡ１１を参照）。これにより、フラッシュＲＯＭ１３は、記憶されているデータの消去を行い、その後、予め設定された書込データ量分のデータＤＡ，ＤＢの書き込みを行う（処理ＷＡ１１を参照）。ＣＰＵ１２は、書込データ量分のデータＤＡ，ＤＢが書き込まれる毎に、書き込み要求を送信する（処理ＲＡ１２，ＲＡ１３，ＲＡ１４，ＲＡ１５，ＲＡ１６を参照）。フラッシュＲＯＭ１３は、データＤＡ，ＤＢの書き込み要求を受信する毎に、書込データ量分のデータＤＡ，ＤＢを書き込む。
【００６４】
一方、ＣＰＵ１１は、データＤＡおよびデータＤＢを第１バッファに格納した後に、受信したデータＤＣおよびデータＤＤを第２バッファに格納する（処理ＳＣ１１，ＳＤ１１を参照）。ＣＰＵ１１は、ＣＰＵ１２により書き込み要求が行われているか否かに関わらず、受信したデータを第２バッファに格納する処理を実行する。なお、データＤＣおよびデータＤＤを全て格納すると、第２バッファに空き領域が無くなるとする。
【００６５】
そしてＣＰＵ１２は、データＤＣ，ＤＤが第２バッファに格納された後に、フラッシュＲＯＭ１３に対して、データＤＣ，ＤＤの書き込み要求を送信する（処理ＲＣ１１を参照）。これにより、フラッシュＲＯＭ１３は、書込データ量分のデータＤＣ，ＤＤの書き込みを行う（処理ＷＣ１１を参照）。ＣＰＵ１２は、書込データ量分のデータＤＣ，ＤＤが書き込まれる毎に、書き込み要求を送信する（処理ＲＣ１２，ＲＣ１３，ＲＣ１４，ＲＣ１５，ＲＣ１６を参照）。フラッシュＲＯＭ１３は、データＤＣ，ＤＤの書き込み要求を受信する毎に、書込データ量分のデータＤＣ，ＤＤを書き込む。
【００６６】
その後、ＣＰＵ１１，１２とフラッシュＲＯＭ１３は、上述した処理を、データＤＥ、データＤＦおよびデータＤＧについて順次実行する。なお、データＤＥおよびデータＤＦは第１バッファに格納され、データＤＧは第２バッファに格納される。
【００６７】
図７に示すように、図７の右側で示されている動作で、データＤＡの送信が開始されてからデータＤＤの書き込みが完了するまでの時間Ｔ１１は、図７の左側で示されている動作で、データＤＡの送信が開始されてからデータＤＤの書き込みが完了するまでの時間Ｔ１よりも短い。
【００６８】
以上説明した実施形態において、フラッシュＲＯＭ１３は本発明における不揮発性メモリ、ＣＰＵ１１は本発明における第１ＣＰＵ、ＣＰＵ１２は本発明における第２ＣＰＵ、内蔵ＲＡＭ２１は本発明における第１内蔵メモリ、内蔵ＲＡＭ２２は本発明における第２内蔵メモリである。
【００６９】
また、Ｓ５０，Ｓ１４０の処理は本発明におけるプログラム記憶手段およびプログラム記憶手順、Ｓ６０，Ｓ８０，Ｓ１５０，Ｓ１７０の処理は本発明におけるプログラム実行手段およびプログラム実行手順である。
【００７０】
（第２実施形態）
以下に本発明の第２実施形態を図面とともに説明する。なお第２実施形態では、第１実施形態と異なる部分を説明する。
【００７１】
第２実施形態のＥＣＵ１は、図８に示すように、フラッシュＲＯＭ１３の代わりにフラッシュＲＯＭ１８，１９を備える点が第１実施形態と異なる。
また第２実施形態のＥＣＵ１は、ＣＰＵ１１，１２とフラッシュＲＯＭ１３との間が接続される代わりに、ＣＰＵ１１とフラッシュＲＯＭ１８との間、およびＣＰＵ１２とフラッシュＲＯＭ１９との間がデータ通信可能に接続される点が第１実施形態と異なる。
【００７２】
また第２実施形態のＥＣＵ１は、レジスタ４１を備える点が第１実施形態と異なる。そして、ＣＰＵ１１とレジスタ４１との間、およびＣＰＵ１２とレジスタ４１との間がデータ通信可能に接続される。
【００７３】
また第２実施形態のプログラム書換装置６は、フラッシュＲＯＭ１９に書き込むプログラムを送信した後に、フラッシュＲＯＭ１８に書き込むプログラムを送信するように構成されている。
【００７４】
また第２実施形態のＥＣＵ１は、後述の書換切替処理を行う書換切替プログラムがフラッシュＲＯＭ１３に追加して記憶されている点が第１実施形態と異なる。
また第２実施形態のＥＣＵ１は、マイコン２のＣＰＵ１１，１２で実行される処理が変更されている点が第１実施形態と異なる。
【００７５】
次に、第２実施形態のマイコン２のＣＰＵ１１で実行される処理を説明する。図９は、第２実施形態のＣＰＵ１１で実行される処理を示すフローチャートである。
この処理は、Ｓ５０，Ｓ６０，Ｓ８０の処理の代わりに、Ｓ５５，Ｓ６５，Ｓ８５の処理を実行する点が第１実施形態と異なる。
【００７６】
図９におけるＳ１０〜Ｓ６５の処理が、フラッシュＲＯＭ１８内の第１ブートプログラムによって実行される。Ｓ７０の処理が、フラッシュＲＯＭ１８内の第１制御プログラムによって実行される。Ｓ８５の処理が、内蔵ＲＡＭ２１内の第１書換プログラムによって実行される。
【００７７】
第２実施形態のマイコン２のＣＰＵ１１で実行される処理では、図９に示すように、Ｓ４０の処理が終了すると、Ｓ５５にて、第１書換プログラムと書換切替プログラムを内蔵ＲＡＭ２１へロードする。そしてＳ６５にて、内蔵ＲＡＭ２１内の書換切替プログラムへジャンプする。これにより、内蔵ＲＡＭ２１内の書換切替プログラムが実行されて、Ｓ８５に示すように、書換切替処理が行われる。なお書換切替処理は、ＥＣＵ１がプログラム書換装置６からのリセットコマンドを受信するか、ＥＣＵ１への電源供給が遮断された場合に終了させられる。
【００７８】
次に、第２実施形態のマイコン２のＣＰＵ１２で実行される処理を説明する。図１０は、第２実施形態のＣＰＵ１２で実行される処理を示すフローチャートである。
この処理は、Ｓ１４０，Ｓ１５０，Ｓ１７０の処理の代わりに、Ｓ１４５，Ｓ１５５，Ｓ１７５の処理を実行する点が第１実施形態と異なる。
【００７９】
図１０におけるＳ１１０〜Ｓ１５５の処理が、フラッシュＲＯＭ１９内の第２ブートプログラムによって実行される。Ｓ１６０の処理が、フラッシュＲＯＭ１９内の第２制御プログラムによって実行される。Ｓ１７５の処理が、内蔵ＲＡＭ２２内の第２書換プログラムによって実行される。
【００８０】
第２実施形態のマイコン２のＣＰＵ１２で実行される処理では、図１０に示すように、プログラム書換要求を受信した場合には（Ｓ１１０：ＹＥＳ）、Ｓ１４５にて、第２書換プログラムと書換切替プログラムを内蔵ＲＡＭ２２へロードする。そしてＳ１５５にて、内蔵ＲＡＭ２２内の書換切替プログラムへジャンプする。これにより、内蔵ＲＡＭ２２内の書換切替プログラムが実行されて、Ｓ１７５に示すように、書換切替処理が行われる。
【００８１】
次に、Ｓ８５とＳ１７５で実行される書換切替処理の手順を説明する。
この書換切替処理が実行されると、ＣＰＵ１１は、図１１に示すように、まずＳ５１０にて、自ＣＰＵが格納用ＣＰＵであるか否かを判断する。具体的には、内蔵ＲＡＭ２１内に第１書換プログラム（すなわち、格納プログラム）がロードされている場合に、自ＣＰＵが格納用ＣＰＵであると判断する。ここで、自ＣＰＵが格納用ＣＰＵである場合には（Ｓ５１０：ＹＥＳ）、Ｓ５２０にて、プログラム書換装置６からデータ書換先情報を受信したか否かを判断する。
【００８２】
データ書換先情報には、書き込まれるプログラムの書込先アドレスと、書き込まれるプログラムの総データ量が含まれる。なお、本実施形態のプログラム書換要求には、第１実施形態の総書込データ量情報が含まれていない。そしてデータ書換先情報は、プログラム書換装置６がプログラム書換要求を送信した後において、フラッシュＲＯＭ１８に書き込まれるプログラムをプログラム書換装置６が送信する前と、フラッシュＲＯＭ１９に書き込まれるプログラムをプログラム書換装置６が送信する前に、プログラム書換装置６から送信される。
【００８３】
ここで、データ書換先情報を受信していない場合には（Ｓ５２０：ＮＯ）、Ｓ５２０の処理を繰り返すことにより、データ書換先情報を受信するまで待機する。そして、データ書換先情報を受信すると（Ｓ５２０：ＹＥＳ）、Ｓ５３０にて、受信したデータ書換先情報をＣＰＵ１２へ通知し、Ｓ５６０に移行する。具体的には、レジスタ４１に、受信したデータ書換先情報を格納する。
【００８４】
またＳ５１０にて、自ＣＰＵ（すなわちＣＰＵ１１）が格納用ＣＰＵではない場合には（Ｓ５１０：ＮＯ）、Ｓ５４０にて、新たなデータ書換先情報がレジスタ４１に格納されたか否かを判断する。ここで、新たなデータ書換先情報が格納されていない場合には（Ｓ５４０：ＮＯ）、Ｓ５４０の処理を繰り返すことにより、新たなデータ書換先情報が格納されるまで待機する。そして、新たなデータ書換先情報がレジスタ４１に格納されると（Ｓ５４０：ＹＥＳ）、Ｓ５５０にて、新たなデータ書換先情報をレジスタ４１から取得し、Ｓ５６０に移行する。
【００８５】
そしてＳ５６０に移行すると、自ＣＰＵ（すなわちＣＰＵ１１）に対応するフラッシュＲＯＭ（すなわちフラッシュＲＯＭ１８）への書き込みが実行されるか否かを判断する。具体的には、Ｓ５３０で通知したデータ書換先情報、またはＳ５５０で取得したデータ書換先情報に含まれている書込先アドレスを参照することにより、自ＣＰＵに対応するフラッシュＲＯＭへの書き込みが実行されるか否かを判断する。
【００８６】
ここで、自ＣＰＵに対応するフラッシュＲＯＭへの書き込みが実行される場合には（Ｓ５６０：ＹＥＳ）、Ｓ５７０にて、自ＣＰＵ（すなわちＣＰＵ１１）を書込用ＣＰＵに設定する。そしてＳ５８０にて、自ＣＰＵ（すなわちＣＰＵ１１）の内蔵ＲＡＭ（すなわち内蔵ＲＡＭ２１）へ第２書換プログラム（すなわち、書込プログラム）をロードする。その後Ｓ５９０にて、第２書換プログラムを実行する。これにより、第１実施形態の第２書換処理（図５を参照）と同様の処理が行われる。そして、Ｓ５９０の処理が終了すると、書換切替処理を一旦終了する。
【００８７】
また、自ＣＰＵに対応するフラッシュＲＯＭへの書き込みが実行されない場合には（Ｓ５６０：ＮＯ）、Ｓ６００にて、自ＣＰＵ（すなわちＣＰＵ１１）を格納用ＣＰＵに設定する。そしてＳ６１０にて、自ＣＰＵ（すなわちＣＰＵ１１）の内蔵ＲＡＭ（すなわち内蔵ＲＡＭ２１）へ第１書換プログラム（すなわち、格納プログラム）をロードする。その後Ｓ６２０にて、第１書換プログラムを実行する。これにより、第１実施形態の第１書換処理（図４を参照）と同様の処理が行われる。そして、Ｓ６２０の処理が終了すると、書換切替処理を一旦終了する。
【００８８】
なお、ＣＰＵ１２が実行する書換切替処理は、ＣＰＵ１１が実行する書換切替処理のＳ５１０〜Ｓ６２０において、ＣＰＵ１１とＣＰＵ１２と内蔵ＲＡＭ２１とフラッシュＲＯＭ１８をそれぞれ、ＣＰＵ１２とＣＰＵ１１と内蔵ＲＡＭ２２とフラッシュＲＯＭ１９に置き換えたものであるため、詳細な説明を省略する。
【００８９】
このように構成されたＥＣＵ１は、ＣＰＵ１１が制御処理を実行するための第１制御プログラムを記憶するフラッシュＲＯＭ１８と、ＣＰＵ１２が制御処理を実行するための第２制御プログラムを記憶するフラッシュＲＯＭ１９とを備える。
【００９０】
ＣＰＵ１１は、書換データの書き換え先がフラッシュＲＯＭ１８であるかフラッシュＲＯＭ１９であるかを示すデータ書換先情報をＥＣＵ１が外部から受信すると、受信したデータ書換先情報を、ＣＰＵ１２へ通知する（Ｓ５３０）。
【００９１】
ＣＰＵ１２は、ＣＰＵ１１から通知されたデータ書換先情報がフラッシュＲＯＭ１８を示す場合に、第１制御プログラムの内容を書き換えるためのデータ（以下、第１書換データという）をＥＣＵ１が外部から受信すると、受信した第１書換データを受信バッファ３１に格納する処理を行うためのプログラムを内蔵ＲＡＭ２２に記憶する（Ｓ６１０）。
【００９２】
ＣＰＵ１１は、更に、データ書換先情報がフラッシュＲＯＭ１８を示す場合に、受信バッファ３１に格納された第１書換データをフラッシュＲＯＭ１８に書き込むことにより第１制御プログラムの内容を書き換える処理を行うためのプログラムを内蔵ＲＡＭ２１に記憶する（Ｓ５８０）。
【００９３】
これによりＥＣＵ１は、図１２に示すように、ＣＰＵ１１がフラッシュＲＯＭ１８に書換データを書き込む場合と、ＣＰＵ１２がフラッシュＲＯＭ１９に書換データを書き込む場合との両方で、書換データを格納する処理と、書換データを書き込む処理とをそれぞれ別のＣＰＵで実行することができる。
【００９４】
図１２では、まず、プログラム書換装置６がフラッシュＲＯＭ１９用の書換データを送信すると（矢印ＡＬ１１を参照）、ＣＡＮモジュール１５は、通信回路３を介して書換データを受信する（矢印ＡＬ１２を参照）。
【００９５】
ＣＰＵ１１は、内蔵ＲＡＭ２１内の第１書換プログラムを実行することにより、ＣＡＮモジュール１５から書換データを取得し（矢印ＡＬ１３を参照）、取得した書換データをＲＡＭ１４内の受信バッファ３１に格納する（矢印ＡＬ１４を参照）。
【００９６】
そしてＣＰＵ１２は、内蔵ＲＡＭ２２内の第２書換プログラムを実行することにより、受信バッファ３１から書換データを読み出し（矢印ＡＬ１５を参照）、読み出した書換データをフラッシュＲＯＭ１９に書き込む（矢印ＡＬ１６を参照）。
【００９７】
フラッシュＲＯＭ１９のデータ書き換えが完了すると、ＣＰＵ１１は、第２書換プログラムを内蔵ＲＡＭ２１にロードし、ＣＰＵ１２は、第１書換プログラムを内蔵ＲＡＭ２２にロードする。
【００９８】
そして、プログラム書換装置６がフラッシュＲＯＭ１８用の書換データを送信し（矢印ＡＬ２１を参照）、ＣＡＮモジュール１５は、通信回路３を介して書換データを受信する（矢印ＡＬ２２を参照）。
【００９９】
ＣＰＵ１２は、内蔵ＲＡＭ２２内の第１書換プログラムを実行することにより、ＣＡＮモジュール１５から書換データを取得し（矢印ＡＬ２３を参照）、取得した書換データをＲＡＭ１４内の受信バッファ３１に格納する（矢印ＡＬ２４を参照）。
【０１００】
そしてＣＰＵ１１は、内蔵ＲＡＭ２１内の第２書換プログラムを実行することにより、受信バッファ３１から書換データを読み出し（矢印ＡＬ２５を参照）、読み出した書換データをフラッシュＲＯＭ１８に書き込む（矢印ＡＬ２６を参照）。
【０１０１】
これによりＥＣＵ１は、ＣＰＵ１１，１２がそれぞれフラッシュＲＯＭ１９，１８にアクセスすることができない場合であっても、制御プログラムの書き換えに要する時間を短縮することができる。
【０１０２】
以上説明した実施形態において、Ｓ５５，Ｓ１４５の処理は本発明におけるプログラム記憶手段およびプログラム記憶手順、Ｓ６５，Ｓ８５，Ｓ１５５，Ｓ１７５の処理は本発明におけるプログラム実行手段およびプログラム実行手順である。
【０１０３】
また、フラッシュＲＯＭ１８は本発明における第１不揮発性メモリ、フラッシュＲＯＭ１９は本発明における第２不揮発性メモリ、Ｓ５３０の処理は本発明における書換先通知手段、Ｓ６１０の処理は本発明における第２プログラム切替手段、Ｓ５８０の処理は本発明における第１プログラム切替手段である。
【０１０４】
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
（変形例１）
例えば上記実施形態では、マイコン２が２個のＣＰＵ１１，１２を備えるものを示したが、３個以上のＣＰＵを備えるようにしてもよい。
【０１０５】
（変形例２）
また上記実施形態では、ＥＣＵ１の制御対象が車両のエンジンであるものを示したが、これに限定されるものではなく、例えば自動変速機であってもよい。
【０１０６】
（変形例３）
また上記実施形態では、フラッシュＲＯＭ１３に制御プログラムを記憶するものを示したが、制御プログラムの記憶媒体としてはこれに限定されるものではなく、例えばＥＥＰＲＯＭのように記憶内容の書き換えが可能な不揮発性メモリであればよい。
【０１０７】
（変形例４）
また上記第２実施形態では、フラッシュＲＯＭ１９に書き込むプログラムを送信した後に、フラッシュＲＯＭ１８に書き込むプログラムを送信するものを示した。しかし、フラッシュＲＯＭ１８に書き込むプログラムを送信した後に、フラッシュＲＯＭ１９に書き込むプログラムを送信するようにしてもよい。
【０１０８】
また、上記実施形態における１つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を１つの構成要素に統合させたりしてもよい。また、上記実施形態の構成の少なくとも一部を、同様の機能を有する公知の構成に置き換えてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加または置換してもよい。なお、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【符号の説明】
【０１０９】
１…ＥＣＵ、２…マイコン、１１，１２…ＣＰＵ、１３，１８，１９…フラッシュＲＯＭ、１４…ＲＡＭ、２１，２２…内蔵ＲＡＭ、３１…受信バッファ
【図１】
0006421635.tif 000002
【図２】
0006421635.tif 000003
【図３】
0006421635.tif 000004
【図４】
0006421635.tif 000005
【図５】
0006421635.tif 000006
【図６】
0006421635.tif 000007
【図７】
0006421635.tif 000008
【図８】
0006421635.tif 000009
【図９】
0006421635.tif 000010
【図１０】
0006421635.tif 000011
【図１１】
0006421635.tif 000012
【図１２】
0006421635.tif 000013