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