(57)【特許請求の範囲】
【請求項１】
車両制御装置のメモリに記憶された第１のプログラムを、書き換え装置から転送された第２のプログラムに書き換える、車両制御装置のためのメモリ書き換えシステムであって、
前記第２のプログラムが、該第２のプログラムのプログラムコードと、該プログラムコードが格納されるメモリの先頭アドレスを含む第１のアドレスと、該プログラムコードの次に送信されるプログラムコードが格納されるメモリの先頭アドレスを含む第２のアドレスとを備えるデータ列として転送される車両制御装置のためのメモリ書き換えシステム。
【請求項２】
前記車両制御装置において、今回転送されたデータ列の第１のアドレスと、前回転送されたデータ列の第２のアドレスとを比較することにより、前記書き換え装置からデータ列が正しく転送されたかどうか判断する判定手段を備える請求項１に記載の車両制御装置のためのメモリ書き換えシステム。
【請求項３】
前記判定手段は、前記今回転送されたデータ列が正しく転送されなかったと判断したとき、前記書き換え装置に、該今回転送されたデータ列の再送を要求する請求項２に記載の車両制御装置のためのメモリ書き換えシステム。
【請求項４】
前記書き換え装置は、前記再送を要求されたデータ列のアドレスが、前記今回転送したデータ列のアドレスと所定値以上離れているとき、前記第２のプログラムを最初から転送しなおす請求項３に記載の車両制御装置のためのメモリ書き換えシステム。
【請求項５】
前記書き換え装置から転送されるデータ列の長さを可変にすることができる請求項１に記載の車両制御装置のためのメモリ書き換えシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、車載制御装置のメモリに保存されたプログラムを、外部の書き換え装置から転送される別のプログラムに書き換えるメモリ書き換えシステムに関する。
【０００２】
【従来の技術】
現在、車両は、搭載された複数の電子制御ユニット（以下、「ＥＣＵ」という）により、空燃比、燃料噴射量、エミッションなどのエンジンに関する制御、パワーウィンドウ、エアバッグ、ＡＢＳなどの車体に関する制御など、様々に制御されている。ＥＣＵは、車両に搭載された様々なセンサによって感知された車両の現在の状態および走行状況に基づいて、車両を様々に制御する。
【０００３】
ＥＣＵは、中央演算処理装置（ＣＰＵ）、実行するプログラムおよびデータを格納するＲＯＭ（読み取り専用メモリ）、実行時の作業領域を提供し演算結果などを記憶するＲＡＭ（ランダムアクセスメモリ）、各種センサからの信号を受け取り、およびエンジン各部に制御信号を送る入出力インターフェースを備えている。
【０００４】
上記ＲＯＭに、フラッシュメモリ、ＥＥＰＲＯＭ、ＥＰＲＯＭのような消去および書き込み可能なＲＯＭを使用し、シリアル通信を介して、必要に応じてＲＯＭに格納された情報を書き換えるシステムが知られている。このシステムは、書き換え装置、車両制御装置およびそれらを接続するシリアル通信路から構成される。たとえば、特開昭６３−２２３９０１号公報には、外部の書き換え装置からの要求により、ＥＣＵを車両に搭載したままで、ＳＣＩ端子（シリアル・コミュニケーション・インターフェース）を介して、ＥＣＵのＥＥＰＲＯＭに格納されたプログラムを変更する方法が記載されている。
【０００５】
このシリアル通信を介したプログラム書き換えシステムにおいては、書き換え装置は、内部に格納されたプログラムコードを一定のバイト数ごとに順次シリアルデータ列に変換して車両制御装置に送信する。送信されるプログラムコードが格納されるメモリのアドレスを車両制御装置に知らせるため、通常は以下のいずれかの方法でプログラムコードは送信される。すなわち、１）アドレス値の小さい方から順番にプログラムコードを送信する。または、２）シリアルデータ列に、プログラムコードだけでなく、そのプログラムコードの先頭アドレスを加えて、任意の順番に送信する。
【０００６】
【発明が解決しようとする課題】
しかし、上記のような方法でプログラムコードが格納されるアドレスを車両制御装置に知らせることには、いくつかの問題点がある。上記の方法１）においては、アドレス値の小さい方から順番にプログラムコードを送信するので、メモリの全領域にプログラムコードを送信しなければならない。途中で送信が中断されると、その停止がプログラムコードの送信終了によるものなのか、通信路の障害によるものなのか判断することができず、信頼性が低下するからである。したがって、すべてのメモリ領域が使用されない場合（通常、すべてのメモリ領域を使用することはほとんどない）、空き領域のプログラムコードも送信することとなり、時間の浪費となる。
【０００７】
上記の方法２）においては、方法１）のような時間の浪費は解消される。しかし、途中で通信が中断した後に、車両制御装置が、前回受信したアドレスから値の離れたアドレスが指定されたプログラムコードを受信した場合（たとえば、アドレス１００００から１６バイト受信し、その後アドレス１０１００から１０バイト受信した場合）、そのアドレスが離れている間の部分はプログラムが無い領域なのか、または受信に失敗したためにアドレス値が先に進んでしまったのかを判断することができない。その結果、やはりプログラムコードの転送の信頼性が低下する。
【０００８】
一方、プログラムコードを転送するとき、特にシリアル通信の場合には、電磁波などの外乱の影響により、プログラムコードが正確に転送されないことがある。したがって、ＥＣＵおよび書き換え装置の両方に、転送されたプログラムコードの整合性をチェックする機構を設けるのが望ましい。
【０００９】
したがって、この発明は、上記の問題点を解決するものであり、その目的は、プログラムを転送するときに時間の浪費を招くことなく、プログラム転送の信頼性および転送効率が改善されたメモリ書き換えシステムを提供することである。
【００１０】
この発明の他の目的は、書き換え装置およびＥＣＵの両方において、転送されたプログラムコードの整合性を確かめることのできるメモリ書き換えシステムを提供することである。
【００１１】
【課題を解決するための手段】
上記の課題を解決するため、請求項１の車両制御装置のためのメモリ書き換えシステムは、車両制御装置のメモリに記憶された第１のプログラムを、書き換え装置から転送された第２のプログラムに書き換える、車両制御装置のための書き換えシステムであって、前記第２のプログラムが、該第２のプログラムのプログラムコードと、該プログラムコードが格納されるメモリの先頭アドレスを含む第１のアドレスと、該プログラムコードの次に送信されるプログラムコードが格納されるメモリの先頭アドレスを含む第２のアドレスとを備えるデータ列として転送されるという構成をとる。
【００１２】
請求項１の発明によると、書き換え装置から車両制御装置に転送されるデータ列が、次に送信されるべきデータ列の先頭アドレスを含むので、車両制御装置は、正しいデータ列を受信したかどうか容易に判断することができる。
【００１３】
請求項２の発明は、請求項１の車両制御装置のためのメモリ書き換えシステムにおいて、今回転送されたデータ列の第１のアドレスと、前回転送されたデータ列の第２のアドレスとを比較することにより、前記書き換え装置からデータ列が正しく転送されたかどうか判断する判定手段を備えるという構成をとる。
【００１４】
請求項２の発明によると、データ列の転送が正しく行われたかどうかを判断する判定手段を備えているので、正しい順番でプログラムコードをメモリに格納することができ、プログラム転送の信頼性を向上させることができる。
【００１５】
請求項３の発明は、請求項２の車両制御装置のためのメモリ書き換えシステムにおいて、判定手段が、前記今回転送されたデータ列が正しく転送されなかったと判断したとき、前記書き換え装置に、該今回転送されたデータ列の再送を要求するという構成をとる。
【００１６】
請求項３の発明によると、データ列が正しく転送されなかったと判断された場合には、書き換え装置に再送を要求するので、転送が中断されたデータ列からの転送を自動的に再開することができ、伝送効率を向上させることができる。
【００１７】
請求項４の発明は、請求項３の車両制御装置のためのメモリ書き換えシステムにおいて、書き換え装置は、前記再送を要求されたデータ列のアドレスが、前記今回転送したデータ列のアドレスと所定値以上離れているとき、前記第２のプログラムを最初から転送しなおすという構成をとる。
【００１８】
請求項４の発明によると、書き換え装置において、車両制御装置からのプログラムコードの再送要求に整合性があるかどうかチェックされ、整合性がないと判断した場合にはプログラム全体を最初から転送しなおすので、プログラム転送の信頼性を向上させることができる。
【００１９】
請求項５の発明は、請求項１の車両制御装置において、書き換え装置から転送されるデータ列の長さを可変にすることができるという構成をとる。
【００２０】
請求項５の発明によると、データ列の長さを可変にして転送することができるので、メモリの空き領域の大きさに基づいてプログラムコードの長さを調整することができるようになり、プログラムコードの転送効率を向上させることができる。
【００２１】
【発明の実施の形態】
次に図面を参照してこの発明の実施の形態を、車両制御装置の不揮発性メモリに格納されたセキュリティプログラムを書き換えるシステムに関して説明する。このセキュリティプログラムは、ＥＣＵのメモリに格納された情報を不正に書き換えられることを防止するセキュリティを解除する「キー」の役割を果たす。自動車メーカによって認可された正規の書き換え装置ならば、この「キー」を使用して、その自動車のＥＣＵのメモリに格納された情報を書き換えることができる。
【００２２】
しかし、このキーがメーカー以外の第三者に知られてしまった場合、正規の書き換え装置を使用しなくてもＥＣＵの情報を書き換えることができるようになり、セキュリティが機能しなくなる。したがって、この実施例に示されるセキュリティプログラムを書き換えるシステムは、この「キー」となるセキュリティプログラムを新たなセキュリティプログラムに書き換えて、セキュリティ機能を回復させることを目的としている。
【００２３】
しかし、この発明は、セキュリティプログラムを書き換えるシステムに限定されるものではなく、広く不揮発性メモリに格納された情報を書き換えるシステムに適用することができる。
【００２４】
図１は、この発明によるメモリ書き換えシステムの概要を示す。メモリ書き換えシステムは、車両１に搭載された電子制御ユニット（ＥＣＵ）１０および書き換え装置１１を備える。書き換え装置１１は、車両１のメーカーによって認可された正規の書き換え装置である。ＥＣＵ１０は、消去および書き込み可能なＲＯＭ（図示せず）を備えている。図に示されるように、書き換え装置１１をＥＣＵ１０に接続し、書き換え装置１１を操作することにより、ＥＣＵ１０のＲＯＭに格納されたプログラムおよびデータのような情報が不正に書き換えられることを防止するセキュリティを解除し、該情報を書き換えることができる。
【００２５】
書き換えは、ＥＣＵ１０および書き換え装置１１の間のシリアル通信を介して行われる。書き換え装置１１を操作するユーザーは書き換え装置１１のボタンを操作し、書き換え装置１１に備えられた表示画面と対話しながら、書き換える情報をＥＣＵ１０に送信することができる。しかし、書き換え装置は、図に示されるような形態に限定されるものではなく、シリアル通信を介してＥＣＵ１０と通信するプロトコルを持つ他の形態の装置を書き換え装置として使用するようにしてもよい。
【００２６】
図２は、この発明に従うメモリ書き換えシステムの全体的な機能ブロック図を示す。前述したように、メモリ書き換えシステムは、車両に搭載されたＥＣＵ１０および書き換え装置１１を備える。書き換え装置１１はＥＣＵ１０の外部に設けられ、ＥＣＵ１０とシリアル通信を介して接続される。
【００２７】
ＥＣＵ１０は、マイクロコンピュータおよびこれに付随する回路素子で構成され、中央演算処理装置１４（以下「ＣＰＵ」という）、不揮発性メモリであって、実行するプログラムおよびデータを格納するＲＯＭ１６および１８、実行時の作業領域を提供し演算結果などを記憶するＲＡＭ３７（ランダムアクセスメモリ）、各種センサ３９からの信号を受け取り、車両の各部に制御信号を送る入出力インターフェース３８を備える。各種センサ３９からの信号には、エンジン回転数（Ｎｅ）、エンジン水温（Ｔｗ）、吸気温（Ｔａ）、バッテリ電圧（ＶＢ）、イグニションスイッチ（IGSW）などが含まれる。こうして、ＣＰＵ１４は、入出力インターフェース３８から入力された信号に基づいて、ＲＯＭ１６および１８から制御プログラムおよびデータを呼び出して演算を行い、その結果を入出力インターフェース３８を介して車両の各部に出力し、車両の様々な機能を制御する。
【００２８】
また、ＥＣＵ１０は、インターフェース１２を備える。インターフェース１２は、書き換え装置１１との通信プロトコルを持ち、ＥＣＵ１０および書き換え装置１１の間のシリアル通信を可能にする。
【００２９】
変更可能ＲＯＭ１６は、格納された情報を消去して書き込むことができるメモリであり、たとえばフラッシュメモリ、ＥＥＰＲＯＭによって実現することができる。変更不可能ＲＯＭ１８は、上記のフラッシュメモリ、ＥＥＰＲＯＭのような消去および書き込み可能なＲＯＭのメモリ領域のうち、ある領域を変更不可能領域と設定することによって実現することができ、または製造時にデータが決められ、その後に消去および書き込みができないマスクＲＯＭや、または１度だけデータを書き込むことができるＰＲＯＭなどによっても実現することができる。
【００３０】
これらのＲＯＭ１６および１８は、別個のメモリとして実現してもよく、または１つのメモリのメモリ領域を２つの領域に分割して一方を変更可能領域として使用し、他方を変更不可能領域として使用することもできる。後者の場合、たとえばＥＥＰＲＯＭのある特定の領域を変更不可能領域としてプログラムなどを格納した後、それ以外の空き領域に対してスタートおよびエンドアドレスを指定することにより、変更可能領域を新たに設定することができる。
【００３１】
ここで、ＲＯＭ１６、１８およびＣＰＵの実現の形態例について、図３を参照する。図３においては、ＲＯＭ１６および１８はフラッシュメモリによって実現される。図３の（ａ）は、フラッシュメモリがＣＰＵと別個に設けられた形態を示す。書き換え装置との通信により書き換えモードに移行すると、ＣＰＵは、書き換え装置からプログラムコードを受信し、書き換えを実行するプログラムを呼び出して、受信したプログラムコードをフラッシュメモリに書き込む。
【００３２】
一方、図３の（ｂ）は、フラッシュメモリが内蔵されて、ＣＰＵと共に１チップを構成する形態を示す。書き換え装置からの信号によって書き換えモードに移行すると、書き換え装置からのプログラムコードは、ＣＰＵに組み込まれた機能によって自動的にフラッシュメモリに書き込まれる。いずれの形態においても、この発明によるメモリ書き換えシステムを適用することができる。
【００３３】
図２に戻ると、変更可能ＲＯＭ１６にはセキュリティ関数ｆ２が格納されており、この関数ｆ２が、書き換え装置１１による書き換えの対象となる。セキュリティ関数ｆ２は、ＲＯＭ１６に格納された情報が不正に書き換えられることを防止するセキュリティ機能を実現する関数であり、上記の「キー」に該当する。
【００３４】
変更不可能ＲＯＭ１８には、認証部３１、乱数生成部３３および書き換え実行部３５を実現するプログラムが格納される。認証部３１は、書き換え装置１１からのセキュリティ解除要求に応答して、セキュリティ関数ｆ２および乱数Ｒを使用し、書き換え装置１１が正規の書き換え装置かどうかを判断する。乱数Ｒを使用するのは、セキュリティ機能を向上させるためであり、乱数Ｒは、乱数生成部３３により生成される。正規の書き換え装置と判断したならば、セキュリティを解除する。
【００３５】
書き換え実行部３５は、認証部３１によりセキュリティが解除された後、セキュリティ関数ｆ２を消去し、書き換え装置１１から新たなセキュリティ関数ｆ３を構成するデータ列を受信し、受信したデータ列に整合性があると判断したならば、それをＲＯＭ１６に書き込む。反対に、書き込み実行部３５は、受信したデータ列に整合性が無いと判断したならば、正しいデータ列を再送するよう書き換え装置１１に要求する。
【００３６】
書き換え装置１１は、セキュリティ関数ｆ１および新たなセキュリティ関数ｆ３を持つ。セキュリティ関数ｆ１は、上記のＲＯＭ１６に格納されたセキュリティ関数ｆ２と対になってセキュリティ機能を実現する関数である。セキュリティ関数ｆ２が第三者によって変更されていなければ、書き換え装置１１の持つセキュリティ関数ｆ１およびＥＣＵ１０の持つセキュリティ関数ｆ２は、同じ関数である。代わりに、セキュリティ関数ｆ１およびｆ２の間に何らかの一定の関係を持たせるようにしてもよい。
【００３７】
新たなセキュリティ関数ｆ３は、新たなセキュリティ機能を実現するものとして、セキュリティ関数ｆ２の代わりにＲＯＭ１６に格納されることになる関数である。新たなセキュリティ関数ｆ３は、現在のセキュリティ関数ｆ１およびｆ２に何らかの変更を加えたものであり、たとえば関数の式自体が異なったもの、または関数に含まれる定数を変更したものでよい。たとえば、関数ｆ１およびｆ２が、ｆ１＝ｆ２＝Ａ×Ｒ＋Ｂ（ここで、Ａ＝１０，Ｂ＝５）であるとき、新たなセキュリティ関数ｆ３をｆ３＝Ａ＋Ｒ×Ｂ（ここで、Ａ＝１０，Ｂ＝５）のように設定することができる。または、ｆ１およびｆ２の定数ＡおよびＢの値を、Ａ＝５、Ｂ＝１０のように変更することもできる。
【００３８】
また、書き換え装置１１は、セキュリティ解除要求部２１、書き換え要求部２３、データ列組立部２５を備え、これらはプログラムとして書き換え装置１１のメモリに格納されている。セキュリティ解除要求部２１は、セキュリティ関数ｆ１を使用して、ＥＣＵ１０に対してセキュリティ解除を要求する。
【００３９】
データ列組立部２５は、ＥＣＵ１０に送信される新たなセキュリティ関数ｆ３のプログラムコードを、シリアル通信に適したデータ列に変換する。以下に図４を参照して詳細に説明するように、それぞれのデータ列は、該データ列に含まれるプログラムコードが格納されるＲＯＭ１６の第１のアドレスと、次に転送されるプログラムコードが格納される第２のアドレスとを含むよう組み立てられる。書き換え要求部２３は、セキュリティが解除された後に、データ列組立部２５によって組み立てられた新たなセキュリティ関数ｆ３を表すデータ列をＥＣＵ１０に送信する。
【００４０】
再送チェック部２７は、ＥＣＵ１０からの再送要求の整合性をチェックし、整合性のあるデータ列の再送が要求されたと判断したならば、その要求されたデータ列を再送するよう書き換え要求部２３に命令し、整合性のないデータ列の再送が要求されたと判断したならば、セキュリティ関数ｆ３を構成するデータ列を最初から転送しなおすよう書き換え要求部２３に命令する。後者の場合、最初からすべてのデータ列を転送しなおす代わりに、再送要求される直前に転送したデータ列からいくつかさかのぼったデータ列（たとえば、５個前のデータ列）から転送しなおすようにしてもよい。
【００４１】
整合性の有無は、再送要求されたデータ列のアドレスが、再送要求の直前に転送したデータ列のアドレスと所定値以上離れているかどうかに基づいて判断する。この実施例では、具体的にいうと、再送要求されたデータ列のアドレスと、再送要求の直前に転送したデータ列、その１つ前に転送したデータ列および次回転送するデータ列の３つのアドレスとそれぞれ比較し、いずれかに一致すれば整合性ありと判断する。これは、いずれにも一致しなければ、再送要求されたデータ列のアドレスが、現在転送中のプログラムコードのアドレスと離れすぎており、再送要求にエラーがあると考えられるからである。
【００４２】
上記のように３つのアドレスと比較するのではなく、そのうちのいずれか、たとえば再送要求される直前に転送したデータ列とのみ比較して、整合性を確かめるようにしてもよい。または、再送要求されたデータ列のアドレスが、再送要求される直前に転送したデータ列のアドレスと所定値以上離れていなければ、整合性ありと判断するようにしてもよい。
【００４３】
ここで、図４を参照して、データ列組立部２５によって組み立てられるシリアルデータ列の形式を詳細に説明する。データ列組立部２５は、転送されるプログラムをある長さのプログラムコード（たとえば、８バイト）に分割し、該プログラムコードに第１および第２のアドレスフィールドを付加してシリアルデータ列を組み立てる。
【００４４】
図４に示されるように、シリアルデータ列のそれぞれは、プログラムコードの先頭に第１のアドレスフィールドを持ち、末尾に第２のアドレスフィールドを持つ。しかし、第１および第２のアドレスフィールドとプログラムコードの配置は、異なるものでもよい。第１のアドレスフィールドには、このプログラムコードが格納されるメモリの先頭アドレスが含まれる。第２のアドレスフィールドには、次に送信されるプログラムコードが格納されるメモリの先頭アドレスが含まれる。すなわち、データ列１の第２のアドレス「３Ｆ５０」は、次に送信されるデータ列２の第１のアドレスに等しい。
【００４５】
このように、データ列の第２のアドレスフィールドに、次に送信されるデータ列の先頭アドレスを持たせることにより、ＥＣＵは、データ列を正しい順番で受信したかを判断することができる。具体的には、ＥＣＵ１０の書き換え実行部３５は、書き換え装置１１からデータ列を受信すると、前回受信したデータ列の第２のアドレスと、今回受信したデータ列の第１のアドレスとを比較し、一致したならば、受信したプログラムコードを、変更可能ＲＯＭ１６の、第１のアドレスが示すアドレスに書き込む。
【００４６】
こうして、転送の途中で通信が中断した場合には、ＥＣＵは、プログラムコードが前回どこまでメモリに格納されて、次にどのプログラムコードが転送されるべきかを判断して、次に再送されるべきデータ列を書き換え装置に通知することができるので、プログラム転送の信頼性が向上する。
【００４７】
たとえば、図４に示されるデータ列１の転送とデータ列２の転送の間で通信に障害が生じて、転送が中断された場合、すでにメモリに格納されたデータ列１の第２のアドレス３Ｆ５０によって、ＥＣＵ１０には、データ列１までが正しくメモリに格納され、次に受信するデータ列２はアドレス３Ｆ５０から始まるということがわかる。したがって、アドレス３Ｆ５０から始まるデータ列２の再送を書き換え装置１１に要求することにより、データ列２の転送から通信を再開することができる。
【００４８】
または、アドレス３Ｆ２０から始まるデータ列１がメモリに格納された後、アドレス３Ｆ７０から始まるデータ列３が送信された場合には、データ列１の第２のアドレス３Ｆ５０により、ＥＣＵ１０には、アドレス３Ｆ２０と３Ｆ７０の間のアドレス３Ｆ５０から始まるデータ列が受信されていないということがわかる。したがって、アドレス３Ｆ５０から始まるデータ列２の転送を書き換え装置１１に要求することにより、たとえ通信の障害によってデータ列２の転送が失敗していた場合でも、速やかにプログラム転送を正常に復帰させることができる。
【００４９】
なお、最後に送信されるデータ列には、第２のアドレスフィールドを設けなくてもよく、または特別の制御コードを入れてこれが最後のデータ列であることを示すようにしてもよい。
【００５０】
このように、書き換え装置１１は、任意のアドレスから開始するプログラムコードをＥＣＵ１０に送信することができるので、無駄なプログラム転送をなくすことができ、伝送効率が向上する。
【００５１】
データ列の転送および書き込みは、比較的時間を要する。したがって、メモリの空き領域に対応するプログラムコードを転送しないことによって、転送効率を向上させるのが好ましい。この発明に従うメモリ書き換えシステムにおいては、転送されるプログラムコードの長さを可変にすることができるので、メモリの空き領域に対応するプログラムコードを含まないようデータ列を作成することができる。
【００５２】
図５の（ａ）は、実施の一例として、書き換え装置からＥＣＵに転送されるプログラムコードの例を、アドレスと共に示す。図５の（ｂ）は、プログラムコードの長さを固定長としたときに組み立てられるデータ列の例を示す。図５の（ｃ）および（ｄ）は、プログラムコードの長さを可変長としたときに組立られるデータ列の例を示す。
【００５３】
図５の（ａ）において、「ＦＦ」は空き領域を示す。したがって、アドレス３Ｆ２０〜３Ｆ５０の領域においてプログラムコードとしての実質的なデータが含まれるのは、アドレス３Ｆ２０〜３Ｆ２３、３Ｆ２８〜３Ｆ２９、３Ｆ２Ｂ〜３Ｆ２Ｃ、３Ｆ４８〜３Ｆ４Ｆおよび３Ｆ５０である。
【００５４】
図５の（ａ）のプログラムコードを８バイトの固定長で転送する場合には、データ列組立部２５は、該プログラムコードを先頭アドレスから８バイト単位に分割し、それぞれの８バイトのプログラムコードに２つのアドレスフィールド（それぞれのアドレスフィールドは２バイトである）を付加して、１２バイトのデータ列を作成する。しかし、それぞれの８バイトのプログラムコードがすべて「ＦＦ」のバイトで構成されるときは、そのプログラムコードからはデータ列を作成しない。これは、「ＦＦ」はメモリの空き領域であって転送する必要がないからである。したがって、図５の（ｂ）に示すように、それぞれが１２バイトの、全部で３つのデータ列が組み立てられる。したがって、合計して３６バイトのデータ量が転送される。
【００５５】
図５の（ａ）のプログラムコードを可変長で転送しようとする場合には、データ列組立部は、転送されるべきプログラムコードを先頭アドレスから走査し、「ＦＦ」バイトを含まないようプログラムコードを可変長に分割し、それぞれのプログラムコードのかたまりに２つのアドレスフィールド（それぞれのアドレスフィールドは２バイトである）を付加して、データ列を作成する。したがって、図５の（ｃ）に示すように、全部で４つのデータ列が組み立てられ、合計して３２バイトのデータ量が転送される。この方式では、「ＦＦ」バイトはまったく転送されないので、図５の（ｂ）に比べて転送効率が向上する。
【００５６】
図５の（ｃ）によって可能な転送効率をさらに向上させるため、この発明によるデータ列組立部２５は、メモリの空き領域の大きさに基づいて、データ列を組み立てることもできる。言い換えると、プログラムコードが含まれる領域間に空き領域がある場合、その空き領域の大きさが所定値より大きければ、その空き領域を転送しないようデータ列を作成し、空き領域の大きさが所定値以下ならば、その空き領域を含めてデータ列を作成する。
【００５７】
図５の（ｃ）のアドレス３Ｆ２８および３Ｆ２Ｂから開始する２つのプログラムコードの間には、アドレス３Ｆ２Ａに対応する「ＦＦ」バイトが１つのみである。したがって、アドレスフィールドの長さを考慮すると、上記２つのプログラムコードは２つのデータ列として送信されるよりも、図５の（ｄ）に示されるように、アドレス３Ｆ２Ａの「ＦＦ」を含む１つのデータ列として送信する方が効率が良い。したがって、データ列組立部２５は、プログラムコードを走査して、たとえば「ＦＦ」バイトの連続が４つに満たない場合には、図５の（ｃ）のように別個のデータ列としてではなく、図５の（ｄ）のように１つのデータ列としてデータ列を作成する。こうして、転送されるデータ量は２９バイトとなり、さらに転送効率を向上させることができる。
【００５８】
この発明に従うメモリ書き換えシステムは、図５の（ｂ）〜（ｄ）のいずれの形態のデータ列をも含むものとする。
【００５９】
図１に示されるメモリ書き換えシステムの動作の概要を、図６および図７を参照しながら説明する。書き換え装置１１をＥＣＵ１０に接続した後、書き換え装置１１のたとえば何らかの操作ボタンを押すことにより、書き換え動作が開始する。または、ＥＣＵを操作して、書き換え動作を開始するようにしてもよい。
【００６０】
ステップ４１において、書き換え装置１１のセキュリティ解除要求部２１は、ＥＣＵ１０にセキュリティ解除要求信号を送信する。ＥＣＵ１０は、それに応答して、正規の書き換え装置が接続されていることを確認する認証処理を開始する。
【００６１】
認証処理の一例を図７に示す。ステップ５１において、書き換え装置１１のセキュリティ解除要求部２１は、任意の数Ｒを送信するようＥＣＵ１０に要求する。それに応答して、ＥＣＵ１０の認証部３１が呼び出される。認証部３１は、乱数生成部３３を呼び出して、乱数によって任意の数Ｒを設定し、その任意の数Ｒを書き換え装置１１に送信する（ステップ５２）。なお、上記の乱数を使用して数Ｒを設定する代わりに、異なる機構を用いて任意に数Ｒを設定するようにしてもよい。書き換え装置１１は、予め内部に持っているセキュリティ関数ｆ１を使用して、Ｋ１＝ｆ１(Ｒ)により、数Ｒに対する関数ｆ１の関数値Ｋ１を求める（ステップ５３）。
【００６２】
一方、ＥＣＵ１０の認証部３１は、変更可能ＲＯＭ１６に格納されたセキュリティ関数ｆ２を使用して、Ｋ２＝ｆ２（Ｒ）を計算して関数値Ｋ２を求める（ステップ５４）。書き換え装置１１のセキュリティ解除要求部２１は、関数値Ｋ１をＥＣＵ１０に送信する（ステップ５５）。認証部３１は、書き換え装置１１からの関数値Ｋ１と、内部で生成した関数値Ｋ２を比較し（ステップ５６）、一致したならば、正規の書き換え装置と判断して、書き換え許可信号を書き換え装置１１に送信する（ステップ５７）。このように、書き換えを実行するには、まずセキュリティを解除する必要があるので、現在のセキュリティ関数ｆ１およびｆ２を使用して、セキュリティを解除する。
【００６３】
図６に戻り、ＥＣＵ１０によって書き換え装置１１が正規のものであると認証されて書き換えが許可されたならば、ステップ４２に進む。書き換え装置１１の書き換え要求部２３は、書き換え開始信号をＥＣＵ１０に送り、ＥＣＵ１０の書き換え実行部３５は、準備ができたならば、開始許可信号を返す。ステップ４３において、書き換え要求部２３は、書き換え動作モードに移行する要求をＥＣＵ１０に送り、ＥＣＵ１０の書き換え実行部３５は動作モード移行処理を行う。ステップ４４において、書き換え要求部２３は動作モードの移行が完了したかをＥＣＵ１０に問い合わせ、書き換え実行部３５は、動作モードの移行が完了したならば、移行完了信号を書き換え装置１１に送信する。
【００６４】
ステップ４５において、書き換え要求部２３は、変更可能ＲＯＭ１６に格納されたセキュリティ関数ｆ２の消去を要求し、書き換え実行部３５は応答して、ＲＯＭ１６のセキュリティ関数ｆ２を消去する。
【００６５】
書き換え装置１１においては、新たなセキュリティ関数として関数ｆ３が設定され、データ列組立部２５によって、この新たなセキュリティ関数ｆ３は、ＥＣＵ１０に送信するためのシリアルデータ列として準備されている。このセキュリティ関数ｆ３の設定およびそのデータ列の組立は、通常、書き換え装置１１によってセキュリティ解除要求または書き換え開始信号をＥＣＵ１０に送信する前に行われる。しかし、ステップ４５の直前に行うようにしてもよい。
【００６６】
セキュリティ関数ｆ３は、たとえば書き換え装置１１に予め保存されているいくつかの関数の中から選択することによって設定することもでき、またはユーザーが書き換え装置１１を操作しながら新たな関数を作成するようにしてもよい。
【００６７】
ステップ４６において、書き換え要求部２３は、書き込み要求信号と共に、新たなセキュリティ関数ｆ３のプログラムコードを含むデータ列をＥＣＵ１０に送信する。書き換え実行部３５は、書き換え装置１１からデータ列を受信し、該データ列の第１のアドレスを、前回受信されたデータ列の第２のアドレスと比較する。一致した場合には、該データ列に含まれるプログラムコードを変更可能ＲＯＭ１６に書き込む。書き込みを完了すると、書き換え実行部３５は、書き込み完了通知を書き換え装置１１に送信する。書き換え装置１１は、それに応答して、次のデータ列をＥＣＵ１０に送信する。このステップ４６は、ＲＯＭ１６に、セキュリティ関数ｆ３のすべてのプログラムコードの書き込みが完了するまで繰り返される。
【００６８】
図には示されていないが、ステップ４６において、受信したデータ列の第１のアドレスと、前回受信されたデータ列の第２のアドレスが一致しなければ、書き換え実行部３５は書き換え装置１１にデータ列の再送要求信号を送信する。書き換え装置１１の再送チェック部２７は、再送要求信号に応答して、再送要求されたデータ列のアドレスが、再送要求の直前に転送したデータ列のアドレス、そのデータ列の前に転送したデータ列のアドレスおよび次回転送するデータ列のアドレスのいずれかに一致するかどうか調べる。一致すれば、書き換え要求部２３は、再送要求されたデータ列を転送し、一致しなければ、新たなセキュリティ関数ｆ３を最初のデータ列から転送しなおす。書き換え実行部３５は、前述したように、受信したデータ列に含まれるプログラムコードを書き込み、書き込み完了通知を書き換え装置１１に送信する。
【００６９】
書き込みが完了したならば、書き換え要求部２３は、書き換え動作モードを解除する要求をＥＣＵ１０に送信する（ステップ４７）。書き換え実行部３５は、それに応答して書き換え動作モードを解除する。書き換え装置１１によって、ＲＯＭ１６に格納されたセキュリティ関数がｆ３に変更されたので、書き換え装置１１で使用されるセキュリティ関数もｆ３に設定され、その後のセキュリティ機能は、セキュリティ関数ｆ３によって実現される。新たなセキュリティ関数ｆ３を設定した後、または新たなセキュリティ関数ｆ３をＲＯＭ１６に書き込んだ後、前のセキュリティ関数ｆ１を消去するすることができる。
【００７０】
図８は、プログラム転送におけるＥＣＵの動作を示すフローチャートである。図６において、書き換え装置からＥＣＵに対して書き込み要求信号が発行された時、このフローに入る。ステップ７１において、書き換え装置からデータ列を受信したかどうか判断し、受信したならばステップ７２に進む。１つのデータ列が受信されるたびに、前回受信したデータ列の第２のアドレスおよび今回受信したデータ列の第１のアドレスを比較する（ステップ７３）。
【００７１】
なお、最初に受信したデータ列には、比較する前回のデータ列が存在しないので、ステップ７４に進む。または、最初であることを示す何らかのコードが含まれているかどうかチェックするようにしてもよい。
【００７２】
ステップ７３において一致したならば、正しいデータ列を受信したと判断し、受信したデータ列におけるプログラムコードを、変更可能ＲＯＭの、該データ列の第１のアドレスで示されるアドレスに格納する（ステップ７４）。ステップ７３において一致しなければ、正しいデータ列が受信されなかったことを示すので、前回受信した第２のアドレスを書き換え装置に通知して、その第２のアドレスから開始するデータ列の再送を要求する。このとき、ＥＣＵにおいてエラーを示す何らかの表示をするようにしてもよい。
【００７３】
通知を受けた書き換え装置は、ＥＣＵから送られてきた第２のアドレスから開始するデータ列を再び送信する。書き換え装置は、この再送を何回か試みることができ、予め決められた回数だけ再送を試みてもエラーになるならば、処理を中止することができる。そのような場合、ＥＣＵは、最初からデータ列を転送しなおすよう書き換え装置に要求することもできる。
【００７４】
こうして、ＥＣＵは、不正な順序でデータ列を受信することがなくなり、車両制御装置が誤ったプログラムコードを保存することを回避することができる。
【００７５】
図９は、書き換え装置におけるプログラム転送の動作を示すフローチャートである。書き換え装置は、ＥＣＵから再送要求を受信しない限り、ＥＣＵからの書き込み完了信号に応答して、次のデータ列を転送する（ステップ８１および８６）。ステップ８１において、ＥＣＵから再送要求を受信したならば、再送要求されたデータ列のアドレスを、前々回および前回にＥＣＵに転送したデータ列のアドレス、および次回転送するデータ列のアドレスと比較する（ステップ８２）。
【００７６】
再送要求されたデータ列のアドレスが、これら３つのデータ列のアドレスのいずれかと一致したならば（ステップ８３）、再送要求に整合性があると考えられるので、要求されたデータ列の再送を実行する（ステップ８４）。ステップ８３において、いずれのアドレスとも一致しなければ、再送要求されたデータ列のアドレスは正確でないと考えられるので、セキュリティ関数ｆ３全体を最初から転送しなおす（ステップ８５）。この場合、実際には、すでに送信されて書き込まれたプログラムコードを消去するよう、ＥＣＵに要求する。
【００７７】
こうして、書き換え装置は、ＥＣＵからの再送要求に整合性があるかどうかチェックするので、誤ったアドレスのデータ列が転送されて、車両制御装置に格納されるということを回避することができる。
【００７８】
【発明の効果】
請求項１の発明によると、書き換え装置から車両制御装置に転送されるデータ列が、次に送信されるべきデータ列の先頭アドレスを含むので、車両制御装置は、正しいデータ列を受信したかどうか容易に判断することができる。
【００７９】
請求項２の発明によると、データ列の転送が正しく行われたかどうかを判断する判定手段を備えているので、正しい順番でプログラムコードをメモリに格納することができ、プログラム転送の信頼性を向上させることができる。
【００８０】
請求項３の発明によると、データ列が正しく転送されなかったと判断された場合には、書き換え装置に再送を要求するので、転送が中断されたデータ列からの転送を自動的に再開することができ、伝送効率を向上させることができる。
【００８１】
請求項４の発明によると、書き換え装置において、車両制御装置からのプログラムコードの再送要求に整合性があるかどうかチェックされ、整合性がないと判断した場合にはプログラム全体を最初から転送しなおすので、プログラム転送の信頼性を向上させることができる。
【００８２】
請求項５の発明によると、データ列の長さを可変にして転送することができるので、メモリの空き領域の大きさに基づいてプログラムコードの長さを調整することができるようになり、プログラムコードの転送効率を向上させることができる。
【図面の簡単な説明】
【図１】この発明に従うメモリ書き換えシステムの概要を示す図。
【図２】この発明の一実施例における、メモリ書き換えシステムの全体を示すブロック図。
【図３】この発明の一実施例における、メモリ書き換えシステムのＥＣＵのＲＯＭおよびＣＰＵの形態例を示す図。
【図４】この発明の一実施例における、メモリ書き換えシステムのプログラム転送時のデータ列の形式を示す図。
【図５】この発明の一実施例における、（ａ）転送されるプログラムコードおよび対応するアドレス、（ｂ）データ列が固定長で組み立てられる例、（ｃ）データ列が可変長で組み立てられる例、（ｃ）メモリの空き領域を考慮してデータ列が可変長で組み立てられる例、を示す図。
【図６】この発明の一実施例における、メモリ書き換えシステムの動作手順を示す図。
【図７】この発明の一実施例における、メモリ書き換えシステムの認証手順を示す図。
【図８】この発明の一実施例における、メモリ書き換えシステムのプログラム転送時のＥＣＵの動作を示すフローチャート。
【図９】この発明の一実施例における、メモリ書き換えシステムのプログラム転送時の書き換え装置の動作を示すフローチャート。
【符号の説明】
１０  ＥＣＵ                    １１  書き換え装置
１２  インターフェース          １４  ＣＰＵ
１６  変更可能ＲＯＭ            １８  変更不可能ＲＯＭ
【図１】
0003785299.tif 000002
【図２】
0003785299.tif 000003
【図３】
0003785299.tif 000004
【図４】
0003785299.tif 000005
【図５】
0003785299.tif 000006
【図６】
0003785299.tif 000007
【図７】
0003785299.tif 000008
【図８】
0003785299.tif 000009
【図９】
0003785299.tif 000010