(57)【要約】【課題】制御プログラムの書き換えに要する時間を短縮する【解決手段】ＥＣＵ１では、まず、フラッシュＲＯＭ３に記憶された制御プログラムの内容を書き換えるための書換データを外部から受信する受信処理を実行する。そして、受信処理により受信した書換データをフラッシュＲＯＭ３に書き込むことにより、フラッシュＲＯＭ３に記憶された制御プログラムの内容を書き換える書換処理を実行する。また、受信処理が実行されていない状態または受信処理において書換データの受信を待っている状態であることと、書換処理が実行されていない状態または書換処理において不揮発性メモリへの書換データの書き込み終了を待っている状態であることの両方が成り立っている場合に、不揮発性メモリに書き込まれる書換データが適正なものであるか否かを検証する検証処理を実行する。【選択図】図１
2014232437.tif 000002
【特許請求の範囲】
【請求項１】
記憶内容の書き換えが可能であり、所定の制御対象を制御するための制御プログラムを記憶する不揮発性メモリ（３）と、
前記不揮発性メモリに記憶された前記制御プログラムの内容を書き換えるためのデータである書換データを外部から受信する受信処理を実行する受信処理実行手段（Ｓ２３０）と、
前記受信処理により受信した前記書換データを前記不揮発性メモリに書き込むことにより、前記不揮発性メモリに記憶された前記制御プログラムの内容を書き換える書換処理を実行する書換処理実行手段（Ｓ３２０）と、
前記受信処理において前記書換データの受信を待っている状態であるか否か、および前記書換処理において前記不揮発性メモリへの前記書換データの書き込み終了を待っている状態であるか否かの少なくとも一方を条件として含むように予め設定された検証実行条件が成立した場合に、前記不揮発性メモリに書き込まれる前記書換データが適正なものであるか否かを検証する検証処理を実行する検証処理実行手段（Ｓ４６０，Ｓ５６０，Ｓ６４０）とを備える
ことを特徴とする電子制御装置（１）。
【請求項２】
前記検証処理実行手段（Ｓ４６０，Ｓ５６０）は、
前記受信処理が実行されていない状態または前記受信処理において前記書換データの受信を待っている状態であることを第１判断状態とし、前記書換処理が実行されていない状態または前記書換処理において前記不揮発性メモリへの前記書換データの書き込み終了を待っている状態であることを第２判断状態とし、前記第１判断状態であり且つ前記第２判断状態であることを第１検証実行条件として、前記第１検証実行条件を前記検証実行条件として採用する
ことを特徴とする請求項１に記載の電子制御装置。
【請求項３】
前記書換処理により前記不揮発性メモリに書き込む前記書換データを、前記不揮発性メモリに書き込む前に一時的に記憶する書換バッファ（１２）を備え、
前記検証処理実行手段は、前記検証実行条件として前記第１検証実行条件を採用し、前記書換バッファに記憶されている前記書換データに対して前記検証処理を実行する
ことを特徴とする請求項２に記載の電子制御装置。
【請求項４】
前記不揮発性メモリに書き込まれた前記書換データを一時的に記憶する検証バッファ（１３）を備え、
前記検証処理実行手段は、前記検証バッファに記憶されている前記書換データに対して前記検証処理を実行する
ことを特徴とする請求項２に記載の電子制御装置。
【請求項５】
前記検証処理実行手段（Ｓ６４０）は、
前記受信処理が実行されていない状態または前記受信処理において前記書換データの受信を待っている状態であることを第１判断状態とし、前記書換処理が実行されていない状態であることを第３判断状態とし、前記第１判断状態であり且つ前記第３判断状態であることを第２検証実行条件として、前記第２検証実行条件を前記検証実行条件として採用する
ことを特徴とする請求項１に記載の電子制御装置。
【請求項６】
前記検証処理実行手段は、前記不揮発性メモリに書き込まれた前記書換データに対して前記検証処理を実行する
ことを特徴とする請求項５に記載の電子制御装置。
【請求項７】
前記書換バッファは、リングバッファ構造で形成されている
ことを特徴とする請求項３に記載の電子制御装置。
【請求項８】
前記検証バッファは、リングバッファ構造で形成されている
ことを特徴とする請求項４に記載の電子制御装置。
【請求項９】
記憶内容の書き換えが可能であり所定の制御対象を制御するための制御プログラムを記憶する不揮発性メモリに記憶された前記制御プログラムの内容を書き換えるためのデータである書換データを受信する受信処理を実行する受信処理実行手順（Ｓ２３０）と、
前記受信処理により受信した前記書換データを前記不揮発性メモリに書き込むことにより、前記不揮発性メモリに記憶された前記制御プログラムの内容を書き換える書換処理を実行する書換処理実行手順（Ｓ３２０）と、
前記受信処理において前記書換データの受信を待っている状態であるか否か、および前記書換処理において前記不揮発性メモリへの前記書換データの書き込み終了を待っている状態であるか否かの少なくとも一方を条件として含むように予め設定された検証実行条件が成立した場合に、前記不揮発性メモリに書き込まれる前記書換データが適正なものであるか否かを検証する検証処理を実行する検証処理実行手順（Ｓ４６０，Ｓ５６０，Ｓ６４０）とを備える
ことを特徴とするメモリ書換方法。
【請求項１０】
前記検証処理実行手順（Ｓ４６０，Ｓ５６０）は、
前記受信処理が実行されていない状態または前記受信処理において前記書換データの受信を待っている状態であることを第１判断状態とし、前記書換処理が実行されていない状態または前記書換処理において前記不揮発性メモリへの前記書換データの書き込み終了を待っている状態であることを第２判断状態とし、前記第１判断状態であり且つ前記第２判断状態であることを第１検証実行条件として、前記第１検証実行条件を前記検証実行条件として採用する
ことを特徴とする請求項９に記載のメモリ書換方法。
【請求項１１】
前記検証処理実行手順（Ｓ６４０）は、
前記受信処理が実行されていない状態または前記受信処理において前記書換データの受信を待っている状態であることを第１判断状態とし、前記書換処理が実行されていない状態であることを第３判断状態とし、前記第１判断状態であり且つ前記第３判断状態であることを第２検証実行条件として、前記第２検証実行条件を前記検証実行条件として採用する
ことを特徴とする請求項９に記載のメモリ書換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定の制御対象の制御に用いる制御プログラムを書き換え可能な電子制御装置およびメモリ書換方法に関する。
【背景技術】
【０００２】
従来、記憶内容の書き換えが可能な不揮発性メモリに制御プログラムを記憶する電子制御装置において、制御プログラムの書き換えに要する時間を短縮するために、書換データを外部から受信する受信処理と、受信した書換データを不揮発性メモリに書き込むことにより制御プログラムを書き換える書換処理とを並行に実行するものが知られている（例えば、特許文献１を参照）。
【０００３】
このように制御プログラムの書き換えが可能な電子制御装置では、受信した書換データと不揮発性メモリに書き込まれたデータとの一致を確認するベリファイ（Ｖｅｒｉｆｉｃａｔｉｏｎ）が実行される。しかし、このベリファイでは、受信した書換データが電子制御装置にとって適切なものであるか否かを判断できない。このため、例えば、受信した書換データが第三者によって不正に書き換えられたものであっても、ベリファイにおいて上記の一致が確認されると、不正な書換データが不揮発性メモリに書き込まれてしまう。
【０００４】
このような問題を解決するための手法として、書き換えたデータの妥当性を確認するバリデート（Ｖａｌｉｄａｔｉｏｎ）が知られている。バリデートでは、例えば、検証すべきデータについて演算を実行したり外部機器との認証を実行したりして、電子制御装置にとって適した書換データであるか否かを判断する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−２０３８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、バリデートを実行することにより、制御プログラムの書き換えに要する時間がバリデートの実行分長くなるという問題があった。
本発明は、こうした問題に鑑みてなされたものであり、制御プログラムの書き換えに要する時間を短縮することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するためになされた第１発明の電子制御装置は、不揮発性メモリと、受信処理実行手段と、書換処理実行手段と、検証処理実行手段とを備える。
不揮発性メモリは、記憶内容の書き換えが可能であり、所定の制御対象を制御するための制御プログラムを記憶する。
【０００８】
そして第１発明の電子制御装置では、まず受信処理実行手段が、不揮発性メモリに記憶された制御プログラムの内容を書き換えるためのデータである書換データを外部から受信する受信処理を実行する。そして書換処理実行手段が、受信処理により受信した書換データを不揮発性メモリに書き込むことにより、不揮発性メモリに記憶された制御プログラムの内容を書き換える書換処理を実行する。また検証処理実行手段が、受信処理において書換データの受信を待っている状態であるか否か、および書換処理において不揮発性メモリへの書換データの書き込み終了を待っている状態であるか否かの少なくとも一方を条件として含むように予め設定された検証実行条件が成立した場合に、不揮発性メモリに書き込まれる書換データが適正なものであるか否かを検証する検証処理を実行する。
【０００９】
このように構成された電子制御装置によれば、受信処理において書換データの受信を待っている状態、または、書換処理において不揮発性メモリへの書換データの書き込み終了を待っている状態である場合に、検証処理を実行することができる。このため、受信処理の実行中であっても、書換データの受信を待っている状態であれば、検証処理を実行することができるとともに、書換処理の実行中であっても、不揮発性メモリへの書換データの書き込み終了を待っている状態であれば、検証処理を実行することができる。すなわち、制御プログラムを書き換えるために実行される受信処理または書換処理と並行して検証処理を実行することができる。
【００１０】
これにより、書き換え対象となる制御プログラム全体の書き込みが終了する前から検証処理を実行することができるため（すなわち、制御プログラム全体の書き込みが終了した後に検証処理を実行する必要がなくなるため）、制御プログラムの書き換えを開始してから検証処理が終了するまでの時間、すなわち制御プログラムの書き換えに要する時間を短縮することができる。
【００１１】
また第２発明のメモリ書換方法は、受信処理実行手順と、書換処理実行手順と、検証処理実行手順とを備える。
そして第２発明のメモリ書換方法では、まず受信処理実行手順が、記憶内容の書き換えが可能であり所定の制御対象を制御するための制御プログラムを記憶する不揮発性メモリに記憶された制御プログラムの内容を書き換えるためのデータである書換データを受信する受信処理を実行する。そして書換処理実行手順が、受信処理により受信した書換データを不揮発性メモリに書き込むことにより、不揮発性メモリに記憶された制御プログラムの内容を書き換える書換処理を実行する。また検証処理実行手順が、受信処理において書換データの受信を待っている状態であるか否か、および書換処理において不揮発性メモリへの書換データの書き込み終了を待っている状態であるか否かの少なくとも一方を条件として含むように予め設定された検証実行条件が成立した場合に、不揮発性メモリに書き込まれる書換データが適正なものであるか否かを検証する検証処理を実行する。
【００１２】
第２発明のメモリ書換方法は、第１発明の電子制御装置にて実行される方法であり、当該方法を実行することで、第１発明の電子制御装置と同様の効果を得ることができる。
【図面の簡単な説明】
【００１３】
【図１】第１実施形態のＥＣＵ１の構成を示すブロック図である。
【図２】受信バッファ１１と書換バッファ１２の構成を示す図である。
【図３】制御プログラム実行処理を示すフローチャートである。
【図４】書換プログラム実行処理を示すフローチャートである。
【図５】受信格納処理を示すフローチャートである。
【図６】第１実施形態の書換実行処理を示すフローチャートである。
【図７】第１実施形態の検証実行処理を示すフローチャートである。
【図８】第１実施形態の受信処理と書換処理と検証処理の動作を示すタイミングチャートである。
【図９】第２実施形態のＥＣＵ１の構成を示すブロック図である。
【図１０】フラッシュＲＯＭ３と検証バッファ１３の構成を示す図である。
【図１１】第２実施形態の書換実行処理を示すフローチャートである。
【図１２】第２実施形態の検証実行処理を示すフローチャートである。
【図１３】第２実施形態の受信処理と書換処理と検証処理の動作を示すタイミングチャートである。
【図１４】書込起動前後の受信処理と書換処理と検証処理の動作を示すタイミングチャートである。
【図１５】ＲＯＭ用検証ポインタＰＴ２１を説明する図である。
【図１６】第３実施形態の書換実行処理を示すフローチャートである。
【図１７】第３実施形態の検証実行処理を示すフローチャートである。
【図１８】第３実施形態の受信処理と書換処理と検証処理の動作を示すタイミングチャートである。
【図１９】別の実施形態の受信処理と書換処理と検証処理の動作を示すタイミングチャートである。
【発明を実施するための形態】
【００１４】
（第１実施形態）
以下に本発明の第１実施形態を図面とともに説明する。
本実施形態の電子制御装置（Electronic Control Unit）１（以下、ＥＣＵ１という）は、車両に搭載され、図１に示すように、車両のエンジンＥＧの制御を行う。
【００１５】
ＥＣＵ１は、ＣＰＵ（中央演算装置）２、フラッシュＲＯＭ３、ＲＡＭ４、入出力回路５および通信回路６と、これらを相互に接続するバス７とを備える。
フラッシュＲＯＭ３は、データ書き換え可能な不揮発性メモリであり、ＣＰＵ２が実行するプログラムと、プログラムの実行時に参照されるデータを記憶する。
【００１６】
ＲＡＭ４は、揮発性メモリであり、ＣＰＵ２の演算結果等を一時的に記憶する。またＲＡＭ４には、受信バッファ１１と書換バッファ１２が設けられている。受信バッファ１１は、フラッシュＲＯＭ３に記憶されるプログラムの書き換え等を行うためのプログラム書換装置ＲＰから受信したデータを一時的に記憶するための記憶領域である。書換バッファ１２は、フラッシュＲＯＭ３に書き込むデータを一時的に記憶するための記憶領域である。
【００１７】
ＣＰＵ２は、エンジンＥＧを制御するための情報として、吸気管圧力センサ、エンジン回転数センサ、エンジン水温センサ、排気系の酸素センサ（空燃比センサ）、車速センサおよびイグニッションスイッチ等から各種信号を入出力回路５を介して入力する。なお、図１に示すエンジンＥＧは、エンジン本体を含め、吸気系、排気系等、エンジンに関連する系を総称して示すものであって、本実施形態では詳細な説明を省略する。
【００１８】
そしてＣＰＵ２は、フラッシュＲＯＭ３に記憶されたプログラムに基づいて各種処理を実行する。またＣＰＵ２は、入出力回路５を介して入力される各種信号に基づいて制御演算を行い、その演算結果に基づき、点火装置およびインジェクタ等の電気負荷へ入出力回路５を介して駆動信号を出力することにより、エンジンＥＧの制御に関係する電気負荷を制御する。例えばＣＰＵ２は、インジェクタの開弁タイミングおよび開弁時間を演算し、その演算結果に基づいて、インジェクタを駆動するための駆動信号を出力することにより、エンジンＥＧへの燃料噴射を制御する。
【００１９】
また通信回路６は、例えばＣＡＮ（Controller  Area  Network）通信プロトコルに従い通信バスＢＳを介して他のＥＣＵ（不図示）との間でメッセージを交換することにより、制御対象機器の制御に必要なデータを送受信する。また通信回路６には、フラッシュＲＯＭ３に記憶されるプログラムの書き換え等を行うためのプログラム書換装置ＲＰが、通信バスＢＳを介して接続される。このプログラム書換装置ＲＰは、例えば、コネクタ（不図示）を介して着脱可能になっており、プログラムの書き換え時等にＥＣＵ１に接続される。なおプログラム書換装置ＲＰは、マイコンおよび表示装置を備えたハンディタイプの装置または小型のパソコン等である。
【００２０】
また、ＲＡＭ４の受信バッファ１１は、図２に示すように、リングバッファ構造で形成されている。このため、プログラム書換装置ＲＰから受信した受信データは、受信した順に、受信バッファ１１の先頭アドレスから順次書き込まれる。そして、受信バッファ１１の最後尾アドレスに受信データが書き込まれると、次の受信データは先頭アドレスに書き込まれる（矢印ＡＬ１を参照）。
【００２１】
また、受信データを受信バッファ１１に書き込むときに、この受信データが書き込まれる記憶領域のアドレスを指示する受信用書込ポインタＰＴ１が設けられている。また、受信バッファ１１に格納されているデータを読み出して、書換バッファ１２に書き込むときに、読み出すデータが格納されている記憶領域のアドレスを指示する受信用読出ポインタＰＴ２が設けられている。図２では、受信バッファ１１からデータＲＤ１を読み出して書換バッファ１２に書き込む（矢印ＡＬ２を参照）ことにより、受信用読出ポインタＰＴ２の指示値がデータＲＤ１のデータ量分変化したことを示している（矢印ＡＬ３を参照）。
【００２２】
また、ＲＡＭ４の書換バッファ１２はリングバッファ構造で形成されている。このため、受信バッファ１１から読み出された読出データは、読み出された順に、書換バッファ１２の先頭アドレスから順次書き込まれる。そして、書換バッファ１２の最後尾アドレスに読出データが書き込まれると、次の読出データは先頭アドレスに書き込まれる（矢印ＡＬ４を参照）。
【００２３】
また、読出データを書換バッファ１２に書き込むときに、この読出データが書き込まれる記憶領域のアドレスを指示する書換用書込ポインタＰＴ３が設けられている。図２では、受信バッファ１１からデータＲＤ１を読み出して書換バッファ１２に書き込む（矢印ＡＬ２を参照）ことにより、書換用書込ポインタＰＴ３の指示値がデータＲＤ１のデータ量分変化したことを示している（矢印ＡＬ５を参照）。
【００２４】
また、書換バッファ１２に格納されているデータをフラッシュＲＯＭ３に書き込むときに、フラッシュＲＯＭ３に書き込むために書換バッファ１２から読み出すデータが格納されている記憶領域のアドレスを指示する書換用読出ポインタＰＴ４が設けられている。
【００２５】
また、書換バッファ１２に格納されているデータを検証（バリデート）するときに、検証するデータが格納されている記憶領域のアドレスを指示する書換用検証ポインタＰＴ５が設けられている。
【００２６】
このように構成されたＥＣＵ１において、ＣＰＵ２は、後述する制御プログラム実行処理、書換プログラム実行処理、受信格納処理、書換実行処理および検証実行処理を実行する。
【００２７】
まず、ＣＰＵ２が実行する制御プログラム実行処理の手順を説明する。制御プログラム実行処理は、ＥＣＵ１が起動した直後に１回のみ実行される処理である。
この制御プログラム実行処理が実行されると、ＣＰＵ２は、図３に示すように、まずＳ１０にて、フラッシュＲＯＭ３に制御プログラムが既に書き込まれているか否かを判断する。ここで、制御プログラムが書き込まれていない場合には（Ｓ１０：ＮＯ）、Ｓ１０の処理を繰り返すことにより、フラッシュＲＯＭ３に制御プログラムが書き込まれるまで待機する。なお、この制御プログラムは、エンジンＥＧを制御するためのプログラムである。
【００２８】
一方、制御プログラムが既に書き込まれている場合には（Ｓ１０：ＹＥＳ）、Ｓ２０にて、検証（バリデート（ｖａｌｉｄａｔｅ））の結果に基づいて、フラッシュＲＯＭ３に書き込まれている制御プログラムが適正なものであるか否かを判断する。ここで、書き込まれている制御プログラムが適正なものでない場合には（Ｓ２０：ＮＯ）、Ｓ１０に移行し、上述の処理を繰り返す。
【００２９】
一方、書き込まれている制御プログラムが適正なものである場合には（Ｓ２０：ＹＥＳ）、Ｓ３０にて、フラッシュＲＯＭ３に書き込まれている制御プログラムの実行を開始し、制御プログラム実行処理を終了する。
【００３０】
次に、ＣＰＵ２が実行する書換プログラム実行処理の手順を説明する。書換プログラム実行処理は、ＥＣＵ１が起動した直後に１回のみ実行される処理である。
この書換プログラム実行処理が実行されると、ＣＰＵ２は、図４に示すように、まずＳ１１０にて、通信回路６を介してプログラム書換装置ＲＰからプログラム書換要求を受信したか否かを判断する。ここで、プログラム書換要求を受信していない場合には（Ｓ１１０：ＮＯ）、Ｓ１１０の処理を繰り返すことにより、プログラム書換要求を受信するまで待機する。
【００３１】
一方、プログラム書換要求を受信した場合には（Ｓ１１０：ＹＥＳ）、Ｓ１２０にて、制御プログラムを書き換えるための書換プログラムを通信回路６を介してプログラム書換装置ＲＰから取得する。そしてＳ１３０にて、取得した書換プログラムの実行を開始し、書換プログラム実行処理を終了する。
【００３２】
次に、ＣＰＵ２が実行する受信格納処理の手順を説明する。受信格納処理は、書換プログラム内に記述されている処理であり、書換プログラムの実行が開始されると処理を開始し、制御プログラムの書き換えが終了すると、処理を終了する。
【００３３】
この受信格納処理が実行されると、ＣＰＵ２は、図５に示すように、まずＳ２１０にて、書換処理（Ｓ３２０の処理）を実行中であるか否かを判断する。ここで、制御プログラムの書き換えを実行していない場合には（Ｓ２１０：ＮＯ）、Ｓ２３０に移行する。一方、書換処理を実行中である場合には（Ｓ２１０：ＹＥＳ）、Ｓ２２０にて、データ書き込みの終了を待っている状態（以下、書込終了待ち状態という）であるか否かを判断する。なお書込終了待ち状態とは、ＣＰＵ２がフラッシュＲＯＭ３に対して書き込みの指示を送信し、その後にフラッシュＲＯＭ３からの書き込み終了の通知をＣＰＵ２が待っている状態をいう。
【００３４】
ここで、書込終了待ち状態でない場合には（Ｓ２２０：ＮＯ）、Ｓ２１０に移行し、上述の処理を繰り返す。一方、書込終了待ち状態である場合には（Ｓ２２０：ＹＥＳ）、Ｓ２３０に移行する。
【００３５】
そしてＳ２３０に移行すると、今回のプログラム書換要求で書き換えられる新しい制御プログラムを示すデータをプログラム書換装置ＲＰから通信回路６を介して受信する処理（以下、受信処理という）を実行する。
【００３６】
そしてＳ２４０にて、Ｓ２３０での受信処理により、プログラム書換装置ＲＰから新たにデータを受信したか否かを判断する。ここで、新たにデータを受信していない場合には（Ｓ２４０：ＮＯ）、Ｓ２１０に移行し、上述の処理を繰り返す。
【００３７】
一方、新たにデータを受信した場合には（Ｓ２４０：ＹＥＳ）、Ｓ２５０にて、受信したデータを、受信して順に受信バッファ１１に格納する。さらにＳ２６０にて、受信用書込ポインタＰＴ１を更新する。具体的には、Ｓ２５０で受信バッファ１１に格納したデータ量分、受信用書込ポインタＰＴ１の指示値を変化させる。
【００３８】
そしてＳ２７０にて、受信バッファ１１に格納されているデータのうち書換バッファ１２に格納されていないものを、受信バッファ１１から読み出して、書換バッファ１２に格納する。さらにＳ２８０にて、受信用読出ポインタＰＴ２と書換用書込ポインタＰＴ３を更新する。具体的には、Ｓ２７０で書換バッファ１２に格納したデータ量分、受信用読出ポインタＰＴ２と書換用書込ポインタＰＴ３の指示値を変化させる。
【００３９】
その後Ｓ２９０にて、今回のプログラム書換要求で書き換えるべき制御プログラムに関する全ての書き換えが終了したか否かを判断する。ここで、全ての書き換えが終了していない場合には（Ｓ２９０：ＮＯ）、Ｓ２１０に移行し、上述の処理を繰り返す。一方、全ての書き換えが終了していない場合には（Ｓ２９０：ＮＯ）、受信格納処理を終了する。
【００４０】
次に、ＣＰＵ２が実行する書換実行処理の手順を説明する。書換実行処理は、書換プログラム内に記述されている処理であり、書換プログラムの実行が開始されると処理を開始し、制御プログラムの書き換えが終了すると、処理を終了する。
【００４１】
この書換実行処理が実行されると、ＣＰＵ２は、図６に示すように、まずＳ３１０にて、書換バッファ１２に格納されているデータのうちフラッシュＲＯＭ３に書き込まれていないものがあるか否かを判断する。具体的には、書換用書込ポインタＰＴ３の指示値と書換用読出ポインタＰＴ４の指示値が互いに一致してない場合に、フラッシュＲＯＭ３に書き込まれていないデータがあると判断する。
【００４２】
ここで、フラッシュＲＯＭ３に書き込まれていないデータ（以下、未書込データという）がない場合には（Ｓ３１０：ＮＯ）、Ｓ３１０の処理を繰り返すことにより、未書込データが書換バッファ１２に格納されるまで待機する。
【００４３】
一方、未書込データがある場合には（Ｓ３１０：ＹＥＳ）、Ｓ３２０にて、未書込データを書換バッファ１２から読み出し、読み出したデータをフラッシュＲＯＭ３に書き込むことにより、制御プログラムを書き換える書換処理を実行する。
【００４４】
その後Ｓ３３０にて、Ｓ３２０で書き込んだデータのベリファイ（ｖｅｒｉｆｙ）を実行する。具体的には、書換バッファ１２から読み出したデータと、フラッシュＲＯＭ３に書き込まれたデータが互いに一致しているか否かを確認する。
【００４５】
そしてＳ３４０にて、Ｓ３３０でのベリファイの結果に基づいて、書換バッファ１２から読み出したデータと、フラッシュＲＯＭ３に書き込まれたデータが互いに一致しているかを判断する。ここで、両データが一致していない場合には（Ｓ３４０：ＮＯ）、Ｓ３２０に移行し、上述の処理を繰り返す。
【００４６】
一方、両データが一致している場合には（Ｓ３４０：ＹＥＳ）、Ｓ３５０にて、書換用読出ポインタＰＴ４を更新する。具体的には、Ｓ３２０で書換バッファ１２から読み出したデータ量分、書換用読出ポインタＰＴ４の指示値を変化させる。
【００４７】
その後Ｓ３６０にて、今回のプログラム書換要求で書き換えるべき制御プログラムに関する全ての書き換えが終了したか否かを判断する。ここで、全ての書き換えが終了していない場合には（Ｓ３６０：ＮＯ）、Ｓ３１０に移行し、上述の処理を繰り返す。一方、全ての書き換えが終了した場合には（Ｓ３６０：ＹＥＳ）、書換実行処理を終了する。
【００４８】
次に、ＣＰＵ２が実行する検証実行処理の手順を説明する。検証実行処理は、書換プログラム内に記述されている処理であり、書換プログラムの実行が開始されると処理を開始し、制御プログラムの書き換えが終了すると、処理を終了する。
【００４９】
この検証実行処理が実行されると、ＣＰＵ２は、図７に示すように、まずＳ４１０にて、書換処理（Ｓ３２０の処理）を実行中であるか否かを判断する。ここで、書換処理を実行していない場合には（Ｓ４１０：ＮＯ）、Ｓ４３０に移行する。一方、書換処理を実行中である場合には（Ｓ４１０：ＹＥＳ）、Ｓ４２０にて、書込終了待ち状態であるか否かを判断する。
【００５０】
ここで、書込終了待ち状態でない場合には（Ｓ４２０：ＮＯ）、Ｓ４１０に移行し、上述の処理を繰り返す。一方、書込終了待ち状態である場合には（Ｓ４２０：ＹＥＳ）、Ｓ４３０に移行する。
【００５１】
そしてＳ４３０に移行すると、受信処理（Ｓ２３０の処理）を実行中であるか否かを判断する。ここで、受信処理を実行していない場合には（Ｓ４３０：ＮＯ）、Ｓ４５０に移行する。一方、受信処理を実行中である場合には（Ｓ４３０：ＹＥＳ）、Ｓ４４０にて、プログラム書換装置ＲＰからのデータの受信を待っている状態（以下、受信待ち状態という）であるか否かを判断する。なお受信待ち状態とは、例えば、受信処理の実行中において、メッセージの受信を完了してから次のメッセージの受信が開始されるまでＣＰＵ２が待っている状態をいう。
【００５２】
ここで、受信待ち状態でない場合には（Ｓ４４０：ＮＯ）、Ｓ４１０に移行し、上述の処理を繰り返す。一方、受信待ち状態である場合には（Ｓ４４０：ＹＥＳ）、Ｓ４５０に移行する。
【００５３】
そしてＳ４５０に移行すると、書換バッファ１２に格納されているデータのうち検証（バリデート）が行われていないものがあるか否かを判断する。具体的には、書換用書込ポインタＰＴ３の指示値と書換用検証ポインタＰＴ５の指示値が互いに一致してない場合に、検証（バリデート）が行われていないデータがあると判断する。
【００５４】
ここで、検証が行われていないデータ（以下、未検証データという）がない場合には（Ｓ４５０：ＮＯ）、Ｓ４１０に移行し、上述の処理を繰り返す。
一方、未検証データがある場合には（Ｓ４５０：ＹＥＳ）、Ｓ４６０にて、検証処理を実行する。具体的には、まず、書換バッファ１２に格納されているデータのうち、書換用検証ポインタＰＴ５が指示するアドレスから予め設定された検証単位分のアドレスまでのデータを読み出す。そして、読み出したデータについて、例えばサム計算またはＣＲＣ計算などの認証用演算を実行し、この演算値と、読み出したデータに対してプログラム書換装置ＲＰ側で予め付与された検証用データの値とを比較し、両者が一致している場合に、読み出したデータが適正であると判断するとともに、両者が不一致である場合に、読み出したデータが不適正であると判断する。
【００５５】
そしてＳ４７０にて、書換用検証ポインタＰＴ５を更新する。具体的には、Ｓ４６０で検証（バリデート）を実行したデータ量分、書換用検証ポインタＰＴ５の指示値を変化させる。
【００５６】
その後Ｓ４８０にて、今回のプログラム書換要求で書き換えるべき制御プログラムに関する全ての検証（バリデート）が終了したか否かを判断する。ここで、全ての検証が終了していない場合には（Ｓ４８０：ＮＯ）、Ｓ４１０に移行し、上述の処理を繰り返す。一方、全ての検証が終了した場合には（Ｓ４８０：ＹＥＳ）、検証実行処理を終了する。
【００５７】
このように構成されたＥＣＵ１では、まず、フラッシュＲＯＭ３に記憶された制御プログラムの内容を書き換えるための書換データを外部から受信する受信処理を実行する（Ｓ２３０）。そして、受信処理により受信した書換データをフラッシュＲＯＭ３に書き込むことにより、フラッシュＲＯＭ３に記憶された制御プログラムの内容を書き換える書換処理を実行する（Ｓ３２０）。また、受信処理が実行されていない状態（Ｓ４３０：ＮＯ）または受信処理において書換データの受信を待っている状態（Ｓ４４０：ＹＥＳ）であることと、書換処理が実行されていない状態（Ｓ４１０：ＮＯ）または書換処理において不揮発性メモリへの書換データの書き込み終了を待っている状態（Ｓ４２０：ＹＥＳ）であることの両方が成り立っている場合に、不揮発性メモリに書き込まれる書換データが適正なものであるか否かを検証する検証処理を実行する（Ｓ４６０）。
【００５８】
このため、受信処理の実行中であっても、書換データの受信を待っている状態であれば、検証処理を実行することができるとともに、書換処理の実行中であっても、不揮発性メモリへの書換データの書き込み終了を待っている状態であれば、検証処理を実行することができる。すなわち、例えば図８に示すように、制御プログラムを書き換えるために実行される受信処理または書換処理と並行して検証処理を実行することができる。
【００５９】
図８では、受信処理ＲＰ０１，ＲＰ０２，ＲＰ０３，・・・・，ＲＰ１４が順次実行されており、まず受信処理ＲＰ０１の実行中に、書換処理ＷＰ０１と検証処理ＶＰ０１が開始される（時刻ｔ０１を参照）。書換処理ＷＰ０１は、受信処理ＲＰ０１で受信したデータを書き込む。検証処理ＶＰ０１は、書換処理ＷＰ０１で書き込むデータを検証する。これにより、受信処理ＲＰ０１，ＲＰ０２，ＲＰ０３と書換処理ＷＰ０１と検証処理ＶＰ０１とが並行に実行される。
【００６０】
また、受信処理ＲＰ０４の開始前に、書換処理ＷＰ０２が開始され（時刻ｔ０２を参照）、その後に検証処理ＶＰ０２が開始される。書換処理ＷＰ０２は、受信処理ＲＰ０２，ＲＰ０３で受信したデータを書き込む。検証処理ＶＰ０２は、書換処理ＷＰ０２で書き込むデータを検証する。これにより、受信処理ＲＰ０４，ＲＰ０５，ＲＰ０６と書換処理ＷＰ０２と検証処理ＶＰ０２とが並行に実行される。
【００６１】
また、受信処理ＲＰ０７の開始前に、書換処理ＷＰ０３が開始され（時刻ｔ０３を参照）、その後に検証処理ＶＰ０３が開始される。書換処理ＷＰ０３は、受信処理ＲＰ０４，ＲＰ０５，ＲＰ０６で受信したデータを書き込む。検証処理ＶＰ０３は、書換処理ＷＰ０３で書き込むデータを検証する。これにより、受信処理ＲＰ０７，ＲＰ０８，ＲＰ０９，ＲＰ１０と書換処理ＷＰ０３と検証処理ＶＰ０３とが並行に実行される。
【００６２】
また、受信処理ＲＰ１１の開始前に、書換処理ＷＰ０４が開始され（時刻ｔ０４を参照）、その後に検証処理ＶＰ０４が開始される。書換処理ＷＰ０４は、受信処理ＲＰ０７，ＲＰ０８，ＲＰ０９，ＲＰ１０で受信したデータを書き込む。検証処理ＶＰ０４は、書換処理ＷＰ０４で書き込むデータを検証する。これにより、受信処理ＲＰ１１，ＲＰ１２，ＲＰ１３，ＲＰ１４と書換処理ＷＰ０４と検証処理ＶＰ０４とが並行に実行される。
【００６３】
これにより、書き換え対象となる制御プログラム全体の書き込みが終了する前から検証処理を実行することができるため（すなわち、制御プログラム全体の書き込みが終了した後に検証処理を実行する必要がなくなるため）、制御プログラムの書き換えを開始してから検証処理が終了するまでの時間、すなわち制御プログラムの書き換えに要する時間を短縮することができる。
【００６４】
またＥＣＵ１は、書換処理によりフラッシュＲＯＭ３に書き込む書換データを、フラッシュＲＯＭ３に書き込む前に一時的に記憶する書換バッファ１２を備え、書換バッファ１２に記憶されている書換データに対して検証処理を実行する。
【００６５】
これにより、フラッシュＲＯＭ３に書き込む書換データの検証を、フラッシュＲＯＭ３からデータを読み出すことなく行うことができる。なお、書換処理の実行中にはフラッシュＲＯＭ３からデータを読み出すことができない。しかし、フラッシュＲＯＭ３ではなく書換バッファ１２に記憶されている書換データに対して検証処理を実行することができるため、書換処理の実行中であっても、不揮発性メモリへの書換データの書き込み終了を待っている状態であれば、検証処理を実行することができる。
【００６６】
また書換バッファ１２は、リングバッファ構造で形成されている。すなわち、書換バッファ１２の最後尾アドレスに書換データが書き込まれると、次の書換データは書換バッファ１２の先頭アドレスに書き込まれる。このため、書換バッファ１２に書き込まれている書換データに対する検証が全て終了していない状態で、新たに書換バッファ１２に書き込まれる場合には、未検証の書換データを先頭アドレスに移動させる必要がなくなる。一方、書換バッファ１２がリングバッファ構造でない場合には、最後尾アドレスに書換データが書き込まれるとデータをそれ以上書き込めなくなるため、データを書き込む領域を確保するために、未検証の書換データを先頭アドレスに移動させる必要がある。
【００６７】
以上説明した実施形態において、フラッシュＲＯＭ３は本発明における不揮発性メモリ、Ｓ２３０の処理は本発明における受信処理実行手段および受信処理実行手順、Ｓ３２０の処理は本発明における書換処理実行手段および書換処理実行手順、Ｓ４６０の処理は本発明における検証処理実行手段および検証処理実行手順である。
【００６８】
（第２実施形態）
以下に本発明の第２実施形態を図面とともに説明する。なお第２実施形態では、第１実施形態と異なる部分を説明する。
【００６９】
第２実施形態のＥＣＵ１は、ＥＣＵ１の構成と書換実行処理と検証処理が変更された点以外は第１実施形態と同じである。
まずＥＣＵ１の構成は、図９に示すように、ＲＡＭ４に検証バッファ１３が更に設けられている点以外は第１実施形態と同じである。
【００７０】
検証バッファ１３は、図１０に示すように、リングバッファ構造で形成されている。このため、フラッシュＲＯＭ３から読み出された読出データは、読み出された順に検証バッファ１３の先頭アドレスから順次書き込まれる。そして、検証バッファ１３の最後尾アドレスに読出データが書き込まれると、次の読出データは先頭アドレスに書き込まれる（矢印ＡＬ１１を参照）。
【００７１】
また、フラッシュＲＯＭ３に書き込まれているデータを読み出して検証バッファ１３に書き込むときに、読み出すデータが格納されている記憶領域のアドレスを指示するＲＯＭ用読出ポインタＰＴ１１が設けられている。図１１では、フラッシュＲＯＭ３からデータＲＤ１１を読み出して検証バッファ１３に書き込む（矢印ＡＬ１２を参照）ことにより、ＲＯＭ用読出ポインタＰＴ１１の指示値がデータＲＤ１１のデータ量分変化したことを示している（矢印ＡＬ１３を参照）。
【００７２】
また、データをフラッシュＲＯＭ３に書き込むときに、このデータが書き込まれる記憶領域のアドレスを指示するＲＯＭ用書込ポインタＰＴ１２が設けられている。
また、読出データを検証バッファ１３に書き込むときに、この読出データが書き込まれる記憶領域のアドレスを指示する検証用書込ポインタＰＴ１３が設けられている。図１０では、フラッシュＲＯＭ３からデータＲＤ１１を読み出して検証バッファ１３に書き込む（矢印ＡＬ１２を参照）ことにより、検証用書込ポインタＰＴ１３の指示値がデータＲＤ１のデータ量分変化したことを示している（矢印ＡＬ１４を参照）。
【００７３】
また、検証バッファ１３に格納されているデータを検証（バリデート）するときに、検証するデータが格納されている記憶領域のアドレスを指示する検証用検証ポインタＰＴ１４が設けられている。
【００７４】
次に、第２実施形態の書換実行処理を説明する。第２実施形態の書換実行処理は、図１１に示すように、Ｓ３０３とＳ３０６とＳ３４２とＳ３４５とＳ３５５の処理が追加された点と、Ｓ３５０の処理が省略された点以外は第１実施形態と同じである。
【００７５】
すなわち、この書換実行処理が実行されると、ＣＰＵ２は、まずＳ３０３にて、今回のプログラム書換要求で書き換えるべき制御プログラムとは別に既にフラッシュＲＯＭ３に書き込まれている制御プログラムのうち検証が行われていないデータを、フラッシュＲＯＭ３から読み出して、検証バッファ１３に格納する。
【００７６】
そしてＳ３０６にて、ＲＯＭ用読出ポインタＰＴ１１と検証用書込ポインタＰＴ１３と検証用検証ポインタＰＴ１４を更新する。具体的には、ＲＯＭ用読出ポインタＰＴ１１を、今回のプログラム書換要求で書き換えるべき制御プログラムが書き込まれる記憶領域の先頭アドレスに設定する。また検証用書込ポインタＰＴ１３を、Ｓ３０３で検証バッファ１３に格納されたデータの最後尾アドレスの次のアドレスに設定する。また検証用検証ポインタＰＴ１４を、Ｓ３０３で検証バッファ１３に格納されたデータの先頭アドレスに設定する。そしてＳ３０６の処理が終了すると、Ｓ３１０に移行する。
【００７７】
またＳ３４０にて、書換バッファ１２から読み出したデータと、フラッシュＲＯＭ３に書き込まれたデータが互いに一致している場合に（Ｓ３４０：ＹＥＳ）、Ｓ３４２にて、ＲＯＭ用書込ポインタＰＴ１２を更新する。具体的には、Ｓ３２０でフラッシュＲＯＭ３に書き込んだデータ量分、ＲＯＭ用書込ポインタＰＴ１２の指示値を変化させる。
【００７８】
そしてＳ３４５にて、フラッシュＲＯＭ３に書き込まれたデータのうち検証バッファ１３に格納されていないもの、すなわち、ＲＯＭ用読出ポインタＰＴ１１が示すアドレスと、ＲＯＭ用書込ポインタＰＴ１２が示すアドレスの間に書き込まれているデータを、フラッシュＲＯＭ３から読み出して、検証バッファ１３に格納する。さらにＳ３５５にて、ＲＯＭ用読出ポインタＰＴ１１と検証用書込ポインタＰＴ１３を更新する。具体的には、Ｓ３４５で検証バッファ１３に格納したデータ量分、ＲＯＭ用読出ポインタＰＴ１１と検証用書込ポインタＰＴ１３の指示値を変化させる。そしてＳ３５５の処理が終了すると、Ｓ３６０に移行する。
【００７９】
次に、第２実施形態の検証実行処理を説明する。
この検証実行処理が実行されると、ＣＰＵ２は、図１２に示すように、まずＳ５１０にて、書換処理（Ｓ３２０の処理）を実行中であるか否かを判断する。ここで、書換処理を実行していない場合には（Ｓ５１０：ＮＯ）、Ｓ５３０に移行する。一方、書換処理を実行中である場合には（Ｓ５１０：ＹＥＳ）、Ｓ５２０にて、書込終了待ち状態であるか否かを判断する。
【００８０】
ここで、書込終了待ち状態でない場合には（Ｓ５２０：ＮＯ）、Ｓ５１０に移行し、上述の処理を繰り返す。一方、書込終了待ち状態である場合には（Ｓ５２０：ＹＥＳ）、Ｓ５３０に移行する。
【００８１】
そしてＳ５３０に移行すると、受信処理（Ｓ２３０の処理）を実行中であるか否かを判断する。ここで、受信処理を実行していない場合には（Ｓ５３０：ＮＯ）、Ｓ５５０に移行する。一方、受信処理を実行中である場合には（Ｓ５３０：ＹＥＳ）、Ｓ５４０にて、プログラム書換装置ＲＰからのデータの受信を待っている状態（以下、受信待ち状態という）であるか否かを判断する。
【００８２】
ここで、受信待ち状態でない場合には（Ｓ５４０：ＮＯ）、Ｓ５１０に移行し、上述の処理を繰り返す。一方、受信待ち状態である場合には（Ｓ５４０：ＹＥＳ）、Ｓ５５０に移行する。
【００８３】
そしてＳ４５０に移行すると、検証バッファ１３に格納されているデータのうち検証（バリデート）が行われていないものがあるか否かを判断する。具体的には、検証用書込ポインタＰＴ１３の指示値と検証用検証ポインタＰＴ１４の指示値が互いに一致してない場合に、検証（バリデート）が行われていないデータがあると判断する。
【００８４】
ここで、検証が行われていないデータ（以下、未検証データという）がない場合には（Ｓ５５０：ＮＯ）Ｓ５１０に移行し、上述の処理を繰り返す。
一方、未検証データがある場合には（Ｓ５５０：ＹＥＳ）、Ｓ５６０にて、検証処理を実行する。具体的には、まず、検証バッファ１３に格納されているデータのうち、検証用検証ポインタＰＴ１４が指示するアドレスから予め設定された検証単位分のアドレスまでのデータを読み出す。そして、読み出したデータについて、例えばサム計算またはＣＲＣ計算などの認証用演算を実行し、この演算値と、読み出したデータに対してプログラム書換装置ＲＰ側で予め付与された検証用データの値とを比較し、両者が一致している場合に、読み出したデータが適正であると判断するとともに、両者が不一致である場合に、読み出したデータが不適正であると判断する。
【００８５】
そしてＳ５７０にて、検証用検証ポインタＰＴ１４を更新する。具体的には、Ｓ５６０で検証（バリデート）を実行したデータ量分、検証用検証ポインタＰＴ１４の指示値を変化させる。
【００８６】
その後Ｓ５８０にて、今回のプログラム書換要求で書き換えるべき制御プログラムに関する全ての検証（バリデート）が終了したか否かを判断する。ここで、全ての検証が終了していない場合には（Ｓ５８０：ＮＯ）、Ｓ５１０に移行し、上述の処理を繰り返す。一方、全ての検証が終了した場合には（Ｓ５８０：ＹＥＳ）、検証実行処理を終了する。
【００８７】
このように構成されたＥＣＵ１では、まず、フラッシュＲＯＭ３に記憶された制御プログラムの内容を書き換えるための書換データを外部から受信する受信処理を実行する（Ｓ２３０）。そして、受信処理により受信した書換データをフラッシュＲＯＭ３に書き込むことにより、フラッシュＲＯＭ３に記憶された制御プログラムの内容を書き換える書換処理を実行する（Ｓ３２０）。また、受信処理が実行されていない状態（Ｓ５３０：ＮＯ）または受信処理において書換データの受信を待っている状態（Ｓ５４０：ＹＥＳ）であることと、書換処理が実行されていない状態（Ｓ５１０：ＮＯ）または書換処理において不揮発性メモリへの書換データの書き込み終了を待っている状態（Ｓ５２０：ＹＥＳ）であることの両方が成り立っている場合に、不揮発性メモリに書き込まれる書換データが適正なものであるか否かを検証する検証処理を実行する（Ｓ５６０）。
【００８８】
このため、受信処理の実行中であっても、書換データの受信を待っている状態であれば、検証処理を実行することができるとともに、書換処理の実行中であっても、不揮発性メモリへの書換データの書き込み終了を待っている状態であれば、検証処理を実行することができる。すなわち、例えば図１３および図１４に示すように、制御プログラムを書き換えるために実行される受信処理または書換処理と並行して検証処理を実行することができる。これにより、第１実施形態と同様に、制御プログラムの書き換えに要する時間を短縮することができる。
【００８９】
図１３では、受信処理ＲＰ０１，ＲＰ０２，ＲＰ０３，・・・・，ＲＰ１４が順次実行されており、受信処理ＲＰ０１の開始前に検証処理ＶＰ１１が開始される（時刻ｔ１１を参照）。そして受信処理ＲＰ０１の実行中に、書換処理ＷＰ１１が開始される（時刻ｔ１２を参照）。書換処理ＷＰ１１は、受信処理ＲＰ０１で受信したデータを書き込む。検証処理ＶＰ１１は、書換処理ＷＰ１１の前にフラッシュＲＯＭ３に書き込まれたデータ（例えば、部分書換により書き込まれたデータ）を検証する。これにより、受信処理ＲＰ０１，ＲＰ０２，ＲＰ０３と書換処理ＷＰ１１と検証処理ＶＰ１１とが並行に実行される。
【００９０】
また、受信処理ＲＰ０４の開始前に、書換処理ＷＰ１２が開始され（時刻ｔ１３を参照）、その後に検証処理ＶＰ１２が開始される。書換処理ＷＰ１２は、受信処理ＲＰ０２，ＲＰ０３で受信したデータを書き込む。検証処理ＶＰ１２は、書換処理ＷＰ１１，ＷＰ１２で書き込むデータを検証する。これにより、受信処理ＲＰ０４，ＲＰ０５，ＲＰ０６と書換処理ＷＰ１２と検証処理ＶＰ１１，ＶＰ１２とが並行に実行される。
【００９１】
また、受信処理ＲＰ０７の開始前に、書換処理ＷＰ１３が開始され（時刻ｔ１４を参照）、その後に検証処理ＶＰ１３が開始される。書換処理ＷＰ１３は、受信処理ＲＰ０４，ＲＰ０５，ＲＰ０６で受信したデータを書き込む。検証処理ＶＰ１３は、書換処理ＷＰ１３で書き込むデータを検証する。これにより、受信処理ＲＰ０７，ＲＰ０８，ＲＰ０９，ＲＰ１０と書換処理ＷＰ１３と検証処理ＶＰ１２，ＶＰ１３とが並行に実行される。
【００９２】
また、受信処理ＲＰ１１の開始前に、書換処理ＷＰ１４が開始され（時刻ｔ１５を参照）、その後に検証処理ＶＰ１４が開始される。書換処理ＷＰ１４は、受信処理ＲＰ０７，ＲＰ０８，ＲＰ０９，ＲＰ１０で受信したデータを書き込む。検証処理ＶＰ１４は、書換処理ＷＰ１４で書き込むデータを検証する。これにより、受信処理ＲＰ１１，ＲＰ１２，ＲＰ１３，ＲＰ１４と書換処理ＷＰ１４と検証処理ＶＰ１３，ＶＰ１４とが並行に実行される。
【００９３】
また図１４では、書込起動ＷＰ２１の前に、受信処理ＲＰ２１と検証処理ＶＰ２１とが並行に実行されるとともに、書込起動ＷＰ２１の後に、受信処理ＲＰ２２と書換処理ＷＰ２２と検証処理ＶＰ２２とが並行に実行されることを示している。
【００９４】
またＥＣＵ１は、フラッシュＲＯＭ３に書き込まれた書換データを一時的に記憶する検証バッファ１３を備え、検証バッファ１３に記憶されている書換データに対して検証処理を実行する。
【００９５】
これにより、フラッシュＲＯＭ３に書き込む書換データの検証を、フラッシュＲＯＭ３からデータを読み出すことなく行うことができる。このため、第１実施形態と同様に、書換処理の実行中であっても、不揮発性メモリへの書換データの書き込み終了を待っている状態であれば、検証処理を実行することができる。
【００９６】
また、今回のプログラム書換要求を受信した時点で、前回のプログラム書換要求に基づく書換処理によりフラッシュＲＯＭ３に書き込まれた書換データが未検証のまま検証バッファ１３に残っている場合には、今回のプログラム書換要求のプログラム書換要求に基づく書換処理と並行して、前回のプログラム書換要求に基づく書換処理による書換データの検証を継続することができる。
【００９７】
また検証バッファ１３は、リングバッファ構造で形成されている。このため、第１実施形態と同様に、検証バッファ１３に書き込まれている書換データに対する検証が全て終了していない状態で、新たに検証バッファ１３に書き込まれる場合には、未検証の書換データを先頭アドレスに移動させる必要がなくなる。
【００９８】
以上説明した実施形態において、Ｓ５６０の処理は本発明における検証処理実行手段および検証処理実行手順である。
（第３実施形態）
以下に本発明の第３実施形態を図面とともに説明する。なお第３実施形態では、第１実施形態と異なる部分を説明する。
【００９９】
第３実施形態のＥＣＵ１は、ＥＣＵ１の構成と書換実行処理と検証実行処理が変更された点以外は第１実施形態と同じである。
まずＥＣＵ１の構成は、書換用検証ポインタＰＴ５が省略されている点と、図１５に示すように、フラッシュＲＯＭ３に書き込まれているデータを検証（バリデート）するときに、検証するデータが書き込まれている記憶領域のアドレスを指示するＲＯＭ用検証ポインタＰＴ２１が設けられている点以外は第１実施形態と同じである。
【０１００】
次に、第３実施形態の書換実行処理を説明する。第３実施形態の書換実行処理は、図１６に示すように、Ｓ３０８の処理が追加された点以外は第１実施形態と同じである。
すなわち、この書換実行処理が実行されると、ＣＰＵ２は、まずＳ３０８にて、ＲＯＭ用検証ポインタＰＴ２１を更新する。具体的には、ＲＯＭ用検証ポインタＰＴ２１を、今回のプログラム書換要求で書き換えるべき制御プログラムとは別に既にフラッシュＲＯＭ３に書き込まれている制御プログラムのうち検証が行われていないデータの記憶領域の先頭アドレスに設定する。そしてＳ３０８の処理が終了すると、Ｓ３１０に移行する。
【０１０１】
次に、第３実施形態の検証実行処理を説明する。
この検証実行処理が実行されると、ＣＰＵ２は、図１７に示すように、まずＳ６１０にて、書換処理（Ｓ３２０の処理）を実行中であるか否かを判断する。書換処理を実行中である場合には（Ｓ６１０：ＹＥＳ）、Ｓ６１０に移行し、Ｓ６１０の処理を繰り返す。一方書換処理を実行していない場合には（Ｓ６１０：ＮＯ）、Ｓ６２０にて、受信処理（Ｓ２３０の処理）を実行中であるか否かを判断する。ここで、受信処理を実行していない場合には（Ｓ６２０：ＮＯ）、Ｓ６４０に移行する。
【０１０２】
一方、受信処理を実行中である場合には（Ｓ６２０：ＹＥＳ）、Ｓ６３０にて、受信待ち状態であるか否かを判断する。ここで、受信待ち状態でない場合には（Ｓ６３０：ＮＯ）、Ｓ６１０に移行し、上述の処理を繰り返す。一方、受信待ち状態である場合には（Ｓ６３０：ＹＥＳ）、Ｓ６４０に移行する。
【０１０３】
そしてＳ６４０に移行すると、検証処理を実行する。具体的には、まず、フラッシュＲＯＭ３に書き込まれているデータのうち、ＲＯＭ用検証ポインタＰＴ２１が指示するアドレスから予め設定された検証単位分のアドレスまでのデータを読み出す。そして、読み出したデータについて、例えばサム計算またはＣＲＣ計算などの認証用演算を実行し、この演算値と、読み出したデータに対してプログラム書換装置ＲＰ側で予め付与された検証用データの値とを比較し、両者が一致している場合に、読み出したデータが適正であると判断するとともに、両者が不一致である場合に、読み出したデータが不適正であると判断する。
【０１０４】
そしてＳ６５０にて、ＲＯＭ用検証ポインタを更新する。具体的には、Ｓ６４０で検証（バリデート）を実行したデータ量分、ＲＯＭ用検証ポインタの指示値を変化させる。
その後Ｓ６６０にて、今回のプログラム書換要求で書き換えるべき制御プログラムに関する全ての検証（バリデート）が終了したか否かを判断する。ここで、全ての検証が終了していない場合には（Ｓ６６０：ＮＯ）、Ｓ６１０に移行し、上述の処理を繰り返す。一方、全ての検証が終了した場合には（Ｓ６６０：ＹＥＳ）、検証実行処理を終了する。
【０１０５】
このように構成されたＥＣＵ１では、まず、フラッシュＲＯＭ３に記憶された制御プログラムの内容を書き換えるための書換データを外部から受信する受信処理を実行する（Ｓ２３０）。そして、受信処理により受信した書換データをフラッシュＲＯＭ３に書き込むことにより、フラッシュＲＯＭ３に記憶された制御プログラムの内容を書き換える書換処理を実行する（Ｓ３２０）。また、受信処理が実行されていない状態（Ｓ６２０：ＮＯ）または受信処理において書換データの受信を待っている状態（Ｓ６３０：ＹＥＳ）であることと、書換処理が実行されていない状態（Ｓ６１０：ＮＯ）であることの両方が成り立っている場合に、不揮発性メモリに書き込まれる書換データが適正なものであるか否かを検証する検証処理を実行する（Ｓ６４０）。
【０１０６】
このため、受信処理の実行中であっても、書換データの受信を待っている状態であれば、検証処理を実行することができる。すなわち、例えば図１８に示すように、受信処理と検証処理とを並行に実行することができる。これにより、第１実施形態と同様に、制御プログラムの書き換えに要する時間を短縮することができる。
【０１０７】
図１８では、受信処理ＲＰ０１，ＲＰ０２，ＲＰ０３，・・・・，ＲＰ１４が順次実行されており、受信処理ＲＰ０１の開始前に検証処理ＶＰ３１が開始される（時刻ｔ３１を参照）。そして受信処理ＲＰ０１の実行中に、書換処理ＷＰ３１が開始される（時刻ｔ３２を参照）。このため、書換処理ＷＰ３１の開始前に検証処理ＶＰ３１が終了する。書換処理ＷＰ３１は、受信処理ＲＰ０１で受信したデータを書き込む。検証処理ＶＰ３１は、書換処理ＷＰ３１の前にフラッシュＲＯＭ３に書き込まれたデータを検証する。これにより、受信処理ＲＰ０１と検証処理ＶＰ３１とが並行に実行される。
【０１０８】
また、書換処理ＷＰ３１が終了すると検証処理ＶＰ３２が開始される（時刻ｔ３３を参照）。そして、受信処理ＲＰ０４の開始前に、書換処理ＷＰ３２が開始される。（時刻ｔ３４を参照）。このため、書換処理ＷＰ３２の開始前に検証処理ＶＰ３１が終了する。書換処理ＷＰ３２は、受信処理ＲＰ０２，ＲＰ０３で受信したデータを書き込む。検証処理ＶＰ３２は、書換処理ＷＰ３１の前にフラッシュＲＯＭ３に書き込まれたデータを検証する。これにより、受信処理ＲＰ０３と検証処理ＶＰ３２とが並行に実行される。
【０１０９】
また、書換処理ＷＰ３２が終了すると検証処理ＶＰ３３が開始される（時刻ｔ３５を参照）。そして、受信処理ＲＰ０７の開始前に、書換処理ＷＰ３３が開始される。（時刻ｔ３６を参照）。このため、書換処理ＷＰ３３の開始前に検証処理ＶＰ３３が終了する。書換処理ＷＰ３３は、受信処理ＲＰ０４，ＲＰ０５，ＲＰ０６で受信したデータを書き込む。検証処理ＶＰ３３は、書換処理ＷＰ３１の前にフラッシュＲＯＭ３に書き込まれたデータを検証する。
【０１１０】
また、書換処理ＷＰ３３が終了すると検証処理ＶＰ３４が開始される（時刻ｔ３７を参照）。そして、受信処理ＲＰ１１の開始前に、書換処理ＷＰ３４が開始される。（時刻ｔ３８を参照）。このため、書換処理ＷＰ３４の開始前に検証処理ＶＰ３４が終了する。書換処理ＷＰ３４は、受信処理ＲＰ０７，ＲＰ０８，ＲＰ０９，ＲＰ１０で受信したデータを書き込む。検証処理ＶＰ３４は、書換処理ＷＰ１１の前にフラッシュＲＯＭ３に書き込まれたデータを検証する。これにより、受信処理ＲＰ１０と検証処理ＶＰ３４とが並行に実行される。
【０１１１】
またＥＣＵ１は、フラッシュＲＯＭ３に書き込まれた書換データに対して検証処理を実行する。これにより、検証バッファ１３を設けることができる程度の記憶容量の余裕をＲＡＭ４が有していない場合であっても、検証処理を実行することができる。
【０１１２】
また、今回のプログラム書換要求を受信した時点で、前回のプログラム書換要求に基づく書換処理によりフラッシュＲＯＭ３に書き込まれた書換データが未検証のまま残っている場合には、今回のプログラム書換要求のプログラム書換要求に基づく書換処理と並行して、前回のプログラム書換要求に基づく書換処理による書換データの検証を継続することができる。
【０１１３】
以上説明した実施形態において、Ｓ６４０の処理は本発明における検証処理実行手段および検証処理実行手順である。
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
【０１１４】
例えば上記実施形態では、ＥＣＵ１の制御対象が車両のエンジンであるものを示したが、これに限定されるものではなく、例えば自動変速機であってもよい。
また上記実施形態では、フラッシュＲＯＭ３に制御プログラムを記憶するものを示したが、制御プログラムの記憶媒体としてはこれに限定されるものではなく、例えばＥＥＰＲＯＭのように記憶内容の書き換えが可能な不揮発性メモリであればよい。
【０１１５】
また上記実施形態では、書換プログラムをプログラム書換装置ＲＰから取得するものを示したが、ＥＣＵ１が予めフラッシュＲＯＭ３内に書換プログラムを記憶していてもよい。
【０１１６】
また上記実施形態では、書換バッファ１２と検証バッファ１３がリングバッファ構造で形成されているものを示したが、リングバッファ構造ではない通常の構造であってもよい。但し、通常の構造の場合には、新たなデータが書き込まれる前に、既に書き込まれているデータを先頭アドレスに移動させる必要がある。
【０１１７】
また上記実施形態では、Ｓ２０にて、書き込まれている制御プログラムが適正なものであるか否かを判断するものを示した。しかし、書き込まれている制御プログラムが適正なものでないと検証処理で判断されたときにおいて、制御プログラムが既に書き込まれていても、制御プログラムが書き込まれていないとＳ１０の処理で判断されるようにする場合には、Ｓ２０の処理を不要とすることができる。例えば、書き換えと検証（バリデート）の両方が正常であるか否かを示す識別値を記憶する領域を設け、書き換えの開始時に識別値を消去する。そして、書き換えが正常に終了するとともに検証結果が正常である場合に、予め設定された値の識別値を再度記憶する一方、書き換えが途絶したり検証結果が異常であったりした場合には、識別値の記憶を禁止する。これにより、識別値に基づいて、制御プログラムが正常に書き込まれたか否かを判断することが可能になるとともに、書き込まれた制御プログラムが適正であるか否かを判断する処理を不要とすることができる。
【０１１８】
また上記実施形態では、受信処理と書換処理と検証処理とを並行に実行するものと、受信処理と検証処理とを並行に実行するものを示した。しかし、例えば図１９に示すように、書換処理と検証処理とを並行に実行するようにしてもよい。なお図１９は、複数回の受信処理の後に、複数回の受信処理で受信したデータを一括してフラッシュＲＯＭに書き込む書換処理を実行し、書換処理の終了後に、受信処理を再開するように構成された電子制御装置において、検証処理が、書換処理と並行に実行されるとともに、受信処理と受信処理との間で実行されることを示している。
【符号の説明】
【０１１９】
１…ＥＣＵ、３…フラッシュＲＯＭ
【図２】
2014232437.tif 000003
【図３】
2014232437.tif 000004
【図４】
2014232437.tif 000005
【図５】
2014232437.tif 000006
【図６】
2014232437.tif 000007
【図７】
2014232437.tif 000008
【図８】
2014232437.tif 000009
【図１０】
2014232437.tif 000010
【図１１】
2014232437.tif 000011
【図１２】
2014232437.tif 000012
【図１３】
2014232437.tif 000013
【図１４】
2014232437.tif 000014
【図１５】
2014232437.tif 000015
【図１６】
2014232437.tif 000016
【図１７】
2014232437.tif 000017
【図１８】
2014232437.tif 000018
【図１９】
2014232437.tif 000019
【図１】
2014232437.tif 000020
【図９】
2014232437.tif 000021