(57)【要約】【課題】データ保存部へのデータの書き込みに伴うデータ管理部の消去動作を低減することができ、不揮発性メモリの書き換え可能な使用回数に達するのを抑制することができる車両制御装置を提供する。【解決手段】制御回路２は、フラッシュメモリ５のデータ保存部５ａに車両を制御するためのデータを書き込み、データ保存部５ａにデータが正常に書き込めたか否かをデータ管理部５ｂに書き込む。制御回路２は、フラッシュメモリ５のデータ保存部５ａへのデータ書き込み更新時に、データ管理部５ｂの未使用領域に更新情報を追記する方式を採用している。制御回路２は、データ書き込み更新開始時に、データ管理部５ｂにデータ書き込み中を示す状態のデータを追記し、データ書き込み更新終了時にデータ書き込み済みを示す状態を追記する。【選択図】図１
2018142211.tif 000002
【特許請求の範囲】
【請求項１】
車両を制御するためのデータが記憶されるデータ保存部（５ａ、２０ａ、２０ｂ）および前記データ保存部にデータが正常に書き込めたか否かを示すデータ管理部（５ｂ、２０ｃ、２０ｄ）を有する書き換え可能な不揮発性メモリ（５、２０）と、
前記不揮発性メモリに対してデータの書き込み処理をする制御回路（２）とを備え、
前記制御回路は、前記不揮発性メモリの前記データ保存部へのデータ書き込み更新時に前記データ管理部の未使用領域に更新情報を追記する方式を採用し、前記データ書き込み更新開始時にデータ書き込み中を示す状態のデータを追記し、前記データ書き込み更新終了時にデータ書き込み済みを示す状態を追記する車両制御装置。
【請求項２】
前記制御回路（２）は、前記不揮発性メモリ（５）の前記データ保存部（５ｂ）へのデータ書き込み更新時に前記データ管理部の未使用領域に更新情報を追記する方式としてリスト構造を採用し、前記データ書き込み更新開始時に次の書き込みアドレスを追記し、前記データ書き込み更新終了時にデータ書き込み済みを示す状態を追記する請求項１に記載の車両制御装置。
【請求項３】
前記制御回路（２）は、電源オン時に前記不揮発性メモリの前記データ管理部の先頭アドレスから書き込み位置を探索し、有効となる書き込み状態を判断してその書き込み状態からデータ保存部にデータが正常に書き込まれたことを判断する請求項１または２に記載の車両制御装置。
【請求項４】
前記制御回路（２）は、前記不揮発性メモリのデータ保存部にデータ書き込みをする際に、前記データ管理部の使用領域が満杯になっている場合には、前記データ管理部のデータを消去する請求項１から３のいずれか一項に記載の車両制御装置。
【請求項５】
制御回路２は、前記不揮発性メモリに前記データ保存部が複数設定されている場合には、前記データ管理部を複数設定する請求項１から４のいずれか一項に記載の車両制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両制御装置に関する。
【背景技術】
【０００２】
車両制御装置において、フラッシュメモリに代表される不揮発性メモリのデータ管理をするものでは、不揮発性メモリ内のデータ領域をデータ管理部とデータ保存部に分けて管理するものがある。これは実際のデータをデータ保存部に書き込み、データが書き込まれているかどうかを示す値をデータ管理部に書き込むことでデータ管理を行うものである。
【０００３】
この場合、例えばリプログラミングなどでフラッシュメモリへのプログラムデータの書き込みの処理では、まず、データ管理部に記憶されたデータからデータ保存部の未使用領域を検索し、見つかったデータ保存部の未使用領域に対してデータ書き込みを行う。そして、データ書き込み完了後にデータ管理部にデータ書き込み済みを示す値を書き込む。
【０００４】
このような技術においては、データ書き込み中に電源断が発生すると、データ保存部は電源断発生前までのデータが書き込まれているが、データ管理部は未使用領域を示す状態となる。このため、電源復帰後再度データ書き込みを実施する場合に、データ管理部の状態とデータ保存部の状態が不一致となり、データ保存部の同一領域に２重に書き込むといった問題が生じる。
【０００５】
また、一般に、不揮発性メモリでは、書き込み単位サイズより消去単位サイズのほうが大きいため、データ管理部は消去単位サイズで設定される。このため、データ管理部は、データ保存部へのデータ書き込みの時点で消去され、データが正常に書き込まれるとデータ管理部に書き込みがなされる。
【０００６】
したがって、データ管理部に複数のデータ保存部の管理データを配置すると、各データ保存部は１回の消去動作であっても、データ管理部は複数のデータ保存部のデータ書き込み毎に消去動作が行われることとなる。
【０００７】
この結果、データ管理部の書き込み回数がデータ保存部の書き込み回数に比べて多くなり、データ管理部が先に書き換え可能な回数に到達してしまうこととなる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−６２９８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、上記事情を考慮してなされたもので、その目的は、データ保存部へのデータの書き込みに伴うデータ管理部の消去動作を低減することができ、不揮発性メモリの書き換え可能な使用回数に達するのを抑制することができる車両制御装置を提供することにある。
【課題を解決するための手段】
【００１０】
請求項１に記載の車両制御装置は、車両を制御するためのデータが記憶されるデータ保存部および前記データ保存部にデータが正常に書き込めたか否かを示すデータ管理部を有する書き換え可能な不揮発性メモリと、前記不揮発性メモリに対してデータの書き込み処理をする制御回路とを備え、前記制御回路は、前記不揮発性メモリの前記データ保存部へのデータ書き込み更新時に前記データ管理部の未使用領域に更新情報を追記する方式を採用し、前記データ書き込み更新開始時にデータ書き込み中を示す状態のデータを追記し、前記データ書き込み更新終了時にデータ書き込み済みを示す状態を追記する。
【００１１】
上記構成を採用することにより、不揮発性メモリのデータ保存部へのデータ書き込み更新時に、制御回路は、データ管理部の未使用領域に更新情報を追記する方式を採用し、データ書き込み更新開始時にデータ書き込み中を示す状態のデータを追記し、データ書き込み更新終了時にデータ書き込み済みを示す状態を追記する。これにより、通常のデータ書き込み処理において、データ管理部への更新情報の書き込み時に、その都度データをブロック消去することがなくなる。また、書き込み中において電源断が発生した場合でも、再電源オンでデータ書き込みを実施する場合に、制御回路によりデータ管理部のブロック消去をすることがなくなり、不揮発性メモリの書き換え回数が増えるのを抑制することができる。
【図面の簡単な説明】
【００１２】
【図１】第１実施形態を示すブロック構成図
【図２】電源オン時の処理の流れを示す図
【図３】プログラム起動判定処理の流れを示す図
【図４】プログラム書き込み処理の流れを示す図
【図５】フラッシュメモリのデータ領域の説明図
【図６】プログラム書き込み処理の状態の変化図（その１）
【図７】プログラム書き込み処理の状態の変化図（その２）
【図８】第２実施形態を示すプログラム起動判定処理の流れを示す図
【図９】プログラム書き込み処理の流れを示す図
【図１０】フラッシュメモリのデータ領域の説明図
【図１１】プログラム書き込み処理の状態の変化図（その１）
【図１２】プログラム書き込み処理の状態の変化図（その２）
【図１３】第３実施形態を示す電源オン時の処理の流れを示す図
【図１４】フラッシュメモリのデータ領域の説明図
【発明を実施するための形態】
【００１３】
（第１実施形態）
以下、本発明の第１実施形態について、図１〜図７を参照して説明する。
図１は概略的なブロック構成を示すもので、車両制御装置１は、車両に設けられ、図示しない他の装置を制御する。車両制御装置１は、ＣＰＵ（central processing unit）などの制御回路２を中心として、通信部３、ＲＡＭ（random access memory）４および不揮発性メモリであるフラッシュメモリ５などを備えている。フラッシュメモリ５は、内部の記憶領域としてデータ保存部５ａおよびデータ管理部５ｂを区分した領域に設定されている。
【００１４】
制御回路２は、外部に設けられるデータ送受信装置１０との間で通信部３を介してデータの授受を行い、フラッシュメモリ５に書き込み制御を行う。車両制御装置１は、例えば、外部からデータ送受信装置１０を介してリプログラミングのデータを取り込み、フラッシュメモリ５のデータを書き換える。このとき、制御回路２は、後述するプログラムに基づいて、フラッシュメモリ５への書き込み処理の制御を行う。
【００１５】
次に、上記構成の作用について、図２から図７も参照して説明する。
図２は、電源オン時に制御回路２により実行される処理内容を示している。電源がオンされると、制御回路２は、まずステップＡ１で、プログラム起動判定処理を実施する。図３は、ステップＡ１のプログラム起動判定処理の具体的な内容を示している。制御回路２は、ステップＢ１で、フラッシュメモリ５の書き込み位置を、データ管理部５ａの先頭に設定する。次に、制御回路２は、ステップＢ２で、書き込み位置の「書き込み中」がブランクであるか否かを確認する。制御回路２は、ステップＢ２で、「書き込み中」のデータがブランクであれば、ＹＥＳと判断して書き込み位置を確定してプログラム起動判定処理を終了する。
【００１６】
また、制御回路２は、ステップＢ２で、「書き込み中」のデータがブランク以外すなわち判定値が書き込まれている場合には、ステップＢ２でＮＯと判断してステップＢ３に進み、書き込み位置を次の書き込み位置に設定する。この後、制御回路２は、ステップＢ２に戻り次の書き込み位置が「書き込み中」がブランクであるか否かを判断し、ＹＥＳになるまでステップＢ２、Ｂ３を繰り返し実行する。
【００１７】
制御回路２は、上記のようにしてプログラム起動判定処理が終了すると、図２の電源オン時の処理に戻ってステップＡ２に進む。制御回路２は、ステップＡ２で、アプリケーションが起動可能か否かを判断する。具体的には、書き込み位置の「書き込み完」が判定値と等しいとき、アプリケーション起動可能と判断する。ここで、制御回路２は、アプリケーションが起動可能であれば、ＹＥＳと判断してステップＡ３に進み、アプリケーションにおけるメイン処理を実行する。このとき、制御回路２は、ステップＡ３でアプリケーションを実行しながら、ステップＡ４で外部からのリプログラミング指示すなわちプログラム書き込み指示があるか否かをチェックしている。
【００１８】
制御回路２は、ステップＡ３、Ａ４を実行して、アプリケーションのメイン処理を実施しているときに、外部からプログラム書き込み指示があると、ステップＡ４でＹＥＳと判断してステップＡ５に進み、プログラム書き込み処理を実行する。
【００１９】
上記の場合において、外部からプログラム書き込み指示は、外部のデータ送受信装置１０からユーザなどによりプログラムの書き込みの指示が発生することであり、通信部３を介して制御回路２に取り込まれるものである。
【００２０】
また、制御回路２は、ステップＡ２でアプリケーションが起動可ではなかった場合には、ＮＯと判断してステップＡ６に移行する。制御回路２は、ステップＡ６で、外部からのプログラム書き込み指示があるまで待機状態となり、プログラム書き込み指示があると、ＹＥＳと判断してステップＡ５に進んでプログラム書き込み処理を実行する。
【００２１】
次に、図４および図５を参照して上記したプログラム書き込み処理について説明する。図４は、上記したステップＡ５のプログラム書き込み処理の具体的な流れを示している。また、図５はフラッシュメモリ５の内部におけるアドレスに対応したブロックを示している。
【００２２】
まず、図５において、フラッシュメモリ５のデータ保存部５ａは、アドレス００００ ００００〜ＥＦＦＦ ＦＦＦＦの領域に対応して設定され、データ管理部５ｂは、アドレスＦ００００〜ＦＦＦＦ ＦＦＦＦの領域に対応して設定されている。ここで、データ管理部５ｂのサイズは、フラッシュメモリ５におけるデータ消去の最小単位である１ブロックに相当している。
【００２３】
データ管理部５ｂは、書き込み状態を示すデータ「書き込み状態ｎ」で構成されるものである。「書き込み状態ｎ」を示すデータは、データ保存部５ａが書き込み中かどうかを示す例えば４バイトのデータ「書き込み中」とデータ保存部５ａが書き込み完了しているかどうかを示す例えば４バイトのデータ「書き込み完」のペアで構成される。
【００２４】
なお、図示の例では、「書き込み状態ｎ」のサイズは８バイト単位のデータ長で構成される場合を示したが、これに限らず、データ保存部５ａとデータ管理部５ｂのサイズおよび、配置は任意に設定できるものとする。また、「書き込み状態ｎ」のアドレスも上記設定と異なる設定にすることができる。
【００２５】
この実施形態では、図５に示しているように、データ保存部５ａへのプログラム書き込み処理が実行される毎に、データ管理部５ｂでは、先頭のアドレス「Ｆ０００  ００００」から「書き込み状態１」が書き込まれ、以下順次、次のアドレスに「書き込み状態２」…と追記される。そして最後に書き込みが行われた書き込み位置に「書き込み状態ｎ」のデータが書き込まれている。
【００２６】
次に、プログラム書き込み処理の流れについて図４を参照して説明する。制御回路２は、先に前述した図３のプログラム起動判定処理を実行しているので、フラッシュメモリ５のデータ管理部５ｂの書き込み位置を確定している。制御回路２は、まず、ステップＣ１で、データ管理部５ｂが満杯かどうかを確認する。すなわち、制御回路２は、データ管理部５ｂの書き込み位置がアドレスの末尾に相当する場合には、このままでは書き込みが実施できない満杯の状態である。
【００２７】
ここで、データ管理部５ｂが満杯状態の場合は、制御回路２は、ステップＣ１でＹＥＳと判断し、ステップＣ２に進んでデータ管理部５ｂのデータを全て消去する。そして、制御回路２は、続くステップＣ３で、書き込み位置をデータ管理部５ｂの先頭に設定する。
【００２８】
なお、上記のステップＣ１で、「満杯状態」とは「書き込み中」がブランクである領域がデータ管理部５ｂ内で残り「１」領域の状態を指すものとする。これは、「満杯状態」をブランク残り「０」領域と定義すると、プログラム書き込み完了後の電源オフ、オン時におけるプログラム起動判定処理のステップＡ１にて無限ループとなるからであり、このような無限ループとなるのを避けるため残り「１」領域と定義している。
【００２９】
この後、制御回路２は、ステップＣ４に進んで書き込み位置の「書き込み中」に判定値を書き込む。また、データ管理部５ｂが満杯状態でない場合は、制御回路２は、ステップＣ１でＮＯと判断してステップＣ４にジャンプし、書き込み位置の「書き込み中」に判定値を書き込む。
【００３０】
この後、制御回路２は、ステップＣ５に進み、データ保存部５ａの書き込み対象となる領域のデータを消去し、次のステップＣ６で、外部から通信部３を介して取り込まれるプログラムのデータをデータ保存部５ａにデータを書き込む処理を実行する。続いて、制御回路２は、ステップＣ７で、データ管理部５ｂの書き込み位置の「書き込み完」に判定値を書き込み、プログラム書き込みの処理を終了させる。
【００３１】
以上のようにして、電源オンの後に、外部からプログラム書き込みの指示があるときの制御回路２による動作が実行される。図６および図７は、上記のプログラム書き込み処理を実行した場合の具体例を示すものである。なお、この具体例では、フラッシュメモリ５におけるデータ管理部５ｂの書き込み状態は実施されておらず、先頭のアドレス「Ｆ０００  ００００」がブランクである場合で説明する。
【００３２】
まず、図６は、フラッシュメモリ５において正常にデータ保存部５ａのプログラム書き込みが完了した場合のデータ管理部５ｂの状態を示している。プログラム書き込みの開始前の状態では、制御回路２は、プログラム起動判定処理を実行することで、ステップＢ２で書き込み位置の「書き込み中」がブランクであることからＹＥＳとなり、図６（ａ）に示すように、アドレス「Ｆ０００  ００００」が書き込み位置となる。
【００３３】
この状態で、制御回路２は、図６（ｂ）に示すように、ステップＣ４を実行して書き込み開始時に書き込み位置のアドレス「Ｆ０００  ００００」の「書き込み中」に判定値を書き込む。これにより、現在プログラムのデータをデータ保存部５ａに書き込み中の状態であることが示される。
【００３４】
この後、制御回路２は、ステップＣ５、Ｃ６を実行してプログラムの書き込み処理が完了すると、図６（ｃ）に示すように、ステップＣ７で、書き込み位置のアドレス「Ｆ０００  ００００」の「書き込み完」に判定値を書き込む処理を行う。これにより、データ管理部５ｂに、プログラムの書き込み処理が実行されて、正常に書き込み処理が終了したことが記録される。
【００３５】
次に、図７を参照して、プログラム書き込み中に電源断が発生し、再度プログラム書き込みを実行した場合のデータ管理部の状態について説明する。プログラム書き込みの開始前の状態では、プログラム起動判定処理を実行することで、ステップＢ２で、書き込み位置の「書き込み中」がブランクであることからＹＥＳとなる。この結果、制御回路２は、図７（ａ）に示すように、アドレス「Ｆ０００  ００００」を書き込み位置として設定する。
【００３６】
この状態で、制御回路２は、図７（ｂ）に示すように、ステップＣ４を実行して書き込み開始時に書き込み位置のアドレス「Ｆ０００  ００００」の「書き込み中」に判定値を書き込む。これにより、現在プログラムのデータをデータ保存部５ａに書き込み中の状態であることが示される。
【００３７】
この後、前述のようにして、制御回路２は、ステップＣ５、Ｃ６を実施して、フラッシュメモリ５のデータ保存部５ａにプログラム書き込み処理を実行する。そして、プログラム書き込み処理の実行中に、電源断が発生すると、データ管理部５ｂの書き込み位置の「書き込み完」はブランク状態のままとなる。
【００３８】
そして、再度電源オンとなったときには、制御回路２は、前述同様にして電源オン時の処理を実施し、ステップＡ１のプログラム起動判定処理を実施する。ここでは制御回路２は、ステップＢ１からＢ２に進むと、前回のプログラム書き込み処理時に、プログラムの書き込み処理が完了していないうちに断電となっているので、ＮＯと判断する。
【００３９】
すなわち、図７（ｃ）に示すように、書き込み位置のアドレス「Ｆ０００  ００００」の「書き込み中」に判定値が書き込まれているので、ブランクではない状態となっている。このため、制御回路２は、ステップＢ２でＮＯと判断してステップＢ３に移行する。制御回路２は、ここで、書き込み位置を次の書き込み位置であるアドレス「Ｆ０００  ０００８」に設定する。
【００４０】
制御回路２は、ステップＢ２に戻ると、新たに書き込み位置として設定されたアドレス「Ｆ０００  ０００８」の「書き込み中」がブランクとなっているので、このアドレスを書き込み位置として設定する。この後、制御回路２は、プログラム書き込み開始時に、ステップＣ４を実行して、図７（ｄ）に示すように、書き込み位置のアドレス「Ｆ０００  ０００８」の「書き込み中」に判定値を書き込む。
【００４１】
そして、制御回路２は、ステップＣ５、Ｃ６を実行してプログラムの書き込み処理が完了すると、図７（ｅ）に示すように、ステップＣ７で、書き込み位置のアドレス「Ｆ０００  ０００８」の「書き込み完」に判定値を書き込む処理を行う。これにより、データ管理部５ｂに、プログラムの書き込み処理が実行されて、断電後に正常に書き込み処理が終了したことが記録される。
【００４２】
このような本実施形態によれば、制御回路２により、フラッシュメモリ５のデータ保存部５ａに対してプログラム書き込み開始時に、データ管理部５ｂの書き込み位置のアドレスに「書き込み中」を判定値として設定するようにした。
【００４３】
これにより、プログラム書き込み中に電源断が発生した場合でも、データ管理部５ｂの書き込み位置のデータをブロック消去して書き換えるのではなく、新たに書き込み位置の書き込み中を追記することで設定し、データ書き込みを行うことでプログラム書き込み中の電源断発生後も正常にプログラム書き込みが完了できる。
【００４４】
この結果、プログラム書き込み処理を実行する毎に、データ管理部５ｂのブロック消去をすることがなくなり、フラッシュメモリ５の書き換え回数を大幅に低減して長寿命化を図ることができる。
【００４５】
（第２実施形態）
図８から図１２は第２実施形態を示すもので、以下、第１実施形態と異なる部分について説明する。この実施形態では、制御回路２によるフラッシュメモリ５のデータ管理部５ｂへの書き込み処理の方式を変更している。第１実施形態の方式が「非リスト構造」であったのに対して、この実施形態では「リスト構造」を採用している。
【００４６】
この実施形態では、図１０に示すように、フラッシュメモリ５のデータ管理部５ｂは、書き込み状態を示すデータ「書き込み状態ｎ」で構成される「リスト構造」である。書き込み状態を示すデータは、データ保存部５ａへの書き込みが完了したかどうかを示す例えば４バイトのデータ「書き込み完」と、次の書き込み状態へのアドレスである「書き込みアドレス」のペアで構成される。
【００４７】
また、この実施形態においても、書き込み状態のアドレス、サイズは任意のアドレス、データ長で構成され、データ保存部５ａとデータ管理部５ｂのサイズおよび、配置は任意に設定できるものとする。なお、図１０では、「書き込み状態ｎ」の「書き込みアドレス」を連続的に設定するように示しているが、上記のとおり、必ずしも連続的に設定する必要はなく、任意の設定条件にしたがってブランクな書き込み位置に「書き込みアドレス」を設定することができる。
【００４８】
次に、この実施形態における制御回路２による処理内容の相違点を説明する。
プログラム起動判定処理の流れを示す図８において、制御回路２は、ステップＢ２に代えて、ステップＢ２ａとして書き込み位置の「書き込みアドレス」がブランクであるか否かを判断するものとしている。
【００４９】
ここでは、ステップＢ１で、最初に設定する書き込み位置は、データ管理部５ｂの先頭位置つまりアドレス「Ｆ０００  ００００」としているので、このアドレスの「書き込みアドレス」が設定されていなければ、先頭位置を書き込み位置として設定することができる。
【００５０】
また、ステップＢ２ａで、「書き込みアドレス」が設定されている場合つまりブランクではない場合いは、制御回路２は、ステップＢ３ａに移行し、「書き込みアドレス」で設定されている書き込み位置を設定する。以下、順次書き込み位置の「書き込みアドレス」をたどることで、制御回路２は、最後の書き込み位置で設定した「書き込みアドレス」の書き込み位置がブランク状態であること判定することができる。
【００５１】
プログラム書き込み処理の流れを示す図９において、制御回路２は、第１実施形態と同様にして処理を実行するが、ステップＣ４では、これに代えてステップＣ４ａおよびステップＣ４ｂを実行する。制御回路２は、ステップＣ４ａでは、現在の書き込み位置の「書き込みアドレス」に次の書き込み位置を示すアドレスを書き込む。これにより、書き込み処理が実施されている状態を示すこととなり、第１実施形態における「判定値」と同等の状態となる。制御回路２は、ステップＣ４ｂでは、現在の書き込み位置をステップＣ４ａで書き込んだアドレスに設定する。
【００５２】
図１１および図１２は、上記のプログラム書き込み処理を実行した場合の具体例を示すものである。なお、この具体例では、フラッシュメモリ５におけるデータ管理部５ｂの書き込み状態は実施されておらず、先頭のアドレス「Ｆ０００  ００００」がブランクである場合で説明する。
【００５３】
まず、図１１は、フラッシュメモリ５において正常にデータ保存部５ａのプログラム書き込みが完了した場合のデータ管理部５ｂの状態を示している。プログラム書き込みの開始前の状態では、制御回路２は、図８のプログラム起動判定処理を実行する。これにより、制御回路２は、ステップＢ２ａで書き込み位置の「書き込みアドレス」がブランクであることからＹＥＳとなり、図１１（ａ）に示すように、アドレス「Ｆ０００  ００００」が書き込み位置であることを判定できる。
【００５４】
この状態で、制御回路２は、図１１（ｂ）に示すように、図９のステップＣ４ａを実行して書き込み開始時に書き込み位置のアドレス「Ｆ０００  ００００」の「書き込みアドレス」に次の書き込みアドレスを書き込む。これにより、現在プログラムのデータをデータ保存部５ａに書き込み中の状態であることが示される。次に、制御回路２は、ステップＣ４ｂを実行し書き込み位置を更新する。
【００５５】
この後、制御回路２は、ステップＣ５、Ｃ６を実行してプログラムの書き込み処理が完了すると、図１１（ｃ）に示すように、ステップＣ７で、書き込み位置のアドレス「Ｆ０００  ０００８」の「書き込み完」に判定値を書き込む処理を行う。これにより、データ管理部５ｂに、プログラムの書き込み処理が実行されて、正常に書き込み処理が終了したことが記録される。
【００５６】
次に、図１２を参照して、プログラム書き込み中に電源断が発生し、再度プログラム書き込みを実行した場合のデータ管理部の状態について説明する。プログラム書き込みの開始前の状態では、プログラム起動判定処理を実行することで、ステップＢ２ａで、書き込み位置の「書き込みアドレス」がブランクであることからＹＥＳとなる。この結果、制御回路２は、図１２（ａ）に示すように、アドレス「Ｆ０００  ００００」を書き込み位置として設定する。
【００５７】
この状態で、制御回路２は、図１２（ｂ）に示すように、ステップＣ４ａを実行して書き込み開始時に書き込み位置のアドレス「Ｆ０００  ００００」の「書き込みアドレス」に次の「書き込みアドレス」を書き込む。これにより、現在プログラムのデータをデータ保存部５ａに書き込み中の状態であることが示される。次に、制御回路２は、ステップＣ４ｂを実行し書き込み位置を更新する。
【００５８】
この後、前述のようにして、制御回路２は、ステップＣ５、Ｃ６を実施して、フラッシュメモリ５のデータ保存部５ａにプログラム書き込み処理を実行する。そして、プログラム書き込み処理の実行中に、電源断が発生すると、データ管理部５ｂの書き込み位置の「書き込み完」はブランク状態のままとなる。
【００５９】
そして、再度電源オンとなったときには、制御回路２は、前述同様にして電源オン時の処理を実施し、ステップＡ１のプログラム起動判定処理を実施する。ここでは制御回路２は、ステップＢ１からＢ２ａに進むと、前回のプログラム書き込み処理時に、プログラムの書き込み処理が完了していないうちに断電となっているので、ＮＯと判断する。
【００６０】
すなわち、図１２（ｃ）に示すように、書き込み位置のアドレス「Ｆ０００  ００００」の「書き込みアドレス」に次の書き込みアドレスが書き込まれているので、ブランクではない状態となっている。このため、制御回路２は、ステップＢ２ａでＮＯと判断してステップＢ３ａに移行する。制御回路２は、ここで、書き込み位置を次の「書き込みアドレス」で設定されている書き込み位置であるアドレス「Ｆ０００  ０００８」に設定する。
【００６１】
制御回路２は、ステップＢ２ａに戻ると、新たに書き込み位置として設定されたアドレス「Ｆ０００  ０００８」の「書き込みアドレス」がブランクとなっているので、このアドレスを書き込み位置として設定する。この後、制御回路２は、プログラム書き込み開始時に、ステップＣ４ａを実行して、図１２（ｄ）に示すように、書き込み位置のアドレス「Ｆ０００  ０００８」の「書き込みアドレス」に次の書き込みを行うアドレスを書き込む。次に、制御回路２は、ステップＣ４ｂを実行し書き込み位置を更新する。
【００６２】
そして、制御回路２は、ステップＣ５、Ｃ６を実行してプログラムの書き込み処理が完了すると、図１２（ｅ）に示すように、ステップＣ７で、書き込み位置のアドレス「Ｆ０００  ００１０」の「書き込み完」に判定値を書き込む処理を行う。これにより、データ管理部５ｂに、プログラムの書き込み処理が実行されて、断電後に正常に書き込み処理が終了したことが記録される。
【００６３】
このような本実施形態によっても、第１実施形態と同様の効果を得ることができる。
また、本実施形態によれば、データ管理部５ｂでの書き込み位置のアドレス設定を、「リスト構造」を採用することで、データの書き込み位置をブロック内で平均的にばらつくように設定することもできる。これによって、さらに、フラッシュメモリ５の書き換え回数を少なくして長寿命化を図ることができる。
【００６４】
なお、上記実施形態では、データ管理部５ｂの「書き込み状態ｎ」の「書き込みアドレス」を、順次次のアドレスに指定する方式としているが、これに限らず、任意のアドレスを設定することができる。例えば、一定の条件のもとで次の書き込みアドレスを設定することで、データ管理部５ｂの中のアドレスを平均的に使用することができ、書き換え回数を部分的に増加させることなく使用することもできる。
【００６５】
（第３実施形態）
図１３および図１４は第３実施形態を示すもので、以下、第１実施形態と異なる部分について説明する。この実施形態では、フラッシュメモリ２０の領域の設定を複数のデータ保存部２０ａ、２０ｂおよび複数のデータ管理部２０ｃ、２０ｄとして設ける場合に適用している。
【００６６】
図１４はフラッシュメモリ２０のデータ領域区分を示している。２つのデータ保存部２０ａ、２０ｂは、アプリケーション・データ保存部２０ａおよびキャリブレーション・データ保存部２０ｂとして設けられる。アプリケーション・データ保存部２０ａは、アドレス「００００  ００００」〜「ＢＦＦＦ  ＦＦＦＦ」の範囲に設定され、キャリブレーション・データ保存部２０ｂは、アドレス「Ｃ０００  ００００」〜「ＥＦＦＦ  ＦＦＦＦ」の範囲に設定される。
【００６７】
ここで、アプリケーションとキャリブレーションを別々に保存するのは、例えば、制御プログラムをアプリケーションとし、車種や制御内容に応じてキャリブレーション・データだけを異なるように設定する場合などに適した方式となるからである。このように、キャリブレーション・データを別にして提供することで、アプリケーションを汎用化した状態で提供できるというメリットがある。
【００６８】
２つのデータ管理部２０ｃ、２０ｄは、アプリケーション・データ管理部２０ｃおよびキャリブレーション・データ管理部２０ｄとして設けられる。アプリケーション・データ管理部２０ｃは、アドレス「Ｆ０００  ００００」〜「Ｆ７ＦＦ  ＦＦＦＦ」の範囲に設定され、キャリブレーション・データ管理部２０ｄは、アドレス「Ｆ８００  ００００」〜「ＦＦＦＦ  ＦＦＦＦ」の範囲に設定される。
【００６９】
上記したデータ領域は、アプリケーション・データ保存部２０ａはアプリケーション・データ管理部２０ｃにより管理され、キャリブレーション・データ保存部２０ｂはキャリブレーション・データ管理部２０ｄにより管理される構成とし、それぞれが単独でプログラムの書き換えを実施できる。
【００７０】
図１３は、上記構成の場合における電源オン時に、制御回路２により実行される処理を示している。制御回路２は、ステップＡ１０で、フラッシュメモリ５に設けられたデータ管理部２０ｃおよび２０ｄに対応して２つに対応したループ１を開始する。このループ１では、制御回路２は、ステップＡ１１で、図３に示したプログラム起動判定処理を実施し、書き込み位置を確定する。続くステップＡ１２で、制御回路２は、アプリケーションが起動可能か判断する。
【００７１】
制御回路２は、最初のデータ管理部２０ｃについて、アプリケーションが起動可能で、且つ次のデータ管理部２０ｄがある場合は、ステップＡ１３でループ１を繰り返すために、ステップＡ１１に戻り、次のデータ管理部２０ｄについて処理を実行する。そして、制御回路２は、全てのデータ管理部２０ｃ、２０ｄの検索が完了した場合は、ステップＡ１４でアプリケーションにおけるメイン処理を実行する。このとき、制御回路２は、ステップＡ１４でアプリケーションを実行しながら、ステップＡ１５で外部からのプログラム書き込み指示があるか否かをチェックしている。
【００７２】
制御回路２は、ステップＡ１４、Ａ１５を繰り返し実行して、アプリケーションのメイン処理を実施しているときに、外部からプログラム書き込み指示があると、ステップＡ１５でＹＥＳと判断してステップＡ１６に進み、プログラム書き込み処理のループ２（ステップＡ１６〜Ａ１８）を実行する。
【００７３】
また、制御回路２は、ステップＡ１２でアプリケーションが起動可ではなかった場合には、ＮＯと判断してステップＡ１９に移行する。制御回路２は、ステップＡ１９で、外部からのプログラム書き込み指示があるまで待機状態となり、プログラム書き込み指示があると、ＹＥＳと判断してステップＡ１６に進んでプログラム書き込み処理のループ２を実行する。
【００７４】
プログラム書き込み処理のループ２では、制御回路２は、ステップＡ１７のプログラム書き込み処理を実施する。この場合、制御回路２は、ステップＡ１５で受けたプログラム書き込み指示の数だけ、ループ２のプログラム書き込み処理を実行し、これらが終了すると電源オン時の処理を終了（エンド）する。
【００７５】
また、上記のようなプログラム書き込み処理を実行する場合においても、書き込み処理を実行しているときに断電になった場合には、第１実施形態と同様にして、電源オン時の処理を実行することで、データ管理部２０ｃあるいは２０ｄの書き込み位置のデータをブロック消去して書き換えるのではなく、新たに書き込み位置の書き込み中を追記することで設定し、データ書き込みを行うことでプログラム書き込み中の電源断発生後も正常にプログラム書き込みが完了できる。
【００７６】
この結果、プログラム書き込み処理を実行する毎に、データ管理部２０ｃあるいは２０ｄのブロック消去をすることがなくなり、フラッシュメモリ２０の書き換え回数を大幅に低減して長寿命化を図ることができる。
また、本実施形態によれば、キャリブレーション・データだけを別途書き換えることができるので、短時間で書き込み処理が行えるという利点がある。
【００７７】
（他の実施形態）
なお、本発明は、上述した実施形態のみに限定されるものではなく、その要旨を逸脱しない範囲で種々の実施形態に適用可能であり、例えば、以下のように変形または拡張することができる。
【００７８】
上記第１および第２実施形態では、データ書き込み処理としてプログラム書き込み処理の場合について説明したが、プログラム中に含まれるデータだけを書き換えるために、データ書き込み処理をすることもできる。この場合には、例えば、データ部分を予め指定した領域として設定することができる。また、フラッシュメモリ中に書き込まれているプログラムと書き換えるデータが含まれたプログラムとの差分だけを書き換えるようにすることができる。
【００７９】
不揮発性メモリは、フラッシュメモリ以外のＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）などの不揮発性メモリを用いる場合にも適用することができる。
【００８０】
不揮発性メモリのデータ管理部への書き換えデータの記載の方式は、第１および第２実施形態で示した方法以外に、書き換えの度に追記していく方式であれば他の方法を採用することができる。
【００８１】
第３実施形態では、フラッシュメモリ２０に２つのデータ保存部２０ａ、２０ｂを設定する例を示したが、３つ以上のデータ保存部を設定する場合においても適用することができる。
【００８２】
本開示は、実施例に準拠して記述されたが、本開示は当該実施例や構造に限定されるものではないと理解される。本開示は、様々な変形例や均等範囲内の変形をも包含する。加えて、様々な組み合わせや形態、さらには、それらに一要素のみ、それ以上、あるいはそれ以下、を含む他の組み合わせや形態をも、本開示の範疇や思想範囲に入るものである。
【符号の説明】
【００８３】
図面中、１は車両制御装置、２は制御回路、３は通信部、５、２０はフラッシュメモリ（不揮発性メモリ）、５ａ、２０ａ、２０ｂはデータ保存部、５ｂ、２０ｃ、２０ｄはデータ管理部、１０はデータ送受信装置である。
【図１】
2018142211.tif 000003
【図２】
2018142211.tif 000004
【図３】
2018142211.tif 000005
【図４】
2018142211.tif 000006
【図５】
2018142211.tif 000007
【図６】
2018142211.tif 000008
【図７】
2018142211.tif 000009
【図８】
2018142211.tif 000010
【図９】
2018142211.tif 000011
【図１０】
2018142211.tif 000012
【図１１】
2018142211.tif 000013
【図１２】
2018142211.tif 000014
【図１３】
2018142211.tif 000015
【図１４】
2018142211.tif 000016