(57)【要約】【課題】故障診断回数等を記録する自動車用制御装置の有する、書き換え回数に上限がある不揮発性記憶装置の取り替え回数を抑え、かつこの不揮発性記憶装置の容量の冗長性を抑える。【解決手段】当初、ＡブロックとＢブロックを備えたＥＥＰＲＯＭ３に書き込むデータのうち、書き換え頻度の高いデータをＡブロックに、書き換え頻度の低いデータをＢブロックに書き込み、書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数がＥＥＰＲＯＭ３の書き換え保証回数に達する前に、書き換え頻度の高いデータと書き換え頻度の低いデータを入れ替え、それ以後、書き換え頻度の高いデータをＢブロックに、書き換え頻度の低いデータをＡブロックに書き込む。【選択図】        図６
2004151944.tif 000002
【特許請求の範囲】
【請求項１】
当初、第１の記憶手段と第２の記憶手段を備えた電気的に書き換え可能な不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータを前記第１の記憶手段に、書き換え頻度の低いデータを前記第２の記憶手段に書き込む段階と、
前記書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数が前記不揮発性記憶装置の書き換え保証回数を超える前に、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替える段階と、
前記移し替える段階以後、書き換え頻度の高いデータを前記第２の記憶手段に、書き換え頻度の低いデータを前記第１の記憶手段に書き込む段階と、を備えた不揮発性記憶装置へのデータの書き込み方法。
【請求項２】
前記移し替える段階は、前記第１および第２の記憶手段中のデータを、それぞれ移し替える先の記憶手段中の空き領域に書き込むことで、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替えることを特徴とする請求項１に記載の不揮発性記憶装置へのデータの書き込み方法。
【請求項３】
前記移し替える段階は、前記第１および第２の記憶手段中のデータを、１データ単位毎に順次それぞれ移し替える先の記憶手段中の１データ単位分の空き領域に書き込むことで、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替え、
前記第１または第２の記憶手段中の前記１データ単位分の空き領域は、それぞれ前記第２または第１の記憶手段中のデータを１データ単位移し替えることで生成される領域であることを特徴とする請求項２に記載の不揮発性記憶装置へのデータの書き込み方法。
【請求項４】
コンピュータを、
当初、第１の記憶手段と第２の記憶手段を備えた電気的に書き換え可能な不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータを前記第１の記憶手段に、書き換え頻度の低いデータを前記第２の記憶手段に書き込む手段、
前記書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数が前記不揮発性記憶装置の書き換え保証回数を超える前に、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替える手段、および
前記移し替え以後、書き換え頻度の高いデータを前記第２の記憶手段に、書き換え頻度の低いデータを前記第１の記憶手段に書き込む手段、として機能させるための不揮発性記憶装置へのデータの書き込みプログラム。
【請求項５】
前記移し替える手段は、前記第１および第２の記憶手段中のデータを、それぞれ移し替える先の記憶領域中の空き領域に書き込むことで、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替えることを特徴とする請求項４に記載の不揮発性記憶装置へのデータの書き込みプログラム。
【請求項６】
前記移し替える段階は、前記第１および第２の記憶手段中のデータを、１データ単位毎に順次それぞれ移し替える先の記憶手段中の１データ単位分の空き領域に書き込むことで、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替え、
前記第１または第２の記憶手段中の前記１データ単位分の空き領域は、それぞれ前記第２または第１の記憶手段中のデータを１データ単位移し替えることで生成される領域であることを特徴とする請求項５に記載の不揮発性記憶装置へのデータの書き込みプログラム。
【請求項７】
当初、第１の記憶手段と第２の記憶手段を備えた電気的に書き換え可能な不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータを前記第１の記憶手段に、書き換え頻度の低いデータを前記第２の記憶手段に書き込む手段と、
前記書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数が前記不揮発性記憶装置の書き換え保証回数を超える前に、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替える手段と、
前記移し替え以後、書き換え頻度の高いデータを前記第２の記憶手段に、書き換え頻度の低いデータを前記第１の記憶手段に書き込む手段と、を備えた不揮発性記憶装置へのデータの書き込み装置。
【請求項８】
前記移し替える手段は、前記第１および第２の記憶手段中のデータを、それぞれ移し替える先の記憶領域中の空き領域に書き込むことで、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替えることを特徴とする請求項７に記載の不揮発性記憶装置へのデータの書き込み装置。
【請求項９】
前記移し替える段階は、前記第１および第２の記憶手段中のデータを、１データ単位毎に順次それぞれ移し替える先の記憶手段中の１データ単位分の空き領域に書き込むことで、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替え、
前記第１または第２の記憶手段中の前記１データ単位分の空き領域は、それぞれ前記第２または第１の記憶手段中のデータを１データ単位移し替えることで生成される領域であることを特徴とする請求項８に記載の不揮発性記憶装置へのデータの書き込み装置。
【請求項１０】
車両に搭載された車載機器を制御し、所定の条件が満たされた場合に前記車載機器における診断対象の故障診断を実施する車載電子制御装置において、
車両の１ドライビングサイクル中、前記車両が所定の運転状態となったときに第１の記憶手段と第２の記憶手段を備えた電気的に書き換え可能な不揮発性記憶装置に書き込まれている運転回数を１回分だけ更新した値に書き換えると共に、前記故障診断が実施されたときに前記不揮発性記憶装置に書き込まれている故障診断回数を１回分だけ更新した値に書き換える段階と、
当初、前記不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータを前記第１の記憶手段に、書き換え頻度の低いデータを前記第２の記憶手段に書き込む段階と、
前記書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数が前記不揮発性記憶装置の書き換え保証回数を超える前に、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替える段階と、
前記移し替える段階以後、書き換え頻度の高いデータを前記第２の記憶手段に、書き換え頻度の低いデータを前記第１の記憶手段に書き込む段階と、を備えた不揮発性記憶装置へのデータの書き込み方法。
【請求項１１】
車両に搭載された車載機器を制御し、所定の条件が満たされた場合に前記車載機器における診断対象の故障診断を実施する車載電子制御装置であって、
第１の記憶手段と第２の記憶手段を備えた電気的に書き換え可能な不揮発性記憶装置と、
車両の１ドライビングサイクル中、前記車両が所定の運転状態となったときに前記不揮発性記憶装置に書き込まれている運転回数を１回分だけ更新した値に書き換えると共に、前記故障診断が実施されたときに前記不揮発性記憶装置に書き込まれている故障診断回数を１回分だけ更新した値に書き換える手段と、
当初、前記不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータを前記第１の記憶手段に、書き換え頻度の低いデータを前記第２の記憶手段に書き込む手段と、
前記書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数が前記不揮発性記憶装置の書き換え保証回数を超える前に、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替える手段と、
前記移し替え以後、書き換え頻度の高いデータを前記第２の記憶手段に、書き換え頻度の低いデータを前記第１の記憶手段に書き込む手段と、を備えた車載電子制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、自動車用制御装置等における不揮発性記憶装置へのデータの書き込み方法、プログラム、および装置に関するものである。
【０００２】
【従来の技術】
従来、電気的に書き換え可能な不揮発性の記憶装置としてＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ＆  Ｐｒｏｇｒａｍａｂｌｅ  ＲＯＭ）が広く用いられている。このＥＥＰＲＯＭは、その記憶内容の書き換え回数に上限（例えば１０万回）があり、この上限を超えて書き換えを行えば、書き込まれた記憶内容の信頼性は全く保証の限りでなくなる。したがって、書き換え回数が上限を超えないうちにＥＥＰＲＯＭを新しいものに交換する等の処置が必要となる。
【０００３】
例えば、自動車電子制御装置においては、ＣＡＲＢ（カリフォルニア待機資源保護局）によるＯＢＤ（オンボードダイアグノスティック）２の法規に、ＲａｔｅＢａｓｅモニタ法があり、そのＲａｔｅＢａｓｅモニタ法では、下記の式で定義されるモニタ頻度を継続的に記憶しておく必要がある。
【０００４】
モニタ頻度＝モニタリング実施回数／運転回数
なお、モニタ頻度は、故障診断を実施した頻度であり、触媒コンバータ、フューエルエバポレーションシステム、酸素センサ等といった複数の項目の診断についてそれぞれ存在する。そして、運転回数（以下、分母と記す）は、その項目について法規で定められた所定の走行条件が満たされたときにインクリメントされるデータである。また、モニタリング実施回数（以下、分子と記す）は、その項目について自動車メーカで定めた故障診断実施条件が満たされて、正常または異常の判定が終了した時点で、インクリメントされるデータである。このようなデータは、非常に書き換え頻度が高く、自動車電子制御装置の耐用年数内に書き換え回数が書き換え頻度を超えてしまう可能性がある。
【０００５】
このような書き換え回数に上限がある不揮発性記憶装置の取り替え回数を極力抑える技術として、不揮発性記憶装置を複数のブロックに分割し、ブロック毎に書き換え回数を記憶する記憶部を持ち、当初一方のブロックに対してのみデータの書き換え行い、このブロックへの書き換え回数が所定値に達したら、書き換えを他のブロックに切り替える方法がある（例えば、特許文献１参照。）。
【０００６】
【特許文献１】
特公平５−５２０００号公報
【０００７】
【発明が解決しようとする課題】
しかし、上記技術は、書き換えの切り替えのために空き領域をあらかじめ確保しておく必要があるため、本来不揮発性記憶装置に書き込みたい全データ量の倍の不揮発性記憶装置の容量が必要となる。すなわち、不揮発性記憶装置の容量が冗長になるという問題がある。
【０００８】
本発明は上記点に鑑みて、書き換え回数に上限がある不揮発性記憶装置の取り替え回数を抑え、かつこの不揮発性記憶装置の容量の冗長性を抑えることを目的とする。
【０００９】
【課題を解決するための手段】
上記目的を達成するための請求項１に記載の発明は、当初、第１の記憶手段と第２の記憶手段を備えた電気的に書き換え可能な不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータを第１の記憶手段に、書き換え頻度の低いデータを第２の記憶手段に書き込む段階と、書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数が不揮発性記憶装置の書き換え保証回数を超える前に、書き換え頻度の高いデータを第２の記憶手段に、書き換え頻度の低いデータを第１の記憶手段に移し替える段階と、移し替える段階以後、書き換え頻度の高いデータを第２の記憶手段に、書き換え頻度の低いデータを第１の記憶手段に書き込む段階と、を備えた不揮発性記憶装置へのデータの書き込み方法である。
【００１０】
これによって、不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータと書き換え頻度の低いデータは別の記憶手段に分けて書き込まれ、また、最も書き換え頻度の高いデータの書き換え回数が不揮発性記憶装置の書き換え保証回数を超える前に、それぞれの領域に書き込まれているデータが相互に移し替えられ、すなわち入れ替えられ、それ以後はその入れ替えられた状態で書き込みを行うようになる。したがって、入れ替え直前に第１の記憶手段が書き換え限度に近づいていても、第２の記憶手段は書き換え限度までには余裕があるので、書き換え頻度の高いデータを第２の記憶手段に入れ替えることによって、不揮発性記憶装置全体として書き換え保証回数を有効利用し、かつ無駄な記憶容量を節約することができるので、書き換え回数に上限がある不揮発性記憶装置の取り替え回数を抑え、かつこの不揮発性記憶装置の容量の冗長性を抑えることが可能となる。
【００１１】
また、請求項２に記載の発明は、請求項１に記載の不揮発性記憶装置へのデータの書き込み方法において、移し替える段階は、第１および第２の記憶手段中のデータを、それぞれ移し替える先の記憶手段中の空き領域に書き込むことで、書き換え頻度の高いデータを第２の記憶手段に、書き換え頻度の低いデータを第１の記憶手段に移し替えることを特徴とする。
【００１２】
これによって、入れ替えの際に不揮発性記憶装置中からデータの一部が一時的にも消えることがない。したがって、入れ替えの際に他の記憶装置にデータを一事待避させる必要がなく、入れ替え処理が簡易になる。また、仮に入れ替え処理が中断したとしても、ＥＥＰＲＯＭから必要な情報が欠落することはない。
【００１３】
なお、空き領域とは、単に情報を有するデータが書き込まれていない領域に加え、その書き換えたとしても不揮発性記憶装置としては情報を何ら失うことはない領域をも含む概念である。
【００１４】
また、請求項３に記載の発明は、請求項２に記載の不揮発性記憶装置へのデータの書き込み方法において、移し替える段階は、第１および第２の記憶手段中のデータを、１データ単位毎に順次それぞれ移し替える先の記憶手段中の１データ単位分の空き領域に書き込むことで、書き換え頻度の高いデータを第２の記憶手段に、書き換え頻度の低いデータを第１の記憶手段に移し替え、第１または第２の記憶手段中の１データ単位分の空き領域は、それぞれ第２または第１の記憶手段中のデータを１データ単位移し替えることで生成される領域であることを特徴とする請求項２に記載の不揮発性記憶装置へのデータの書き込み方法である。
【００１５】
また、請求項４〜６の発明は、それぞれ請求項１〜３の発明をコンピュータプログラムとして実現する発明である。
【００１６】
また、請求項７〜９の発明は、それぞれ請求項１〜３の発明を不揮発性記憶装置へのデータの書き込み装置として実現する発明である。
【００１７】
また、請求項１０に記載の発明は、車両に搭載された車載機器を制御し、所定の条件が満たされた場合に前記車載機器における診断対象の故障診断を実施する車載電子制御装置において、車両の１ドライビングサイクル中、前記車両が所定の運転状態となったときに第１の記憶手段と第２の記憶手段を備えた電気的に書き換え可能な不揮発性記憶装置に書き込まれている運転回数を１回分だけ更新した値に書き換えると共に、前記故障診断が実施されたときに前記不揮発性記憶装置に書き込まれている故障診断回数を１回分だけ更新した値に書き換える段階と、当初、前記不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータを前記第１の記憶手段に、書き換え頻度の低いデータを前記第２の記憶手段に書き込む段階と、前記書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数が前記不揮発性記憶装置の書き換え保証回数を超える前に、前記書き換え頻度の高いデータを前記第２の記憶手段に、前記書き換え頻度の低いデータを前記第１の記憶手段に移し替える段階と、前記移し替える段階以後、書き換え頻度の高いデータを前記第２の記憶手段に、書き換え頻度の低いデータを前記第１の記憶手段に書き込む段階と、を備えた不揮発性記憶装置へのデータの書き込み方法である。
【００１８】
これによって、車載電子制御装置において、請求項１と同等の効果を得ることができる。
【００１９】
また、請求項１１の発明は、請求項１０の発明を車載電子制御装置として実現する発明である。
【００２０】
【発明の実施の形態】
図１に、本発明の一実施形態に係るエンジンＥＣＵ（電子制御装置，以下の記載はＥＣＵとする）１の構成を示す。このエンジンＥＣＵ１は、ＣＰＵ２、ＥＥＰＲＯＭ３、ＲＯＭ４、およびＲＡＭ５を備えている。エンジンＥＣＵ１は、車両のエンジンの状態を検知し、またエンジンの作動の制御を行うための装置である。またエンジンＥＣＵ１は、前述したＣＡＲＢ・ＯＤＢ２のＲａｔｅＢａｓｅモニタ法で定められている故障診断対象項目の各々について、その項目の故障診断実施条件が成立した場合には、該当する項目についての故障診断処理を実施して正常または異常の判定を行う。そして更にエンジンＥＣＵ１は、上記した故障診断対象項目について、前述したモニタ頻度を表す分子（モニタリング実施回数）と分母（運転回数）のデータを、ＥＥＰＲＯＭ３を用いて継続的に保存、更新する。
【００２１】
またこのエンジンＥＣＵ１には、図示しないツールと呼ばれる外部診断装置を図示しないダイアグ用コネクタを介して接続可能となっている。そして工場、カーディーラ等における診断において、エンジンＥＣＵ１は、ツールからの故障診断に関する出力要求に応じたデータ（例えば上記した分子、分母）をこのツールに出力するようになっている。
【００２２】
ＣＰＵ２は、書き換え不能な不揮発性メモリであるＲＯＭ４に書き込まれているプログラムを読み出し、そのプログラムの処理内容を実行し、この実行の段階において必要があればＥＥＰＲＯＭ３および揮発性メモリであるＲＡＭ５に対して情報の読み出し／書き込みを行う。またＣＰＵ２は動作時に、イグニッション線を介してイグニッションキーの切り替わりを検知し、車速センサから車速情報の入力を受け、外気温センサから外気温の情報の入力を受け、また図示しない各種センサ類から、アイドル信号、クランク角等の車両に関する各種情報の入力を受ける。またＣＰＵ２は動作時に、必要に応じてエンジンの点火装置や噴射装置に制御信号を出力する。
【００２３】
ＥＥＰＲＯＭ３は、電気的に書き換え可能な不揮発性メモリである。図２に、このＥＥＰＲＯＭ３の記憶領域の構造を示す。このＥＥＰＲＯＭ３は絶対アドレスによって０番地からｍ番地まで分けられており、またこの記憶領域内に同じサイズの２つのブロック、すなわちＡブロックとＢブロックとを有している。例えば、絶対アドレス０番地からｎ番地まではＡブロックとして割り当てられている。ただし、ｍ、ｎはあらかじめ決められた整数であり、ｍ≧２ｎ＋２である。このＡブロックおよびＢブロックの先頭アドレス部分には、後述するアドレス情報が書き込まれる。そして、Ａブロックの先頭アドレス以降は、先頭アドレスに近い順にＡ［０］、Ａ［１］、…、Ａ［ｎ］、というブロック指示アドレスが割り振られる。Ｂブロックの先頭アドレス以降も同様にＢ［０］、Ｂ［１］、…、Ｂ［ｎ］、の順でブロック指示アドレスが割り振られる。このブロック指示アドレスは相対アドレスの一種である。
【００２４】
このＥＥＰＲＯＭ３の各セルは、最大書き換え保証回数が１０万回である。ＥＥＰＲＯＭ３のある部分において書き換え回数がこの保証回数を超えると、書き込まれた記憶内容の信頼性は全く保証の限りでなくなる。
【００２５】
本実施形態においては、ある後述する所定の時期になると、Ａブロックに書き込まれているデータとＢブロックに書き込まれているデータを入れ替える。すなわち、ＡブロックのデータをＢブロックに、ＢブロックのデータをＡブロックに移し替える。そしてそれ以降、移し替えられた場所において各データが書き換えられる。
【００２６】
なお、「あるデータをＥＥＰＲＯＭ３のある領域に書き込む」という表現と「ＥＥＰＲＯＭ３のある領域をあるデータに書き換える」という表現は、同じ動作の別の表現形態であって、「書き込む」と「書き換える」という表現の間には、技術上の差違はない。
【００２７】
図３に、当初、すなわち出荷後後述するデータ入れ替え前のＥＥＰＲＯＭ３のＡ、Ｂブロック内のデータ構成を示す。
【００２８】
各ブロック中、縦方向に並ぶスロットがブロック内の各ブロック指示アドレスに対応するデータ領域を示している。各ブロックの先頭番地にはアドレス情報が格納されている。このアドレス情報は、Ａ、Ｂブロック間でデータの入れ替えを行うときに用いられる数値であり、当初は双方０となっている。
【００２９】
各ブロックの先頭番地の次以降には、アドレスＡ［０］からＡ［ｎ］まで、およびＢ［０］からＢ［ｎ］までのデータ領域がある。各データ領域に書き込まれるデータのそれぞれを、１データ単位とする。入れ替えが行われる前は、アドレスＡ［０］、Ｂ［０］は空き状態となっている。すなわちＡ［０］、Ｂ［０］の値はデータが書き込まれていない初期状態、具体的にはゼロとなっている。またＡ［１］〜Ａ［ｎ−１］、Ｂ［１］〜Ｂ［ｎ−１］までの領域に対しては、エンジンＥＣＵ１の制御において必要なデータの書き込み／読み出しがＣＰＵ２によって行われる。
【００３０】
当初Ａブロックの当該番地に書き込まれるデータは、書き換えの頻度が高いものである。書き換え頻度が高いとは、ＥＥＰＲＯＭ３の耐用年数内に書き換えられる回数が書き換え保証回数に近いことをいう。書き換え頻度が高いものとしては、例えば車両のイグニッションキーがオンとなる度に１加算された数値に書き換えれられるデータ、すなわちイグニッションキーのオン回数をカウントするデータ、イグニッションキーのオンの度に書き込まれる車両の走行距離、イグニッションキーのオン毎に１回は実行される可能性がある故障判定の実行回数等がある。
【００３１】
上記した分子（故障診断実施回数）と分母（運転回数）のデータは、この書き換え頻度の高いデータである。なお、これら分母と分子は、両方共に、自動車のドライビングサイクル、例えばイグニッションスイッチがオンされてオフされるまでの間（すなわち、エンジンＥＣＵ１に動作電源が投入されてその動作電源が遮断されるまでの１回の動作期間中）に、または「エンジン始動されて、その後エンジン停止されて、更に次のエンジン停止」までの間、１回だけインクリメントされるか、あるいはインクリメントされずにそのままの値を維持するかの何れかである。よって、各項目の分母と分子は、１インクリメントされると、その回の自動車の運転期間中では、それ以上値が更新されることはない。
【００３２】
当初Ｂブロックの当該番地に書き込まれるデータは、書き換えの頻度が低いものである。書き換え頻度が低いとは、ＥＥＰＲＯＭ３の耐用年数内に書き換えられる回数が書き換え保証回数にくらべて小さいことをいう。書き換え頻度が低いものとしては、例えばエンジンＥＣＵ１の工場出荷時にのみ設定される車種情報、タイヤの交換時にしか変更しないタイヤのサイズ、工場での検査時にしか使用しない工場検査用データ等がある。
【００３３】
また、当初Ａブロックに書き込まれるデータのうち、最も書き換え頻度が高いものがエンジンＥＣＵ１の設計時に決められている。最も書き換え頻度が高いものとしては、本実施形態では上記したイグニッションのオン回数である。この最も書き換え頻度が高いデータが当初書き込まれる先のアドレスの情報は、ＣＰＵ２が実行するプログラム中に記録されている。以降、この最も書き換え頻度が高いデータが書き込まれる先のアドレスをＡ［ｍｆ］番地と記す。
【００３４】
またＡ［ｎ］には、Ａ［ｍｆ］のデータが書き換えられた回数が記録されるようになっている。そしてＢブロックのｎ番地には、Ｂブロック中で最も書き換え頻度が高いデータが書き込まれる。
【００３５】
上記のＥＥＰＲＯＭ３に対してデータの読み出し／書き込み、および入れ替えを行う処理を含む、ＣＰＵ２の全体的な処理を図４に示す。この処理は、エンジンＥＣＵ１の起動後に開始される。なお、ＣＰＵ２はこの処理と並行して、自らの処理によってＡ［ｍｆ］番地のデータが書き換えられることを検知し、検知するたびにＡ［ｎ］に書き込まれている値を１増加させる。
【００３６】
この処理中、本実施形態において最も特徴的となっているのは、ステップ２３０の入れ替え処理である。この入れ替え処理は、ＥＥＰＲＯＭ３のＡ［ｍｆ］への書き込みが所定回数に達したとき等に実行される。まずこの入れ替え処理について先に説明する。図５に、この入れ替え処理の詳細を示す。
【００３７】
入れ替え処理は、通常ステップ３０５から開始される。特別な場合に限り、ステップ３４０から開始されるが、この場合については後述する。
【００３８】
ステップ３０５で入れ替え処理が始まると、ＣＰＵ２はＢブロックのアドレス情報を読み出し、この値を変数Ｂ＿ＡＤに代入する。なお、変数名Ｂ＿ＡＤ等は、ＣＰＵ２がＲＡＭ５内に格納するデータを識別するための名称である。
【００３９】
次にステップ３１０で、Ａ［Ｂ＿ＡＤ＋１］のデータを変数ＤＡＴＡに代入する（Ｂ＿ＡＤ＋１は、変数Ｂ＿ＡＤの値に１を加えたものを表す。）。そしてステップ３２０で、変数ＤＡＴＡの値をＢ［Ｂ＿ＡＤ］に書き込む。例えば、通常は最初にステップ３０５が実行されるときにはＢ＿ＡＤは０なので、この場合ステップ３１０およびステップ３２０によって、Ａ［１］のデータが当初空き領域であったＢ［０］に書き込まれる。
【００４０】
次にステップ３３０で、Ｂ＿ＡＤ＋１をＢブロックのアドレス情報の領域に書き込む。これによって、Ｂブロックアドレス情報の値が、ステップ３０５の時点から１だけ増える。
【００４１】
次にステップ３４０でＡブロックのアドレス情報を変数Ａ＿ＡＤに代入する。そしてステップ３５０でＢ［Ａ＿ＡＤ＋１］のデータを変数ＤＡＴＡに代入し、ステップ３６０で変数ＤＡＴＡの値をＡ［Ａ＿ＡＤ］に書き込む。例えば、通常は最初にステップ３５０が実行されるときにはＢ＿ＡＤは０なので、この場合ステップ３５０およびステップ３６０によって、Ｂ［１］のデータが空き領域であったＡ［０］に書き込まれる。
【００４２】
次にステップ３７０で、Ａ＿ＡＤ＋１をＡブロックのアドレス情報の領域に書き込む。これによって、Ａブロックアドレス情報の値が、ステップ３４０の時点から１だけ増える。
【００４３】
Ａ、Ｂブロックのアドレス情報の値が共に０であった場合にステップ３０５からステップ３７０を実行した後の、Ａ、Ｂブロック内の状態を図６に示す。当初Ａ［１］にあったデータＤＡ（１）がＢ［０］に書き込まれており、当初Ｂ［１］にあったデータＤＢ（１）がＡ［０］に書き込まれている。また、ブロックＡアドレス情報、ブロックＢアドレス情報は共に１となっている。Ａ［１］、Ｂ［１］の領域内のデータは実際に消去されるわけではないが、それぞれＢ［１］、Ａ［１］に複写されているので、Ａ［１］、Ｂ［１］の領域には別のデータを書き込んでも、ＥＥＰＲＯＭ３としては情報を何ら失わない状態となっている。すなわち、これらの領域は実質的に空き状態の領域、すなわち空き領域となっている。
【００４４】
上記の例を一般化すると、ステップ３０５から３７０間での処理で、Ａ、Ｂブロックのアドレス情報の値が共にｉ（ｉは非負整数）なら、当初Ａ［ｉ］にあったデータＤＡ（ｉ）がＢ［ｉ−１］に書き込まれ、当初Ｂ［ｉ］にあったデータＤＢ（ｉ）がＡ［ｉ−１］に書き込まれ、Ａ［ｉ］およびＢ［ｉ］の領域が空き状態となり、更にＡ、Ｂブロックのアドレス情報の値が１つ加算される。このとき、ＤＡ（ｉ）、ＤＢ（ｉ）が書き込まれる前のＢ［ｉ−１］、Ａ［ｉ−１］は実質的に空き状態となっているので、上書きしてもＥＥＰＲＯＭ３から何らデータが失われることはない。
【００４５】
ステップ３７０の後、処理はステップ３８０の判定処理に進む。この判定処理では、Ａ＿ＡＤとＢ＿ＡＤが共にｎ−１であるか否かを判定する。この判定は、Ａ、Ｂブロックのアドレス情報の値が共にｎであるか否かの判定と同値である。
【００４６】
Ａ＿ＡＤとＢ＿ＡＤが共にｎ−１でなければ再度ステップ３０５から３７０までの処理が行われる。したがって、Ａ、Ｂブロックのアドレス情報の値が共にｎになるまで、ステップ３０５からステップ３７０までの処理が繰り返され、それぞれのブロックのデータＤＡ（１）〜ＤＡ（ｎ）、ＤＢ（１）〜ＤＢ（ｎ）の全てが小さいアドレスから順次別ブロックの空き領域に書き込まれてゆく。
【００４７】
これら書き込みが全て終了すると、ステップ３８０でＡ＿ＡＤとＢ＿ＡＤが共にｎ−１であると判定され、入れ替え処理は終了する。
【００４８】
入れ替え処理終了後のＥＥＰＲＯＭ３のＡ、Ｂブロックの状態を図７に示す。当初Ｂ［１］〜Ｂ［ｎ］にあったデータがそれぞれＡ［０］〜Ａ［ｎ−１］に移し替えられ、当初Ａ［１］〜Ａ［ｎ］にあったデータがそれぞれＢ［０］〜Ｂ［ｎ−１］に移し替えられ、Ａ［ｎ］、Ｂ［ｎ］が空き領域となっている。
【００４９】
このようなデータの入れ替えでは、ブロックＡ、Ｂ中のデータを、それぞれ移し替える先のブロック中の空き領域に書き込んでおり、入れ替えの際にＥＥＰＲＯＭ３中からデータの一部が一時的にも消えることがない。したがって、入れ替えの際にＲＡＭ５等の他の記憶装置にデータを一事待避させる必要がなく、入れ替え処理が簡易になる。
【００５０】
またこの入れ替えは、Ａ、Ｂブロック中のデータを、１データ単位毎に順次それぞれ移し替える先のブロック中の１データ単位分の空き領域に書き込むようになっており、またＡ、Ｂブロックの記憶手段中の１データ単位分の空き領域は、それぞれ相手のブロックであるＢ、Ａブロックのデータを１データ単位移し替えることで生成される領域であると言える。
【００５１】
Ａ、Ｂブロックの間のデータの入れ替えは、正常に行われれば上記のようになる。しかし、データの入れ替えは必ず正常に終了するとは限らない。例えば、データの入れ替えの途中で、イグニッションオフ等のエンジンＥＣＵ１への電源遮断によって入れ替え処理が中断する可能性がある。
【００５２】
しかし、上記したように入れ替えの際にＥＥＰＲＯＭ３中からデータの一部が一時的にも消えることがないので、仮に電源遮断等で入れ替え処理が中断したとしても、ＥＥＰＲＯＭ３から必要な情報が欠落することはない。
【００５３】
本実施形態のエンジンＥＣＵ１は、この入れ替え処理の中断があっても、その後エンジンＥＣＵ１の起動後に入れ替え処理を再開できるようになっている。このための処理が、図４のステップ２０５に示される、エンジンＥＣＵ１が起動するとすぐに実行される中断判定処理である。この中断判定処理の詳細を図８に示す。
【００５４】
まず、中断判定処理が始まると、ステップ４０５でＡブロックアドレス情報を変数Ａ＿ＡＤに代入し、またＢブロックアドレス情報を変数Ｂ＿ＡＤに代入する。
【００５５】
次に、ステップ４１０でＡ＿ＡＤとＢ＿ＡＤが共に０、あるいは共にｎであるか否かを判定する。共に０、あるいは共にｎであれば中断判定は終了する。Ａ、Ｂブロックアドレス情報が共に０であるということは、まだ入れ替え処理が始まっていないことを示し、またＡ、Ｂブロックアドレス情報が共にｎであるということは、入れ替え処理が既に終了していることを示している。したがって、この場合は入れ替え処理が中断した状態にないので、中断再開の処理をする必要がなく、そのまま中断処理を終了する。
【００５６】
ステップ４１０でＡ＿ＡＤとＢ＿ＡＤが共に０でも共にｎでもない場合、入れ替えの中断があったとして、処理はステップ４２０に進む。ステップ４２０では、Ｂ＿ＡＤがＡ＿ＡＤより大きいか否かを判定する。図４において示したように、まずステップ３３０でＢブロックアドレス情報が１加算され、その後ステップ３７０でＡブロックアドレス情報が１加算される。したがって、中断したタイミングによってＢ＿ＡＤ＝Ａ＿ＡＤ、およびＢ＿ＡＤ＝Ａ＿ＡＤ＋１＞Ａ＿ＡＤのいずれかの状態になっている。
【００５７】
ステップ４２０でＢ＿ＡＤ＞Ａ＿ＡＤであると判定されると処理はステップ４３０に進む。Ｂ＿ＡＤ＞Ａ＿ＡＤ＝ｋとすると、この場合、入れ替えが中断したのは、ステップ３３０でＢブロックアドレス情報がｋ＋１に書き換えられてから、ステップ３７０でＡブロックアドレス情報がｋ＋１に書き換えられる前までの間である。このときは、ＤＡ（０）〜ＤＡ（ｋ＋１）、ＤＢ（０）〜ＤＢ（ｋ）までのデータの移し替えは終了しているが、ＤＢ（ｋ＋１）のデータが移し替えられているか否かが不明である。また、ＤＡ（ｋ＋２）の移し替えが終了していないことも確かであるから、Ｂ［ｋ＋１］にＤＢ（ｋ＋１）のデータが残っていることも確かである。
【００５８】
そこで、ＤＢ（ｋ＋１）の移し替えの処理の最初、すなわちステップ３４０から入れ替えを再開することができる。したがって、ステップ４３０では図５のＢブロックスタートから入れ替えを再開する。そして図５の処理に従って入れ替えが完了すると、中断判定は終了する。
【００５９】
また、ステップ４２０でＢ＿ＡＤ＞Ａ＿ＡＤでない、すなわちＢ＿ＡＤ＝Ａ＿ＡＤであると判定されると、処理はステップ４４０に進む。Ｂ＿ＡＤ＝Ａ＿ＡＤ＝ｋとすると、この場合、入れ替えが中断したのは、ステップ３７０でＡブロックアドレス情報がｋに書き換えられてから、ステップ３３０でＢブロックアドレス情報がｋ＋１に書き換えられる前までの間である。このときは、ＤＡ（０）〜ＤＡ（ｋ）、ＤＢ（０）〜ＤＢ（ｋ）までのデータの移し替えは終了しているが、ＤＡ（ｋ＋１）のデータが移し替えられているか否かが不明である。また、ＤＢ（ｋ＋２）の移し替えが終了していないことも確かであるから、Ａ［ｋ＋１］にＤＡ（ｋ＋１）のデータが残っていることも確かである。
【００６０】
そこで、ＤＡ（ｋ＋１）の移し替えの処理の最初、すなわちステップ３０５から入れ替えを再開することができる。したがって、ステップ４４０では図５のＡブロックスタートから入れ替えを再開する。そして図５の処理に従って入れ替えが完了すると、中断判定は終了する。
【００６１】
中断判定が終了すると、ＣＰＵ２の処理は図４のステップ２１０のプログラム処理に進む。プログラム処理とは、このエンジンＥＣＵ１が行うエンジン管理、制御、およびのための処理である。この処理において、例えばクランク角等の情報にもとづいたエンジンの燃料噴射、点火制御が行われる。そしてこの処理内で、ＥＥＰＲＯＭ３中のデータ内容が必要に応じて書き換えられる。例えば、エンジンＥＣＵ１がイグニッションキーのオンを検知した場合に、イグニッションキーのオンの回数が書き込まれたアドレスのデータを読み出し、それに１を加算した値を再び当該アドレスに書き込む。
【００６２】
また例えば、車両が走行状態と判断される所定の運転状態となったときに、車両の実質的な走行回数を記録する所定のアドレスの値を１加算して再度書き込む。すなわち、ＥＥＰＲＯＭ３に書き込まれているこの値を１回分だけ更新した値に書き換える。
【００６３】
また例えば、車両が故障診断の条件が満たされ、故障診断が実施されたときに、実施した故障診断に対応するＥＥＰＲＯＭ３の所定のアドレスの分子データの値を１加算して再度書き込む。すなわち、ＥＥＰＲＯＭ３に書き込まれている故障診断回数を１回分だけ更新した値に書き換える。
【００６４】
本実施形態においてはこのプログラム処理の詳細については記述しないが、処理の負荷という観点に立てば、実際にはこの処理およびステップ２１５の読み出し／書き込み処理がＣＰＵ２のメインルーチンであり、そのメインルーチンの周期ごとのステップ２２０〜２３０の入れ替えに関わる処理はサブルーチンであると言える。
【００６５】
次に処理はステップ２１５に進み、ＥＥＰＲＯＭ３に対する読み出し／書き込み処理を行う。読み出し／書き込み処理とは、エンジンＥＣＵ１の制御において必要に応じてＥＥＰＲＯＭ３に対してデータの書き込みおよび読み出しを行う処理である。本実施形態においては、使用の途中においてデータの書き込み場所が入れ替わるので、それに対応して同じデータでも入れ替えの前と後で読み書きのためのアクセス先を変更しなければならない。
【００６６】
この読み出し／書き込み処理の詳細を図９に示す。まずステップ５１０で、読み出し／書き込みを行いたいデータにアクセスするためのブロック（ＡまたはＢ）を変数ＲＷ＿ＢＬＯＣＫに代入し、アドレスを変数ＲＷ＿ＡＤＤＲＥＳＳに代入する。ただし、ここで代入されるブロックおよびアドレスは、読み出し／書き込みの時期に関らず、常に当初入れ替えが行われる前に各データが格納されていた場所のものである。
【００６７】
次に、ステップ５２０では、Ａ、Ｂブロックのアドレス情報をそれぞれ変数Ａ＿ＡＤおよび変数Ｂ＿ＡＤに代入する。
【００６８】
次に、ステップ５３０では、Ａ＿ＡＤとＢ＿ＡＤが共にｎであるか否か、すなわち、データの入れ替えが終了しているか否かを判定する。
【００６９】
共にｎでない、すなわち入れ替えが行われていないなら、処理はステップ５６０に進み、そのままＲＷ＿ＢＬＯＣＫで指定されるブロックの、ＲＷ＿ＡＤＤＲＥＳＳアドレスにアクセスして読み出し／書き込みを行い、その後読み出し／書き込み処理を終了する。
【００７０】
共にｎである、すなわち入れ替えが終了しているなら、処理はステップ５４０に進み、ＲＷ＿ＢＬＯＣＫがＡならＢに、ＢならＡに置き換える。そしてステップ５５０で、ＲＷ＿ＡＤＤＲＥＳＳから１を減算する。これにより、ＲＷ＿ＢＬＯＣＫおよびＲＷ＿ＡＤＤＲＥＳＳは、アクセスしたいデータの入れ替え後のブロックおよびアドレスを指定するようになる。
【００７１】
そして、ステップ５６０で、置き換えられたＲＷ＿ＢＬＯＣＫで指定されるブロックの、ＲＷ＿ＡＤＤＲＥＳＳアドレスにアクセスして読み出し／書き込みを行い、その後読み出し／書き込み処理を終了する。
【００７２】
このようにすることで、ステップ５２０〜５５０の処理が、現在がデータの入れ替え前か入れ替え後かにもとづいて、アクセスするブロックおよびアドレスの変換を行うので、入れ替え前も入れ替え後も正しくデータにアクセスすることができる。また、ＣＰＵ２のプログラムのその他の部分（例えばプログラム処理）は、入れ替えによるアクセス先の変化を考慮した処理をする必要がない。
【００７３】
データの読み出し／書き込み処理が終了すると、処理は図４のステップ２２０に進む。
【００７４】
ステップ２２０では、Ａブロックの書き込み回数が規定値に到達したか否かの判定を行う。具体的にはＡブロックの領域Ａ［ｎ］に書き込まれているデータの書き換え回数を参照し、それがプログラム中にあらかじめ設定されている規定値に達しているか否かの判定を行う。この規定値はＥＥＰＲＯＭ３のの書き換え保証回数を超えない所定数である。例えば、ＥＥＰＲＯＭ３の書き換え保証回数が１０万回で、当初Ａブロックに書き込まれるデータのうち最も書き換え頻度の高いデータの生涯書き換え回数が１８万回であるとすると、９万をこの規定値とする。ここで生涯書き換え回数とは、自動車の耐用年数（例えば２０年）のうちにエンジンＥＣＵ１の当該データが書き換えられるであろうと予想される回数のことである。
【００７５】
また、ステップ２２５の判定処理は、Ａ、Ｂブロックのアドレス情報が共にｎであるか否か、すなわちデータの入れ替えが終了しているか否かを判定する。
【００７６】
書き込み回数が既定値に達しており、かつＡ、Ｂブロックのアドレス情報が共にｎでない場合に限り、処理はステップ２２０、２２５を経てステップ２３０に進む。すなわち、所定の書き換え時期に達しており、かつまだ書き換えが行われていないときに限り、先に詳述したステップ２３０の書き換え処理を行う。それ以外の場合は、処理は判定処理を経てステップ２１０のプログラム処理に戻る。
【００７７】
以上のようなＣＰＵ２のプログラム実行処理によって、ＥＥＰＲＯＭ３に書き込むデータのうち、書き換え頻度の高いデータと書き換え頻度の低いデータは別の記憶領域（Ａ、Ｂブロック）に分けて書き込まれ、また、書き換え頻度の最も高いデータの書き換え回数がＥＥＰＲＯＭ３の書き換え保証回数を超えない所定数に達したとき、それぞれの領域に書き込まれているデータが入れ替えられ、それ以後はその入れ替えられた状態で書き込みを行うようになる。したがって、入れ替え直前にブロックＡが書き換え限度に近づいていても、ブロックＢは書き換え限度までには余裕があるので、書き換え頻度の高いデータをブロックＢに入れ替えることによって、ＥＥＰＲＯＭ３全体として書き換え保証回数を有効利用し、かつ無駄な記憶容量を節約することができる。ひいては、書き換え回数に上限がある不揮発性記憶装置の取り替え回数を抑え、かつこの不揮発性記憶装置の容量の冗長性を抑えることが可能となる。
【００７８】
なお、本実施形態と本明細書の特許請求の範囲との対応関係として、Ａブロックが第１の記憶手段に対応し、Ｂブロックが第２の記憶手段に対応する。
【００７９】
また、エンジンＥＣＵ１が、不揮発性記憶装置へのデータの書き込み装置を構成する。
【００８０】
また、図９のステップ５１０→５２０→５３０→５６０という流れの処理が、当初、第１の記憶手段と第２の記憶手段を備えた電気的に書き換え可能な不揮発性記憶装置に書き込むデータのうち、書き換え頻度の高いデータを第１の記憶手段に、書き換え頻度の低いデータを第２の記憶手段に書き込む手段を構成する。
【００８１】
また、図４のステップ２３０の処理、すなわち、図５のＡブロックスタートから始まる処理が、書き換え頻度の高いデータのうち、最も書き換え頻度の高いデータの書き換え回数が不揮発性記憶装置の書き換え保証回数を超える前に、書き換え頻度の高いデータを第２の記憶手段に、書き換え頻度の低いデータを第１の記憶手段に移し替える手段を構成する。
【００８２】
また、図９のステップ５１０→５２０→５３０→５４０→５５０→５６０という流れの処理が、移し替え以後、書き換え頻度の高いデータを第２の記憶手段に、書き換え頻度の低いデータを第１の記憶手段に書き込む手段を構成する。
【００８３】
また、本実施形態においては、１つのＥＥＰＲＯＭを２つのブロックに区別して、それぞれの間で書き換え頻度の高いデータと低いデータとの入れ替えを行っているが、例えば２つの同じ容量のＥＥＰＲＯＭを用意し、その一方に書き換え頻度の高いデータを書き込み、他方に書き換え頻度の低いデータを書き込むようになっていれば、上記した実施形態において各ブロックを各ＥＥＰＲＯＭと読み替えることで、上記した実施形態と同等の効果を得ることができる。すなわち、この場合、２つのＥＥＰＲＯＭのうち、当初書き換え頻度の高いデータを書き込む方のＥＥＰＲＯＭが第１の記憶手段に対応し、他方が第２の記憶手段に対応する。
【００８４】
また、図４のステップ２１０のプログラム処理が、車両の１ドライビングサイクル中、車両が所定の運転状態となったときに不揮発性記憶装置に書き込まれている運転回数を１回分だけ更新した値に書き換えると共に、故障診断が実施されたときに前記不揮発性記憶装置に書き込まれている故障診断回数を１回分だけ更新した値に書き換える手段を構成する。
【００８５】
なお、本発明のデータの書き込みにおいては、最も書き換え頻度の高いデータの書き換え回数が不揮発性記憶装置の書き換え保証回数を超える前に、データの移し替えを行えばよいのであって、本実施形態のように、書き換え頻度の最も高いデータの書き換え回数が不揮発性記憶装置の書き換え保証回数を超えない所定数に達したとき、データの移し替えを行うことは、その１つの具体例にすぎない。
【００８６】
また、本実施形態においては、ブロックＡのデータ量とブロックＢのデータ量とは同じであるが、必ずしも同じである必要はない。各ブロックが、書き換え頻度の高いデータの総量と書き換え頻度の低いデータの総量のうち大きい方と、その他のアドレス情報、書き換え情報等を書き込む十分な容量があれば足りる。
【００８７】
また、本実施形態においては、最も高い書き換え頻度のデータが書き換えられる回数を記憶する領域（Ａ［ｎ］等）が確保されているが、必ずしもこの領域は必要ない。例えば、この最も高い書き換え頻度のデータが車両のイグニッションのオンの度に書き換えられるものであり、かつこのデータが車両のイグニッションオンの回数を示すものであれば、このデータの書き換え回数とデータの示す回数とが一致するので、このデータを参照することで、最も高い書き換え頻度のデータが書き換えられた回数がわかる。
【図面の簡単な説明】
【図１】本発明の実施形態に係るエンジンＥＣＵ１の構成図である。
【図２】ＥＥＰＲＯＭ３の記憶領域の構造図である。
【図３】データ入れ替え前のＥＥＰＲＯＭのＡ、Ｂブロック内のデータ構成図である。
【図４】ＣＰＵ２の全体的な処理を示すフローチャートである。
【図５】入れ替え処理の詳細を示すフローチャートである。
【図６】Ａ、Ｂブロックのアドレス情報の値が共に０であった場合にステップ３０５からステップ３７０を実行した後のＡ、Ｂブロック内の状態を示す図である。
【図７】入れ替え処理終了後のＡ、Ｂブロックの状態を示す図である。
【図８】中断判定処理の詳細を示すフローチャートである。
【図９】読み出し／書き込み処理の詳細を示す図である。
【符号の説明】
１…エンジンＥＣＵ、２…ＣＰＵ、３…ＥＥＰＲＯＭ、４…ＲＯＭ、５…ＲＡＭ。
【図１】
2004151944.tif 000003
【図２】
2004151944.tif 000004
【図３】
2004151944.tif 000005
【図４】
2004151944.tif 000006
【図５】
2004151944.tif 000007
【図６】
2004151944.tif 000008
【図７】
2004151944.tif 000009
【図８】
2004151944.tif 000010
【図９】
2004151944.tif 000011