(57)【要約】      （修正有）【課題】プログラムの書き換えからベリファイまで、正常に行われたか否かを判定する。【解決手段】プログラム書き換え方法は、ツールから送信されるプログラムを受信し、プログラムを記憶部に書き込む際に、該プログラムに埋め込まれたチェックデータＡ、及び該チェックデータＡと同じデータであるチェックデータＢのうち、チェックデータＡを記憶部に書き込み、該プログラムが正常に書き込まれたか否かを検証するベリファイ処理の際に、ツールから検証用のプログラムを受信し、検証用のプログラムに基づいて、記憶部に書き込んだプログラムを検証するとともに、検証用のプログラムに埋め込まれたチェックデータＢを記憶部に書き込み、記憶部に書き込まれているチェックデータＡと、記憶部に書き込んだチェックデータＢとを照合し、一致する場合に正常に書き込まれたことをツールに通知する。【選択図】図６
2015210669.tif 000002
【特許請求の範囲】
【請求項１】
ツールから送信されるプログラムを受信し、
前記プログラムを記憶部に書き込む際に、該プログラムに埋め込まれたチェックデータA、及び該チェックデータAと同じデータであるチェックデータBのうち、チェックデータAを前記記憶部に書き込み、
前記プログラムを前記記憶部に書き込んだ後に、該プログラムが正常に書き込まれたか否かを検証するベリファイ処理の際に、前記ツールから検証用のプログラムを受信し、
前記検証用のプログラムに基づいて、前記記憶部に書き込んだプログラムを検証するとともに、前記検証用のプログラムに埋め込まれた前記チェックデータBを前記記憶部に書き込み、
前記記憶部に書き込まれているチェックデータAと、前記記憶部に書き込んだチェックデータBとを照合し、一致する場合に正常に書き込まれたことを前記ツールに通知する、プログラム書き換え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置にプログラムや機器の動作に必要なデータが正常に書き込まれたか否かを検証する技術に関する。
【背景技術】
【０００２】
車両には、様々な制御装置が搭載される。これらの制御装置は、プログラムや機器の動作に必要なデータ等を格納する記憶装置を有し、その記憶装置に格納されたプログラム等の書き換えが行われる場合がある。
【０００３】
記憶装置にデータが正常に書き込まれているか否かを判定する技術に関して、メインプログラムの末尾に、ロード完了マークを含ませておき、ダウンロードに際して、このロード完了マークをフラッシュメモリの特定の格納領域に格納する技術が知られている（例えば、特許文献１参照）。この技術では、メインプログラムが正しく格納されているか否かを判定する際に、フラッシュメモリ内のロード完了マーク格納領域にロード完了マークが格納され、かつメインプログラムエリアに対するサムチェックの結果が正常である場合に、正しく格納されていると判定する。
【０００４】
また、車載制御装置に関して、電子制御装置内のデータの書き換えの際に、マスタ制御装置がまず、各車両のVINコード（車両識別コード）や制御プログラムのバージョン情報等を保持、管理している外部の管理センターから書き換え用のデータを無線通信によって取得する技術が知られている（例えば、特許文献２参照）。そして、該取得したデータを一時的にメモリ装置に格納するとともに該格納された書き換え用のデータの適正性を判断する。この結果、メモリ装置に格納されている書き換え用のデータが適正であることを条件に、同書き換え用のデータを用いて電子制御装置内のデータを書き換える。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−１５６７２号公報
【特許文献２】特開２００７−２２７３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ロード完了マーク、及びチェックサムを確認することによって正常に書き込まれたか否かを判定する方法では、ロード完了マーク以外の領域でチェックサムが偶然一致するデータ化けがあった場合でも正常に書き込まれたと誤判定される場合がある。
【０００７】
また、データの書き込みの途中でデータ化けが発生した状態で、書き込みが完了し、且つベリファイの途中で処理が中断した場合、ベリファイが正常に完了したことは書き込まれないため、次回の電源投入時に正常にデータが書き込まれたと誤判定される場合がある。
【０００８】
本発明の目的は、プログラムの書き換えからベリファイまで、正常に行われたか否かを判定することである。
【課題を解決するための手段】
【０００９】
開示の一実施例のプログラム書き換え方法は、
ツールから送信されるプログラムを受信し、
前記プログラムを記憶部に書き込む際に、該プログラムに埋め込まれたチェックデータA、及び該チェックデータAと同じデータであるチェックデータBのうち、チェックデータAを前記記憶部に書き込み、
前記プログラムを前記記憶部に書き込んだ後に、該プログラムが正常に書き込まれたか否かを検証するベリファイ処理の際に、前記ツールから検証用のプログラムを受信し、
前記検証用のプログラムに基づいて、前記記憶部に書き込んだプログラムを検証するとともに、前記検証用のプログラムに埋め込まれた前記チェックデータBを前記記憶部に書き込み、
前記記憶部に書き込まれているチェックデータAと、前記記憶部に書き込んだチェックデータBとを照合し、一致する場合に正常に書き込まれたことを前記ツールに通知する。
【発明の効果】
【００１０】
開示の実施例によれば、プログラムの書き換えからベリファイまで、正常に行われたか否かを判定することができる。
【図面の簡単な説明】
【００１１】
【図１】プログラム書き換え方法を実現する構成の一実施例を示す図である。
【図２】プログラムの書き換え処理の一実施例を示す図である。
【図３】ベリファイの一実施例を示す図である。
【図４】書き込みツールと電子制御ユニットとの間の処理の一実施例を示すシーケンスチャートである。
【図５】プログラムの書き換え処理の一実施例を示すフロー図である。
【図６】ベリファイの一実施例を示すフロー図である。
【図７】プログラムの書き換え処理の従来例（その１）を示す図である。
【図８】ベリファイの従来例（その１）を示す図である。
【図９】プログラムの書き換え処理の従来例（その２）を示す図である。
【図１０】ベリファイの従来例（その２）を示す図である。
【発明を実施するための形態】
【００１２】
次に、本発明を実施するための形態を、以下の実施例に基づき図面を参照しつつ説明する。以下で説明する実施例は一例に過ぎず、本発明が適用される実施の形態は、以下の実施例に限られない。
なお、実施例を説明するための全図において、同一機能を有するものは同一符号を用い、繰り返しの説明は省略する。
【００１３】
＜電子制御ユニット＞
図１は、制御装置としての電子制御ユニット(ECU: Electronic Control Unit)１００の一実施例を示す。
【００１４】
ECU１００は、例えば車両等の移動体に搭載される。ECU１００の一実施例は、車両に搭載され、CAN(Controller Area Network)等の車載ネットワークに接続される。ECU１００は、情報系LAN、パワートレイン系LAN、ボディ系LAN等に接続できる。また、ECU１００に、センサ、アクチュエータ等が実装されてもよい。複数のECU１００によって、車載通信システムが構成される。
【００１５】
ECU１００が搭載される車両には、外部機器接続用コネクタ３００が搭載される。外部機器接続用コネクタ３００は、データリンクコネクタ(DLC: Data Link Connector)を適用できる。ECU１００と、外部機器接続用コネクタ３００との間は、CAN等の相互接続された機器間のデータ転送に使われる規格にしたがった通信線５０によって接続される。
【００１６】
外部機器接続用コネクタ３００には、車両の外部から、診断機などの様々なツールが接続される。ツールの一例は、ECU１００の記憶装置に格納されているプログラムを書き換える書き換えツール２００である。書き換えツール２００と、外部機器接続用コネクタ３００との間は、CAN等の相互接続された機器間のデータ転送に使われる規格にしたがった通信線５０によって接続される。
【００１７】
ECU１００の一実施例では、外部機器接続用コネクタ３００に書き換えツール２００が接続される場合について説明する。
【００１８】
＜書き換えツール２００＞
書き換えツール２００は、外部機器接続用コネクタ３００を介して、ECU１００と接続される。書き換えツール２００は、インターフェース(I/F:  interface)（図示なし）と、CPU（図示なし）と、メモリ（図示なし）とを有し、メモリには、ECU１００の記憶装置に書き込むプログラム（以下、「書き換えプログラム」という）を格納する。
【００１９】
インターフェースは、ECU１００へ通信線５０を介してデータを送信する。例えば、インターフェースは、ECU１００の記憶装置に格納される書き換えプログラムを通信線５０へ送信する。また、インターフェースは、ECU１００から、様々な応答等のデータを受信し、受信したデータをCPUに入力する。
【００２０】
CPUは、インターフェースと接続される。CPUは、書き換えプログラムの送信に先立ち、ECU１００にパスワードの照合などのセキュリティアクセスを行い、ECU１００から送信されるセキュリティアクセス応答を取得する。CPUは、ECU１００から送信されるセキュリティアクセス応答を取得すると、ECU１００へ書き込み対象となるアドレス範囲の消去を要求し、ECU１００から送信される書き込み対象となるアドレス範囲の消去が完了したことを表す消去応答を取得する。消去を要求するアドレス範囲として、ベリファイの際にチェックデータBを書き込むアドレス範囲も指定される。CPUは、ECU１００から送信される消去応答を取得すると、ECU１００へ書き込みを要求する書き込み要求コマンド、及び書き換えプログラムを送信し、ECU１００から送信される書き込みが完了したことを表す書き込み応答を取得する。CPUは、ECU１００から送信される書き込み応答を取得すると、ECU１００へ書き換えプログラムが正常に書き込まれたか否かを検証することを要求するベリファイ要求コマンド、及びベリファイプログラムを送信し、ECU１００から送信されるベリファイが完了したことを表すベリファイ応答を取得する。
【００２１】
＜ECU１００＞
ECU１００は、マイコン（図示無し）、及びトランシーバ（図示無し）を備える。トランシーバは、通信線５０に接続され、通信ドライバによる制御によって、通信回路からのメッセージ等のデータを通信線５０に送信するとともに、通信線５０からメッセージ等のデータを受信し、通信回路に入力する。トランシーバは、入力電圧、信号の振幅、及びECU１００の省電力のためのスリープ、ウェイクアップの制御を行う。
【００２２】
マイコンには、通信回路（図示なし）と、CPU(Central Processing Unit)（図示なし）と、フラッシュメモリ等の記憶装置（図示なし）が実装され、ECU１００がマスタノードとして機能する場合には、トークンの送信と、スケジューリングの管理を行う。また、マイコンは、ECU１００がマスタノードとして機能する場合、及びスレーブノードとして機能する場合に関わらず、データの送受信を行う。
【００２３】
マイコンは、書き換えプログラムの送信に先立ち、書き換えツール２００からのパスワードの照合等のセキュリティアクセスに応じて、セキュリティに関する処理を行い、セキュリティアクセス応答を送信する。マイコンにはセキュリティ情報が保持され、このセキュリティ情報に基づくセキュリティチェックを通過しなければプログラムの書き込みができないように設定される。これにより、不正なプログラムの書き込みを防止することができる。
【００２４】
マイコンは、書き換えツール２００からの書き込み対象となるアドレス範囲の消去の要求に応じて、記憶装置の該当するアドレス範囲の消去を行い、該当するアドレス範囲の消去が完了したことを表す消去応答を送信する。マイコンは、書き換えツール２００から送信される書き込みを要求する書き込み要求コマンド、及び書き換えプログラムを取得すると、記憶装置に書き換えプログラムを書き込み、書き込みが完了した場合に書き込み応答を送信する。
【００２５】
＜書き込み処理＞
図２は、書き換え処理の一実施例を示す。図２は、記憶装置の領域の一例を示す。記憶装置には、書き換え対象外領域と、書き換え対象領域が設けられ、さらに書き換え対象外領域は、書き換え処理プログラム等のプログラム等が格納される領域と、空き領域とに区分される。図２において、書き換える領域の範囲をハッチングにより表す。
【００２６】
書き換え対象領域には、プログラムの書き換えの際に、チェックデータAが書き込まれる領域が用意される。ここで、チェックデータAは、プログラムの書き換え処理が行われたことを検証するために使われる言語、文字、記号、及び各種のしるし等の識別情報を示す。また、チェックデータAは、言語、文字、記号、及び各種のしるしのうち、少なくとも２つが組み合わされた識別情報であってもよい。
【００２７】
書き換え対象外領域には、プログラムの書き換えが正常に行われたことを検証するベリファイの際に、チェックデータBが書き込まれる領域が用意される。ここで、チェックデータBは、プログラムの書き換えが正常に行われたことを検証するために使われる言語、文字、記号、及び各種のしるし等の識別情報を示す。また、チェックデータBは、言語、文字、記号、及び各種のしるしのうち、少なくとも２つが組み合わされた識別情報であってもよい。チェックデータA、及びチェックデータBは同じ識別情報である。
【００２８】
書き換えツールは、書き換えプログラムを最小のメモリアドレスから順にECU１００へ送信する。ECU１００のマイコンは、書き換えツールから送信される書き換えプログラムを送信される順に最小のメモリアドレスから矢印の方向に書き込み（図２の左から右の方向に書き込み、右端まで書き込んだら次の番地について左から右の方向に書き込み）を行い、チェックデータB（送信された書き換えプログラムの最後）の手前のワードまで書き換えたときに書き込み完了の書き込み応答を返す。つまり、書き込み処理では、チェックデータBは書き込まない。
【００２９】
チェックデータA、及びチェックデータBは、予めプログラムに埋め込められ、その値は、プログラム毎に異ならせることができる。例えば、プログラムの書き換えが行われる前のチェックデータAの値、及びチェックデータBの値は「84963451h」であり、書き換えるプログラムではチェックデータAの値、及びチェックデータBの値は「32964754h」とする。この場合、プログラムの書き換えの開始後、チェックデータAを書き換えた時点では、チェックデータAは書き換えられたため「32964754h」であり、チェックデータBは書き換えられないため「84963451h」のままである。
【００３０】
プログラムの書き換えが終了した後、プログラムが正常に書き換えられたか否かを検証するためのベリファイが行われる。マイコンは、書き換えツール２００から送信される書き換えプログラムが正常に書き込まれたか否かを検証することを要求するベリファイ要求コマンド、及びベリファイプログラムを取得すると、記憶装置に書き込んだ書き換えプログラムと、ベリファイプログラムとを照合し、書き換えプログラムが正常に書き込まれたか否かを検証し、ベリファイが完了した場合にはベリファイ応答を送信する。
【００３１】
図３は、ベリファイの一実施例を示す。図３は、記憶装置の領域の一例を示す。記憶装置には、書き換え対象外領域と、書き換え対象領域が設けられ、さらに書き換え対象外領域は、書き換え処理プログラム等のプログラム等が格納される領域と、空き領域とに区分される。図３において、ベリファイが行われる領域の範囲をハッチングにより表す。ベリファイが行われる領域は、書き換え対象領域と同一である。さらに、チェックデータBが書き込まれる領域が書き換え対象領域とされる。
【００３２】
書き換えツールは、書き換えプログラムと同じベリファイプログラムを最小のメモリアドレスから順にECU１００へ送信する。ECU１００のマイコンは、書き換えツールから送信されるベリファイプログラムに基づいて、ベリファイプログラムが送信される順に最小のメモリアドレスから矢印の方向にベリファイを行い（図３の左から右の方向にベリファイを行い、右端まで書き込んだら次の番地について左から右の方向にベリファイを行う）、チェックデータB（送信されたプログラムの最後）の手前のワードまでベリファイを行った後、書き換えツールから送信されるチェックデータBを書き込む。なお、チェックデータBが格納される（含まれる）メモリブロックは、プログラムの書き込みの際に一旦消去されているため、改めて消去する必要はない。チェックデータBを書き込んだ後に、このチェックデータBと、既に書き込んであるチェックデータAが同じか否かを照合する。
【００３３】
書き換えプログラムを書き込む処理ではチェックデータBは書き込まず、チェックデータBの手前のワードまで書き込んだときに、書き込み完了の書き込み応答を返す。この時点では、チェックデータAの値、及びチェックデータBの値が一致しないことによって、ベリファイが正常に終了していないことを認識できる。例えば、プログラムの書き換えが終了した時点で電源遮断があった場合には、チェックデータAは書き換えられているが、ベリファイの最後の時点で書き換えられるチェックデータBは書き換えられていない。したがって、次回の電源投入の際に、チェックデータAの値と、チェックデータBの値とが一致しないことによって、ベリファイが正常に行われていないことを認識できる。
【００３４】
また、チェックデータAのサイズ、及びチェックデータBのサイズは、例えば、各々4バイト程度で済むため、車両プログラムを格納するメモリ容量を圧迫することなく、ベリファイが正常に行われたか否かを認識できる。
【００３５】
また、チェックデータを含む書き換え対象領域の全領域について、ベリファイを行うことができる。
【００３６】
＜ECU１００の動作＞
図４は、プログラム書き換えツール２００を用いて、ECU１００にプログラムを書き込む処理の一例を示す。
【００３７】
ステップＳ４０２では、書き換えツール２００からECU１００に対して、パスワード照合等のセキュリティアクセスが行われる。
【００３８】
ステップＳ４０４では、ECU１００は、書き換えツール２００からのセキュリティアクセスに対して、パスワードを照合し、一致した場合等に、書き換えツール２００に対してプログラムの書き込みを許可するセキュリティアクセス応答を返す。
【００３９】
ステップＳ４０６では、書き換えツール２００は、ECU１００からセキュリティアクセス応答を受信すると、ECU１００に対して、書き込み対象のアドレス範囲を消去することを要求する消去要求コマンドを送信する。消去要求コマンドには、ベリファイの際に、チェックデータBを書き込む領域を表すアドレス範囲も指定される。
【００４０】
ステップＳ４０８では、ECU１００は、書き換えツール２００からの消去要求コマンドを受信すると、要求されたアドレス範囲のフラッシュメモリの消去を行う。
【００４１】
ステップＳ４１０では、ECU１００は、要求されたアドレス範囲のフラッシュメモリの消去が完了した後、書き換えツール２００に対して、消去が完了したことを通知する消去応答を送信する。
【００４２】
ステップＳ４１２では、書き換えツール２００は、ECU１００から送信される消去応答を受信した後、ECU１００に対して、書き込みを要求する書き込み要求コマンド、及び書き込みデータ（書き換えプログラム）を送信する。書き込み要求コマンドには、どのアドレスからどのサイズのデータを書き込むかを表す情報が付帯される。
【００４３】
ステップＳ４１４では、ECU１００は、書き換えツール２００から送信される書き込み要求コマンド、及び書き込みデータを受信すると、書き込み要求コマンドにしたがって、要求されたアドレス範囲にデータを書き込む。
【００４４】
ステップＳ４１６では、ECU１００は、要求されたアドレス範囲にデータの書き込みが完了したら、書き込みが完了したことを通知する書き込み応答を返す。
【００４５】
ステップＳ４１８では、書き換えツール２００は、ECU１００から送信される書き込み応答を受信すると、ECU１００に対して、ベリファイ要求コマンド、及びベリファイデータ（ベリファイプログラム）を送信する。ベリファイ要求コマンドには、どのアドレスからどのサイズのデータについてベリファイを行うかを表す情報が付帯される。ベリファイデータは、ステップＳ４１２で書き換えツール２００から送信された書き込みデータと同じである。
【００４６】
ステップＳ４２０では、ECU１００は、ベリファイ要求コマンドにしたがって、ベリファイ要求コマンドに付帯されるアドレス範囲に書き込まれているデータと、書き換えツール２００から送信されたベリファイデータとを照合する。
【００４７】
ステップＳ４２２では、ECU１００は、要求されたアドレス範囲のデータについてベリファイが完了した場合、書き換えツール２００にベリファイが完了したことを通知するベリファイ応答を送信する。
【００４８】
図５、及び図６は、ECU１００の動作の一実施例を示す。図５は、ECU１００における書き換えプログラムの書き込み処理の一実施例を示す。つまり、図５は、図３のステップＳ４１４に対応する処理を示す。
【００４９】
図５は、書き換えプログラムの送信に先立って、書き換えツール２００からのパスワードの照合などのセキュリティアクセスに応じて、ECU１００がセキュリティアクセス応答を送信した後の動作を示す。書き換えツール２００は、書き換えプログラムを最小のメモリアドレスから順にECU１００へ送信する。
【００５０】
ステップＳ５０２では、ECU１００のマイコンは、書き込み対象が最終アドレスであるか否かを判定する。
【００５１】
ステップＳ５０４では、ECU１００のマイコンは、書き込み対象が最終アドレスであると判定した場合、書き換えツール２００へ、書き込み完了の書き込み応答を返す。
【００５２】
ステップＳ５０６では、ECU１００のマイコンは、書き込み対象が最終アドレスでないと判定した場合、書き換えツール２００から送信されてきたデータを記憶装置へ書き込む。その後、ステップＳ５０２からの処理が行われる。
【００５３】
図６は、書き換えプログラムへの書き換えが終了した後、プログラムが正常に書き換えられたか否かを検証するベリファイ処理の動作を示す。書き換えツール２００は、ベリファイプログラム（書き換えプログラム）を最小のメモリアドレスから順にECU１００へ送信する。
【００５４】
ステップＳ６０２では、ECU１００のマイコンは、ベリファイ対象が最終アドレスであるか否かを判定する。
【００５５】
ステップＳ６０４では、ECU１００のマイコンは、ベリファイ対象が最終アドレスであると判定した場合、書き換えツール２００から送信されてきたデータ（チェックデータB）を書き込む。
【００５６】
ステップＳ６０６では、ECU１００のマイコンは、ステップＳ６０４で書き込んだチェックデータBと、既に書き込んであるチェックデータAとを照合する。
【００５７】
ステップＳ６０８では、ECU１００のマイコンは、チェックデータBと、チェックデータAとの照合の結果、全てのデータが一致するか否かを判定する。
【００５８】
ステップＳ６１０では、ステップＳ６０８において、全てのデータが一致すると判定した場合、ECU１００のマイコンは、正常にベリファイが終了したことを書き換えツール２００へ通知する。
【００５９】
ステップＳ６１２では、ステップＳ６０８において、全てのデータが一致すると判定しない場合、ECU１００のマイコンは、ベリファイが異常終了したことを書き換えツール２００へ通知する。
【００６０】
ステップＳ６１４では、ステップＳ６０２において、ベリファイ対象が最終アドレスでないと判定した場合、ECU１００のマイコンは、書き換えツール２００から送信されてきたデータと、記憶装置に書き込まれているデータとを照合する。
【００６１】
ECU１００の一実施例によれば、書き換えプログラムへの書き換え後のベリファイの際に、電源遮断等によってベリファイが中断したとしても、その識別用に特別な領域を設けることなく、次回の立ち上げの際にベリファイが中断したことを検出できる。
【００６２】
＜本願発明の効果＞
図７は、プログラムの書き換え処理の従来例（その１）を示す。図７は、記憶装置の領域の一例を示す。記憶装置には、書き換え対象外領域と、書き換え対象領域が設けられ、さらに書き換え対象外領域は、書き換え処理プログラム等のプログラム等が格納される領域と、空き領域とに区分される。図７において、書き換える領域の範囲をハッチングにより表す。従来例では、書き換える領域にチェックデータA、及びチェックデータBが書き込まれる領域が用意される。つまり、ECUのマイコンは、チェックデータB（送信されたプログラムの最後）まで書き込んだときに書き込み完了の書き込み応答を返す。この場合、書き換えの途中で電源遮断等によって書き換えが中断した場合、チェックデータAの値と、チェックデータBの値とが一致しないため、正常に書き換えが終了しなかったことは検証できる。逆に、チェックデータAの値と、チェックデータBの値とが一致する場合には、正常に書き換えが終了したと判定できる。なお、図７では、プログラムの書き換えの途中でデータ化けが発生した状態を示す。
【００６３】
図８は、ベリファイの従来例（その１）を示す。図８に示されるように、ベリファイの途中で電源遮断等によってベリファイが中断した場合、データ化けの部分についてはベリファイが行われていないため、ECUのマイコンは、書き換えツールに異常が検出されたことを通知していない。ECUのみが電源遮断された場合には、その後は書き換えツールとの間の通信が成立しないため、書き換えツールは通信異常として、ベリファイが最後まで終了せずに中断したことを認識できる。書き換えツールによってベリファイが最後まで終了せずに中断したことを認識できた場合には、ECUの電源が再投入した後に、再度ベリファイを行うことが可能である。
【００６４】
しかし、ECUとともに書き換えツールの電源が遮断された場合には、その後に電源が投入されても、書き換えツールは前回のベリファイが正常に終了したか否かは認識できないため、前回のベリファイが正常に終了したと誤認識した場合には、書き込みにデータ化け等の異常があったことを認識できない。
【００６５】
図９は、プログラムの書き換え処理の従来例（その２）を示す。図９は、記憶装置の領域の一例を示す。記憶装置には、書き換え対象外領域と書き換え対象領域が設けられ、さらに書き換え対象外領域は書き換え処理プログラム等のプログラム等が格納される領域と空き領域とに区分され、書き換え対象領域には書き換えステータスを書き込む領域が設けられる。図９において、書き換える領域の範囲をハッチングにより表す。
【００６６】
書き換えステータスは、正常に書き換えができたか否かを確認するためのデータであり、予めプログラムに埋め込まれる。プログラムに埋め込まれるデータは書き換えが完了していないこと（以下、「書き換え未完了」という）を示す。ECUのマイコンは、プログラムの書き換えが終了し、続くベリファイも正常に終了した後に、書き換えステータスを書き換え完了を示すデータに書き換える。これにより、ベリファイが正常に終了しない限りは、書き換えステータスは「書き換え未完了」のままであるので、ECUは、次回の電源投入の際に、書き換えステータスを確認することによって正常に書き込まれているか否かを確実に判定できる。なお、図９では、プログラムの書き換えの途中でデータ化けが発生した状態を示す。
【００６７】
図１０は、ベリファイの従来例（その２）を示す。図１０に示されるように、ベリファイの途中で電源遮断等によってベリファイが中断した場合、データ化けの部分についてはベリファイが行われていないため、ECUのマイコンは、書き換えツールに異常が検出されたことを通知していない。しかし、ベリファイが終了していないため書き換えステータスは「書き換え未完了」のままである。したがって、電源が再投入された場合には、ECUは、書き換えステータスの情報を用いて、ベリファイが正常に終了しなかったことを認識できる。
【００６８】
しかし、この手法では、書き換えステータスの書き込みの際に一旦書き込んだ書き換え未完了を、ベリファイの終了後に書き換え完了に書き換えるため、フラッシュメモリの特性上、書き換えステータスを書き込む領域を含む消去可能単位分のフラッシュメモリ（以下、「メモリブロック」という）を一旦消去しなければならない。仮に、書き換えステータスのデータ長が4バイトだとしても、メモリブロックは、一般的には、数KB-数十KBオーダであるため、書き換えステータスを書き込む領域として、数KB-数十KB確保しなければならない。コストの制約から、元々小容量のメモリ容量しか用意できないECUにとっては、本来の車両制御プログラムのメモリ容量を圧迫することになる。特に、メモリブロックのサイズが全フラッシュメモリサイズに対して大きい場合には、プログラムを格納する領域を圧迫する場合がある。この場合、ワンランク上のメモリサイズのフラッシュメモリを用意しなければならず、コストアップとなる。
【００６９】
また、ベリファイの終了後に書き換えられる書き換えステータスが正しく書き換えられたか否かを確認できない。
【００７０】
制御装置の一実施例によれば、プログラムの書き換えの際に、ベリファイの終了の際にチェックデータBを書き込む領域のデータが消去されるとともに、チェックデータAを書き込み、ベリファイの終了の際にチェックデータBを書き込むことによって、メモリブロックの消去の必要がないため、無駄な領域を確保する必要がない。
【００７１】
以上、本発明は特定の実施例を参照しながら説明されてきたが、各実施例は単なる例示に過ぎず、当業者は様々な変形例、修正例、代替例、置換例等を理解するであろう。説明の便宜上、本発明の実施例に従った装置は機能的なブロック図を用いて説明されたが、そのような装置はハードウェアで、ソフトウェアで又はそれらの組み合わせで実現されてもよい。本発明は上記実施例に限定されず、本発明の精神から逸脱することなく、様々な変形例、修正例、代替例、置換例等が包含される。
【符号の説明】
【００７２】
５０  通信線
１００  電子制御装置
２００  書き換えツール
３００  外部機器接続用コネクタ
【図１】
2015210669.tif 000003
【図２】
2015210669.tif 000004
【図３】
2015210669.tif 000005
【図４】
2015210669.tif 000006
【図５】
2015210669.tif 000007
【図６】
2015210669.tif 000008
【図７】
2015210669.tif 000009
【図８】
2015210669.tif 000010
【図９】
2015210669.tif 000011
【図１０】
2015210669.tif 000012