(57)【特許請求の範囲】
【請求項１】
情報の読み書きが可能な不揮発性メモリの互いに異なる領域に、車両に備えられた所定の検出対象について検出された故障を表す故障コードであって同一の故障コードを記憶させる記憶制御手段と、
前記不揮発性メモリに記憶された前記故障コードが、互いに一致するか否かを判断し、少なくとも何れかが一致しないと判断したならば、その不揮発性メモリに記憶された故障コードに誤りが生じていると判定する誤り検出手段とを備え、前記車両に搭載された故障コード記憶管理装置において、
前記不揮発性メモリに記憶されるべき前記故障コードを含む情報テーブル（以下、故障コードテーブルと言う）を記憶するメモリと、
少なくとも前記誤り検出手段により誤りが生じていることが検出されたならば、前記不揮発性メモリに記憶された故障コードのそれぞれについて、前記故障コードテーブルに含まれるか否かを判定し、前記不揮発性メモリに記憶された故障コードのうち、前記故障コードテーブルに含まれると判定できた故障コードを、正規の故障コードと認識する正規データ認識手段と、
を備えていることを特徴とする故障コード記憶管理装置。
【請求項２】
請求項１に記載の故障コード記憶管理装置において、
前記記憶制御手段は、前記不揮発性メモリの互いに異なる２つの領域に、前記同一の故障コードを記憶させるようになっていることを特徴とする故障コード記憶管理装置。
【請求項３】
請求項１に記載の故障コード記憶管理装置において、
前記記憶制御手段は、前記不揮発性メモリの互いに異なる３つの領域に、前記同一の故障コードを記憶させるようになっていることを特徴とする故障コード記憶管理装置。
【請求項４】
請求項３に記載の故障コード記憶管理装置において、
前記正規データ認識手段は、前記不揮発性メモリに記憶された故障コードのうち過半数の領域で一致した故障コード（以下、過半数一致コードと言う）について、前記故障コードテーブルに含まれるか否かを判定し、含まれると判定できた場合に、その過半数一致コードを正規の故障コードと認識するようになっていることを特徴とする故障コード記憶管理装置。
【請求項５】
請求項１ないし請求項４の何れか１項に記載の故障コード記憶管理装置において、
前記故障コードテーブルを記憶するメモリは、ＲＯＭであることを特徴とする故障コード記憶管理装置。
【請求項６】
請求項１ないし請求項５の何れか１項に記載の故障コード記憶管理装置において、
前記正規データ認識手段により正規の故障コードと認識された故障コードを、前記不揮発性メモリの領域のうち、その正規の故障コードとは異なる故障コードが記憶された領域に記憶させる再書込み手段を備えていることを特徴とする故障コード記憶管理装置。
【請求項７】
請求項１ないし請求項６の何れか１項に記載の故障コード記憶管理装置において、
常時電圧の供給を受け、電圧が供給されている間情報を保持するＳＲＡＭを備え、
前記記憶制御手段は、前記故障コードを前記ＳＲＡＭに記憶させた後、そのＳＲＡＭに記憶させた故障コードと同一の故障コードを前記不揮発性メモリに記憶させるようになっており、
前記正規データ認識手段は、少なくとも、前記不揮発性メモリに記憶された故障コードが何れも前記故障コードテーブルに含まれないと判定した場合に、前記ＳＲＡＭに記憶された故障コードが前記故障コードテーブルに含まれるか否かを判定し、含まれると判定できた場合に、そのＳＲＡＭに記憶された故障コードを正規の故障コードと認識するようになっていることを特徴とする故障コード記憶管理装置。
【請求項８】
請求項１ないし請求項７の何れか１項に記載の故障コード記憶管理装置において、
常時電圧の供給を受け、電圧が供給されている間情報を保持するＳＲＡＭを備え、
前記記憶制御手段は、前記故障コードを前記ＳＲＡＭに記憶させた後、そのＳＲＡＭに記憶させた故障コードと同一の故障コードを前記不揮発性メモリに記憶させるようになっており、
前記正規データ認識手段は、少なくとも前記誤り検出手段により誤りが生じていることが検出されたならば、前記不揮発性メモリに記憶された故障コードのそれぞれについて、さらに前記ＳＲＡＭに記憶された故障コードと一致するか否かを判定し、前記不揮発性メモリに記憶された故障コードのうち、前記ＳＲＡＭに記憶された故障コードと一致する故障コードを、優先的に正規の故障コードと認識するようになっていることを特徴とする故障コード記憶管理装置。
【請求項９】
請求項１ないし請求項８の何れか１項に記載の故障コード記憶管理装置において、
少なくとも、前記車両のイグニションスイッチのオンからオフまで、或いはオンから次のオンまでの期間（以下、トリップ期間と言う）において、前記誤り検出手段及び前記正規データ認識手段を起動するトリップ期間起動制御手段を備えていることを特徴とする故障コード記憶管理装置。
【請求項１０】
請求項１ないし請求項９の何れか１項に記載の故障コード記憶管理装置において、
前記故障コードを取得して前記検出対象の状態を診断するための外部診断装置が接続されるようになっており、
少なくとも前記外部診断装置から前記故障コードが要求された際に前記誤り検出手段及び前記正規データ認識手段を起動するコード要求時起動制御手段を備えていることを特徴とする故障コード記憶管理装置。
【請求項１１】
故障コードを含む情報テーブル（以下、故障コードテーブルと言う）を記憶するメモリと、
車両に設けられた所定の検査対象について故障が検出された後、当該故障に対応する前記故障コードテーブルに含まれる故障コードであって同一の故障コードを、情報の読み書きが可能な不揮発性メモリの互いに異なる複数の領域にそれぞれ記憶させる記憶制御手段と、を備え、車両に搭載された故障コード記憶管理装置であって、
前記互いに異なる複数の領域から記憶させた故障コードを読み出し、当該読み出した故障コードが、互いに一致するか否かを判断し、少なくとも何れかが一致しないと当該故障コード記憶管理装置にて判断されると、
前記不揮発性メモリの前記互いに異なる領域にそれぞれ記憶された故障コードと、前記故障コードテーブルとを対比し、前記不揮発性メモリに記憶された前記故障コードが前記故障コードテーブルに含まれている故障コードと一致すると判定できた故障コードを、正規の故障コードと認識する正規データ認識手段と、
を備えていることを特徴とする故障コード記憶管理装置。
【請求項１２】
情報の読み書きが可能な不揮発性メモリの互いに異なる領域に、同一のデータを記憶させる記憶制御手段と、
前記不揮発性メモリに記憶された前記データが、互いに一致するか否かを判断し、少なくとも何れかが一致しないと判断したならば、その不揮発性メモリに記憶されたデータに誤りが生じていると判定する誤り検出手段とを備え、車両に搭載される記憶管理装置において、
前記不揮発性メモリに記憶されるべき前記データを含む情報テーブル（以下、データテーブルと言う）を記憶するメモリと、
少なくとも前記誤り検出手段により誤りが生じていることが検出されたならば、前記不揮発性メモリに記憶されたデータのそれぞれについて、前記データテーブルに含まれるか否かを判定し、前記不揮発性メモリに記憶されたデータのうち、前記データテーブルに含まれると判定できたデータを、正規のデータと認識する正規データ認識手段と、
を備えていることを特徴とする記憶管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリに故障コードを記憶させるとともに、少なくともその記憶させた故障コードの誤りを検出する故障コード記憶管理装置、及び記憶管理装置に関する。
【背景技術】
【０００２】
従来、例えば車両の各部を制御する電子制御装置（以下、ＥＣＵと記載する）では、所定の検出対象について故障検出を行うと共に、故障を検出した場合には、その故障を表す故障コードを、書込み可能な半導体メモリ（例えば、ＳＲＡＭ、ＥＥＰＲＯＭ等）に記憶させるようになっている。この半導体メモリは、一般的にはＥＣＵに備えられている。ＳＲＡＭは、車両のバッテリから常時電圧が供給されるように構成された揮発性のメモリである。また、ＥＥＰＲＯＭは、不揮発性のメモリである。
【０００３】
ＥＣＵは、例えばそのＥＣＵと通信可能に接続された外部の診断装置から故障コードの送信要求（以下、故障コード要求と記載する）を受けると、ＳＲＡＭから故障コードを読み出して、その読み出した故障コードを診断装置に送信する。
【０００４】
ここで、車両のバッテリが取り外されてＳＲＡＭに電圧が供給されなくなったりＳＲＡＭに異常が生じてそのＳＲＡＭが初期化されたりして、ＳＲＡＭに記憶された故障コードが消失した場合には、ＥＥＰＲＯＭに記憶させておいた故障コードをＳＲＡＭに書込むことによって、ＳＲＡＭのデータを回復させる。尚、ＥＣＵが診断装置から故障コード要求を受けた場合に、そのＥＣＵがＥＥＰＲＯＭから故障コードを読み出してその診断装置に送信する構成も考えられる。
【０００５】
ところで、不揮発性メモリに記憶された故障コードの内容が、何らかの原因で書き換わってしまったり、或いは破壊されてしまったりすることも想定される。
この点、例えば特許文献１、２には、不揮発性メモリのデータが誤ったデータに書き換わったことを検知するとともに、誤ったデータを正規のデータに復旧させる方法が開示されている。
【０００６】
特許文献１について具体的に説明すると、特許文献１の方法では、不揮発性メモリにおける３つの異なる領域のそれぞれに同じデータを記憶させるとともに、その３つのデータのうち、２つ以上が一致すれば、その一致したデータは正しいデータであると判断する。３つのデータが全て一致すれば、勿論、その３つのデータは正しいと判断する。また、例えば３つのデータのうち２つが一致すればその一致した２つのデータは正しいデータであると判断し、残りのデータは誤っていると判断する。さらに、特許文献１では、誤っていると判断したデータが格納されている領域に、正しいと判断したデータを再度書き込んで、誤ったデータを正規のデータに復旧させるようになっている。
【０００７】
特許文献２にも、特許文献１に類似した思想が開示されている。
【特許文献１】特開２００５−１９６５１５号公報
【特許文献２】特開２００６−２８６１１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、上記特許文献１、２の方法では、不揮発性メモリにおける３つの異なる領域のそれぞれに記憶された故障コードが相互に異なるものになってしまった場合、何れの故障コードが正しいかを判断できなくなってしまう。
【０００９】
すると、例えばＳＲＡＭの故障コードが消失した場合において、そのＳＲＡＭの故障コードを正しく回復できなくなってしまうおそれがある。このため、外部の診断装置からの故障コード要求に対し、正しい故障コードを送信できなくなってしまうおそれがある。故障コード要求に対し、不揮発性メモリから直接故障コードを読み込もうとしても、不揮発性メモリに記憶された故障コードのうち何れが正しい故障コードか分からないため、同じである。
【００１０】
また、不揮発性メモリの３つの故障コードのうち少なくとも２つが誤った故障コードに書き換わるとともに、書き換わった後の故障コードがたまたま一致したという場合には、その誤った故障コードが正しい故障コードであると誤認識されてしまう。この場合、ＥＣＵは、診断装置からの故障コード要求に対し、誤った故障コードをその診断装置に送信してしまうこととなる。
【００１１】
本発明は、こうした問題に鑑みなされたもので、不揮発性メモリの互いに異なる領域に同じ故障コードを記憶させるとともに、少なくともその記憶された故障コードの誤りを検出する故障コード記憶管理装置において、誤りが生じた場合でも正しい故障コードをより確実に認識できるようにすることを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するためになされた請求項１に記載の故障コード記憶管理装置は、情報の読み書きが可能な不揮発性メモリの互いに異なる領域に、車両に備えられた所定の検出対象について検出された故障を表す故障コードであって同一の故障コードを記憶させる記憶制御手段と、不揮発性メモリに記憶された故障コードが、互いに一致するか否かを判断し、少なくとも何れかが一致しないと判断したならば、その不揮発性メモリに記憶された故障コードに誤りが生じていると判定する誤り検出手段とを備えたものであり、車両に搭載される。
【００１３】
そして特に、不揮発性メモリに記憶されるべき故障コードを含む情報テーブル（以下、故障コードテーブルと言う）を記憶するメモリと、少なくとも誤り検出手段により誤りが生じていることが検出されたならば、不揮発性メモリに記憶された故障コードのそれぞれについて、故障コードテーブルに含まれるか否かを判定し、不揮発性メモリに記憶された故障コードのうち、故障コードテーブルに含まれると判定できた故障コードを、正規の故障コードと認識する正規データ認識手段とを備えている。
【００１４】
故障コードテーブルは、不揮発性メモリに記憶されるべき故障コードを含むものであるため、不揮発性メモリに記憶された故障コードが故障コードテーブルに含まれていない場合は、その不揮発性メモリの故障コードは誤っていると言える。逆に言えば、不揮発性メモリの故障コードが故障コードテーブルに含まれていれば、その不揮発性メモリの故障コードは正しい可能性が高い。
【００１５】
このような請求項１の故障コード記憶管理装置によれば、不揮発性メモリの互いに異なる領域に記憶された故障コードが書き換わって、例えば相互に異なるものになってしまった場合でも、不揮発性メモリに記憶された故障コードとメモリの故障コードテーブルとを照合することで、不揮発性メモリの故障コードのうち何れがその不揮発性メモリに記憶されているべきものか、つまり正しい故障コードであるかを認識できるようになる。言い換えれば、不揮発性メモリの互いに異なる領域に記憶された同一の故障コードが相互に異なるものになってしまった場合でも、正しい故障コードが残ってさえすれば、問題なく正しい故障コードが認識されるようになる。
【００１６】
ここで、請求項１の装置では、具体的に、請求項２のように構成することができる。
請求項２の装置は、請求項１の装置において、記憶制御手段は、不揮発性メモリの互いに異なる２つの領域に、同一の故障コードを記憶させるようになっている。
【００１７】
本請求項２のように、具体的に、不揮発性メモリの２箇所に同一の故障コードを記憶させておけば、それらを比較することで、誤りが生じたか否かを検出することができる。
次に、請求項１の装置では、具体的に、請求項３のように構成することができる。
【００１８】
請求項３の装置は、請求項１の装置において、記憶制御手段は、不揮発性メモリの互いに異なる３つの領域に、同一の故障コードを記憶させるようになっている。
本請求項３のように、具体的に、不揮発性メモリの３箇所に同一の故障コードを記憶させておけば、それらを比較することで、誤りが生じたか否かを検出することができる。また、３箇所の故障コードのうち、例えば２箇所で一致する故障コードについては、信頼性が高いと言え、逆に言えば、他の故障コードは誤っている可能性が高いと言える。このため、請求項２と比較すれば、何れの故障コードが正しいか（或いは誤っているか）の予測が容易である。
【００１９】
ここで、請求項３の装置では、請求項４の装置のように構成するとより好ましい。
請求項４の装置は、請求項３の装置において、正規データ認識手段は、不揮発性メモリに記憶された故障コードのうち過半数の領域で一致した故障コード（以下、過半数一致コードと言う）について、故障コードテーブルに含まれるか否かを判定し、含まれると判定できた場合に、その過半数一致コードを正規の故障コードと認識するようになっている。
【００２０】
前述のように、不揮発性メモリの互いに異なる領域に記憶された故障コードのうち過半数の領域で一致した故障コード（過半数一致コード）については、正しい可能性が高い。２つ或いは３つの故障コードがともに、他のデータに書き換わり、その書き換わった後のデータがたまたま一致するというような確率は、非常に小さいと考えられるためである。さらに、過半数一致コードが故障コードテーブルに含まれていれば、その過半数一致コードが正しい可能性は尚更高い。そのような過半数一致コードを正規の故障コードとすれば、信頼性はより向上する。
【００２１】
次に、請求項５の装置は、請求項１〜４の装置において、故障コードテーブルを記憶するメモリは、ＲＯＭであることを特徴としている。
ＲＯＭは、書き換え不可な半導体メモリであるため、故障コードテーブルをＲＯＭに記憶させておけば、その故障コードテーブルが書き換えられる心配はない。このため、不揮発性メモリの故障コードとその故障コードテーブルとの照合結果の信頼性がより向上する。
【００２２】
ところで、請求項１〜５の装置では、不揮発性メモリの誤った故障コードが正しい故障コードに復旧されると尚良い。
そこで、請求項６の装置では、請求項１〜５の装置において、正規データ認識手段により正規の故障コードと認識された故障コードを、不揮発性メモリの領域のうち、その正規の故障コードとは異なる故障コードが記憶された領域に記憶させる再書込み手段を備えている。
【００２３】
このような請求項６の装置によれば、不揮発性メモリの故障コードのうち、正規の故障コードとは異なる故障コード、つまり、誤った故障コードがその正規の故障コードに復旧されるようになり、不揮発性メモリに誤った故障コードが記憶され続けることを防止することができる。またこのため、不揮発性メモリの故障コードの信頼性向上につながる。
【００２４】
次に、請求項７の装置は、請求項１〜６の装置において、常時電圧の供給を受け、電圧が供給されている間情報を保持するＳＲＡＭを備え、記憶制御手段は、故障コードをＳＲＡＭに記憶させた後、そのＳＲＡＭに記憶させた故障コードと同一の故障コードを不揮発性メモリに記憶させるようになっている。
【００２５】
そして、正規データ認識手段は、少なくとも、不揮発性メモリに記憶された故障コードが何れも故障コードテーブルに含まれないと判定した場合に、ＳＲＡＭに記憶された故障コードが故障コードテーブルに含まれるか否かを判定し、含まれると判定できた場合に、そのＳＲＡＭに記憶された故障コードを正規の故障コードと認識するようになっている。
【００２６】
不揮発性メモリには、ＳＲＡＭに記憶された故障コードと同一の故障コードが記憶される。つまり、ＳＲＡＭの故障コードは、不揮発性メモリの故障コードのもととなるものである。このため、不揮発性メモリの故障コードのうち、何れも故障コードテーブルに含まれていないという場合に、ＳＲＡＭの故障コードと故障コードテーブルとを照合することは有効である。具体的に、ＳＲＡＭの故障コードが故障コードテーブルに含まれていれば、そのＳＲＡＭの故障コードは正しい可能性が高く、そのＳＲＡＭの故障コードを正規の故障コードと認識しても、信頼性に問題はない。
【００２７】
ところで、請求項１〜７の装置では、請求項８のように構成するとより確実である。
請求項８の装置は、請求項１〜７の装置において、常時電圧の供給を受け、電圧が供給されている間情報を保持するＳＲＡＭを備え、記憶制御手段は、故障コードをＳＲＡＭに記憶させた後、そのＳＲＡＭに記憶させた故障コードと同一の故障コードを不揮発性メモリに記憶させるようになっている。
【００２８】
そして、正規データ認識手段は、少なくとも誤り検出手段により誤りが生じていることが検出されたならば、不揮発性メモリに記憶された故障コードのそれぞれについて、さらにＳＲＡＭに記憶された故障コードと一致するか否かを判定し、不揮発性メモリに記憶された故障コードのうち、ＳＲＡＭに記憶された故障コードと一致する故障コードを、優先的に正規の故障コードと認識するようになっている。
【００２９】
ところで、不揮発性メモリの故障コードのうち複数種類が故障コードテーブルに含まれる、という場合も想定される。例えば、何れかの故障コードが、故障コードテーブルに含まれる他の故障コードにたまたま書き換わってしまった、というような場合が考えられる。
【００３０】
この場合、不揮発性メモリの故障コードと故障コードテーブルとを照合するのみでは、不揮発性メモリの故障コードの何れが正しいかは判断しかねるが、不揮発性メモリの故障コードと、その不揮発性メモリの故障コードの元になる同一の故障コードが記憶されているＳＲＡＭの故障コードとを比較することで、正しい故障コードを認識し得るようになる。具体的に、不揮発性メモリの故障コードがＳＲＡＭの故障コードと一致すれば、その不揮発性メモリの故障コードは正しい可能性は高い。逆に言えば、不揮発性メモリの故障コードが故障コードテーブルに含まれる故障コードであっても、ＳＲＡＭの故障コードと一致しなければ、その不揮発性メモリの故障コードは誤っていると言える。
【００３１】
次に、請求項９の装置は、請求項１〜８の装置において、検出対象は車両であり、少なくとも、車両のイグニションスイッチのオンからオフまで、或いはオンから次のオンまでの期間（以下、トリップ期間と言う）において、誤り検出手段及び正規データ認識手段を起動するトリップ期間起動制御手段を備えている。
【００３２】
誤り検出手段及び正規データ認識手段が、少なくともトリップ期間において起動すれば、不揮発性メモリの故障コードの誤りが検出されないままの状態となってしまうことを防止でき、また、不揮発性メモリの故障コードの誤りが検出された場合に正しい故障コードが認識されないままの状態となってしまうことを防止することができる。このため、不揮発性メモリの故障コードの信頼性が向上する。また、故障コードを用いた故障診断に際し、その故障診断に支障をきたすことがない。
【００３３】
次に、請求項１０の装置は、請求項１〜９の装置において、故障コードを取得して検出対象の状態を診断するための外部診断装置が接続されるようになっており、少なくとも外部診断装置から故障コードが要求された際に誤り検出手段及び正規データ認識手段を起動するコード要求時起動制御手段を備えている。
【００３４】
このように、少なくとも外部診断装置から故障コードが要求された際に、誤り検出手段及び正規データ認識手段が起動すれば、外部診断装置に、確実に正しい故障コードが送信されるようにすることができる。逆に言えば、外部診断装置に誤った故障コードが送信されてしまったり、故障コード記憶管理装置において正しい故障コードを認識できないことにより外部診断装置に故障コードが送信されなくなってしまったりすることを防止することができる。
【００３５】
次に、請求項１１の発明は、故障コードテーブルを記憶するメモリと、車両に設けられた所定の検査対象について故障が検出された後、当該故障に対応する故障コードテーブルに含まれる故障コードであって同一の故障コードを、情報の読み書きが可能な不揮発性メモリの互いに異なる複数の領域にそれぞれ記憶させる記憶制御手段と、を備えてなる車両に搭載された故障コード記憶管理装置であって、互いに異なる複数の領域から記憶させた故障コードを読み出し、当該読み出した故障コードが、互いに一致するか否かを判断し、少なくとも何れかが一致しないと当該故障コード記憶管理装置にて判断されると、不揮発性メモリの互いに異なる領域にそれぞれ記憶された故障コードと、前記故障コードテーブルとを対比し、一致した故障コードがある場合にその故障コードを、正規の故障コードと認識するようにしたものである。従って、請求項１で述べた効果と同じ効果を得ることができる。
【００３６】
次に、請求項１２の発明は、情報の読み書きが可能な不揮発性メモリの互いに異なる領域に、同一のデータを記憶させる記憶制御手段と、不揮発性メモリに記憶されたデータが、互いに一致するか否かを判断し、少なくとも何れかが一致しないと判断したならば、その不揮発性メモリに記憶されたデータに誤りが生じていると判定する誤り検出手段とを備え、車両に搭載される記憶管理装置において、不揮発性メモリに記憶されるべきデータを含む情報テーブル（以下、データテーブルと言う）を記憶するメモリと、少なくとも誤り検出手段により誤りが生じていることが検出されたならば、不揮発性メモリに記憶されたデータのそれぞれについて、データテーブルに含まれるか否かを判定し、不揮発性メモリに記憶されたデータのうち、データテーブルに含まれると判定できたデータを、正規のデータと認識する正規データ認識手段とを備えている記憶管理装置である。
【００３７】
これによれば、請求項１で述べた効果と同じ効果を得ることができる。
【発明を実施するための最良の形態】
【００３８】
以下に、本発明の実施形態を図面に基づき説明する。
図１は、本発明が適用された電子制御装置（以下、ＥＣＵと記載する）１の構成図である。このＥＣＵ１は、車両の各部を制御するためのものである。
【００３９】
ＥＣＵ１は、マイコン２と、不揮発性メモリとしてのＥＥＰＲＯＭ１４とを備えている。
マイコン２は、所定のプログラムに従って各種処理を実行するＣＰＵ４と、ＣＰＵ４が実行するプログラム等が記憶されるＲＯＭ８と、ＣＰＵ４の演算結果等の情報を記憶するためのＲＡＭ１０と、車両の図示しないバッテリから常時電圧が供給されて、電圧が供給される間データを保持可能なバックアップＲＡＭ（以下、ＳＲＡＭと記載する）１２と、外部の電子装置と接続するためのインタフェース（Ｉ／Ｏ）６と、それらを相互に接続するバス１６とを備えている。
【００４０】
ＣＰＵ４は、ＲＯＭ８に記憶された故障診断のためのプログラムに従い動作して、車両の故障の有無を検出するようになっている。そして、故障を検出した場合には、故障を表す故障コード（ＤＴＣ：Ｄｉａｇｎｏｓｔｉｃ  Ｔｒｏｕｂｌｅ  Ｃｏｄｅｓ）を、ＳＲＡＭ１２及びＥＥＰＲＯＭ１４に記憶させる。具体的には、ＤＴＣをＳＲＡＭ１２に記憶させると共に、ＳＲＡＭ１２に記憶させたＤＴＣと同じデータを、永久故障コード（ＰＤＴＣ：Ｐｅｒｍａｎｅｎｔ  Ｄｉａｇｎｏｓｔｉｃ  Ｔｒｏｕｂｌｅ  Ｃｏｄｅｓ）として、ＥＥＰＲＯＭ１４に記憶させる。尚、ＥＥＰＲＯＭ１４にＰＤＴＣを記憶させておくことは、法規により義務づけられている。
【００４１】
以下、故障コードのことをＤＴＣとも言い、特に、ＥＥＰＲＯＭ１４に記憶された故障コードのことをＰＤＴＣとも言うものとする。
状態診断装置３は、ＥＣＵ１から故障コードを取得してそのＥＣＵ１が搭載された車両の状態診断を行う装置であり、Ｉ／Ｏ６を介して、ＥＣＵ１のマイコン２と接続される。具体的には、例えば修理工場やディーラーにおいて、修理担当者等が、状態診断装置３をＥＣＵ１に通信可能に接続する。
【００４２】
マイコン２は、状態診断装置３から故障コードの送信要求を受けると、ＳＲＡＭ１２に記憶されたＤＴＣを読み出して、その読み出したＤＴＣを状態診断装置３に送信する。仮に、車両のバッテリが取り外されてＳＲＡＭ１２に電圧が供給されなくなったりＳＲＡＭ１２に異常が生じてそのＳＲＡＭ１２が初期化されたりして、ＳＲＡＭ１２に記憶されたＤＴＣが消失した場合には、ＥＥＰＲＯＭ１４に記憶させておいたＰＤＴＣをＳＲＡＭ１２に書込むことによって、ＳＲＡＭ１２のデータを回復させる。
【００４３】
次に、図２は、ＣＰＵ４が実行するＤＴＣ記憶処理を表すフローチャートである。このＤＴＣ記憶処理は、例えば、トリップ期間（車両のイグニションスイッチがオンされてからオフされるまでの期間、或いは車両のイグニションスイッチがオンされてから次にオンされるまでの期間であり、ここでは何れの期間もトリップ期間というものとする）において、異常の検出対象のそれぞれについて少なくとも１回実行される。実行タイミングは任意に設定が可能である。
【００４４】
このＤＴＣ記憶処理では、まず、Ｓ１１０において、所定の検出対象について異常があるか否かの異常判定を行う。次に、Ｓ１２０に移行し、Ｓ１１０の異常判定に基づき異常が有るか否かを判定し、異常無しと判定した場合には（Ｓ１２０：ＮＯ）、そのまま当該処理を終了する。
【００４５】
一方、Ｓ１２０で異常有りと判定すると（Ｓ１２０：ＹＥＳ）、Ｓ１３０に移行し、ＲＯＭ８に記憶された後述のＤＴＣテーブルから、検出できた異常に対応するＤＴＣ（対象ＤＴＣ）を検索する。ＤＴＣテーブルは、ＳＲＡＭ１２及びＥＥＰＲＯＭ１４に記憶すべき全ての故障コードを記憶するテーブルである。ここで、図２（ａ）に、ＤＴＣテーブルの例を示す。図２（ａ）の例では、ＤＴＣとして、０ｘ１１、０ｘ１２、０ｘ２０、０ｘ２５の４種類を記憶したＤＴＣテーブルを示している。尚、ＤＴＣのうち、後半２桁は、１６進数表示でコード（数値）を表す部分であり、ＤＴＣの実質的部分である。前半２桁は、後半２桁が１６進数表示であることを表す符号である。
【００４６】
Ｓ１３０の後、Ｓ１４０に進み、ＲＯＭ８のＤＴＣテーブル（例えば図２（ａ）参照）に、今回検出された異常を表すＤＴＣ（対象ＤＴＣ）が記憶されているか否かを判定する。
【００４７】
Ｓ１４０で、ＲＯＭ８のＤＴＣテーブルに対象ＤＴＣが記憶されていないと判定すると（Ｓ１４０：ＮＯ）、今回の異常についてはＤＴＣを記憶しておかなくても良い、或いは今回の異常についてはＤＴＣが割り当てられていないと判断して、そのまま当該処理を終了する。
【００４８】
一方、Ｓ１４０で、ＲＯＭ８のＤＴＣテーブルに対象ＤＴＣが記憶されていると判定すると（Ｓ１４０：ＹＥＳ）、Ｓ１５０に移行する。
Ｓ１５０では、そのＤＴＣテーブルに記憶されているＤＴＣであって、今回検出された異常を表すＤＴＣを、ＳＲＡＭ１２に記憶させる。そしてその後、当該処理を終了する。
【００４９】
ここで、一連の流れの一例を挙げると、所定のセンサの異常を検出すると共に（Ｓ１２０：ＹＥＳ）、そのセンサの異常を表すＤＴＣとして０ｘ１１がＤＴＣテーブルに記憶されていれば（Ｓ１４０：ＹＥＳ）、その０ｘ１１をＳＲＡＭ１２に記憶させる（Ｓ１５０）。
【００５０】
尚、Ｓ１５０では、ＳＲＡＭ１２に、ＤＴＣをミラー方式で記憶させる。具体的に、元データと、元データの逆とも言えるミラーデータとを記憶させる。例えば０ｘ１１を例にとると、その０ｘ１１とともに、その０ｘ１１のミラーデータとして、０ｘ１１の１６進数部分の「１１」に加算した場合に「ＦＦ」となるような数値を持つデータを記憶させる。「１１」に加算して「ＦＦ」となる値は、「ＥＥ」である。この場合、ＳＲＡＭ１２には、０ｘ１１と０ｘＥＥとが記憶される。０ｘ１１のミラーデータである０ｘＥＥは、いわば０ｘ１１と同じ内容を表す。例えば０ｘＥＥのミラーデータをとれば０ｘ１１となる。このようにミラーデータを記憶させるのは、例えば、ＳＲＡＭ１２が何らかの原因で書き換わった場合でも、ミラーチェック（元データとミラーデータを加算して「ＦＦ」になるか）による信頼性確認を実施（チェックで「ＦＦ」でない時は、ＳＲＡＭ１２の異常と判断して初期化）できるようにする趣旨である。
【００５１】
次に、図３は、ＣＰＵ４が実行するＰＤＴＣ記憶処理の流れを表すフローチャートである。具体的に、ＳＲＡＭ１２に記憶されたＤＴＣを、ＰＤＴＣとしてＥＥＰＲＯＭ１４に記憶させる処理である。また、この処理は、例えば、トリップ期間において少なくとも１回実行される。尚、トリップ期間において定期的に複数回実行されても良い。
【００５２】
このＰＤＴＣ記憶処理では、まず、Ｓ２１０で、ＳＲＡＭ１２にＤＴＣが記憶されているか否かを判定し、記憶されていないと判定すると（Ｓ２１０：ＮＯ）、そのまま当該処理を終了する。尚、ＳＲＡＭ１２にＤＴＣが記憶されているとすれば、前述のように、ミラー方式でＤＴＣが記憶されている（図３（ａ）参照）。
【００５３】
一方、Ｓ２１０でＳＲＡＭ１２にＤＴＣが記憶されていると判定すると（Ｓ２１０：ＹＥＳ）、Ｓ２２０に移行し、そのＳＲＡＭ１２に記憶されているＤＴＣを、ＰＤＴＣとしてＥＥＰＲＯＭ１４に記憶させる。ここでは、ＥＥＰＲＯＭ１４が有する格納領域のうち、所定の３箇所に同じＰＤＴＣを記憶させる（図３（ｂ））。或いは、ＥＥＰＲＯＭ１４が有する格納領域のうち、所定の２箇所に同じＰＤＴＣを記憶させる（図３（ｃ））。以下の説明では、前者を３面冗長方式と記載し、後者を２面冗長方式と記載する。
【００５４】
図３（ｂ）に示すように、３面冗長方式では、ＰＤＴＣ（例えば０ｘ１１）が３箇所に記憶され、図３（ｃ）に示すように、２面冗長方式では、ＰＤＴＣ（例えば０ｘ１１）が２箇所に記憶される。また、３面冗長方式及び２面冗長方式の何れにしても、ＣＰＵ４は、１面単位でＰＤＴＣの書き込み及び読み戻しを行うとともに、読み戻したデータが書込み時のデータに一致すれば、ＰＤＴＣが正常に書き込まれたと判断する。そして、これを全ての面について行い、その全ての面についてＰＤＴＣが正常に書き込まれたと判断して初めて、Ｓ２２０の処理を終了する。
【００５５】
そして、Ｓ２２０の処理の後、当該処理を終了する。
次に、ＥＥＰＲＯＭ１４に記憶されたＰＤＴＣの信頼性のチェックを行う処理について、図４〜図１２を用いて説明する。ここでは、ＥＥＰＲＯＭ１４におけるＰＤＴＣの記憶方式が２面冗長方式の場合、及び３面冗長方式の場合の両方について説明する。
【００５６】
まず、図４〜図８を用いて、２面冗長方式の場合について説明する。尚、ここでは、ＥＥＰＲＯＭ１４には２箇所に０ｘ１１が記憶されており、ＤＴＣテーブルは、図２（ａ）と同じ構成であることを前提とする。
【００５７】
また、図４〜図８の処理は、トリップ期間において少なくとも１回実行される。或いは、状態診断装置３から故障コードの送信要求を受けたタイミングで開始される。
図４の処理では、まず、Ｓ３１０で、ＥＥＰＲＯＭ１４において２箇所に記憶されたＰＤＴＣの比較を行う。
【００５８】
次に、Ｓ３２０に進み、Ｓ３１０の比較結果に基づきその２箇所のＰＤＴＣが一致するか否かを判定し、一致すると判定すると（Ｓ３２０：ＹＥＳ）、異常がない（ＰＤＴＣは信頼できる）と判断してそのまま当該処理を終了する。
【００５９】
一方、Ｓ３２０で、２箇所に記憶されたＰＤＴＣが一致しないと判定すると（Ｓ３２０：ＮＯ）、Ｓ３３０に移行し、その２箇所に記憶された２種類のＰＤＴＣについてそれぞれ、ＲＯＭ８のＤＴＣテーブルと照合する。具体的には、２種類のＰＤＴＣについてそれぞれ、ＤＴＣテーブル内の複数種類のＤＴＣのいずれかと一致するものが存在するか否かを照合する。
【００６０】
そして、Ｓ３４０に進み、Ｓ３３０の照合結果に基づきその２箇所のＰＤＴＣがＤＴＣテーブルに含まれるか否かを判定し、両ＰＤＴＣともＤＴＣテーブル内にあると判定すると、図５の処理に移行する。また、２つのＰＤＴＣのうち、何れか一方のみがＤＴＣテーブル内にあると判定すると、図６の処理に移行する。また、両ＰＤＴＣともＤＴＣテーブル内に無いと判定すると、図７の処理に移行する。
【００６１】
尚、両ＰＤＴＣが一致せずその両ＰＤＴＣともがＤＴＣテーブル内にある例を図４（ａ）に示し、２つのＰＤＴＣのうち何れか一方のみがＤＴＣテーブル内にある例を図４（ｂ）に示し、両ＰＤＴＣともＤＴＣテーブル内にない例を図４（ｃ）に示す。
【００６２】
両ＰＤＴＣが一致せずその両ＰＤＴＣともがＤＴＣテーブル内にある例としては、図４（ａ）に示すように、上段の如く何れか一方（２面データ）がたまたまＤＴＣテーブルに含まれるＤＴＣに化けた場合、或いは、下段の如く両ＰＤＴＣともがたまたまＤＴＣテーブルに含まれるＤＴＣに化けた場合が考えられる。
【００６３】
２つのＰＤＴＣのうち何れか一方のみがＤＴＣテーブル内にある例としては、図４（ｂ）に示すように、上段の如くその２つのＰＤＴＣのうち何れか一方（２面データ）がＤＴＣテーブルに含まれないデータに化けた場合がある。或いは、下段の如くその２つのＰＤＴＣの両方ともが化けてしまったものの、何れか一方（２面データ）がたまたまＤＴＣテーブルに含まれるＤＴＣに化けた場合も想定される。
【００６４】
両ＰＤＴＣともＤＴＣテーブル内に無い場合としては、図４（ｃ）に示すように、その両ＰＤＴＣともがＤＴＣテーブルに含まれないデータに化けた場合が考えられる。
次に、図５の処理について説明する。
【００６５】
図５の処理は、前述のように、図４のＳ３４０でＥＥＰＲＯＭ１４の２箇所のＰＤＴＣともがＤＴＣテーブル内にあると判定された場合に実行される処理であり、まず、Ｓ４１０で、ＳＲＡＭ１２に異常が生じているか否かを判定する。ここでは、例えばＳＲＡＭ１２に車両のバッテリから電圧が供給されているか否かを判断して、電圧が供給されていない場合にはＳＲＡＭ１２の異常と判定する。また、ＳＲＡＭ１２には、特有のキーワードが記憶されるようになっており、そのキーワードが正しいか否かに基づき、ＳＲＡＭ１２に異常があるか否かを判定する。具体的に、ＳＲＡＭ１２にキーワードが記憶されていなかったり、キーワードが化けていたり破壊されていたりした場合には、ＳＲＡＭ１２に異常があると判定する。さらには、ＤＴＣが記憶される領域を参照し、ＤＴＣの種類のそれぞれについて、元データとミラーデータとを比較して異常がないか否かを判定すると共に、例えば大部分のＤＴＣについて元データとミラーデータとの比較結果に異常があると判定したならば、ＳＲＡＭ１２に何らかの異常が生じていると判定するようにすることもできる。
【００６６】
Ｓ４１０でＳＲＡＭ１２に異常が生じていると判定すると（Ｓ４１０：ＮＯ）、Ｓ４６０に移行し、ＳＲＡＭ１２に記憶されたＤＴＣ及びＥＥＰＲＯＭ１４に記憶されたＰＤＴＣを共にクリア（初期化）する。ＳＲＡＭ１２のＤＴＣ及びＥＥＰＲＯＭ１４のＰＤＴＣの何れを信用して良いか不明であるためである。また、ＥＥＰＲＯＭ１４が異常である旨を、ＳＲＡＭ１２或いはＥＥＰＲＯＭ１４に記憶させる。尚、ＳＲＡＭ１２及びＥＥＰＲＯＭ１４には異常が生じている可能性があるため、別の図示しないメモリに、ＥＥＰＲＯＭ１４が異常である旨を記憶させるようにしても良い。
【００６７】
一方、Ｓ４１０でＳＲＡＭ１２に異常が生じていないと判定すると（Ｓ４１０：ＹＥＳ）、Ｓ４２０に移行し、ＳＲＡＭ１２のＤＴＣとＥＥＰＲＯＭ１４のＰＤＴＣとを比較する。
【００６８】
そして、Ｓ４３０に進み、Ｓ４２０で比較した結果ＳＲＡＭ１２のＤＴＣとＥＥＰＲＯＭ１４のＰＤＴＣとで一致するデータがあるか否かを判定する。Ｓ４３０で一致するデータがないと判定すると（Ｓ４３０：ＮＯ）、Ｓ４６０に移行する。ＳＲＡＭ１２のＤＴＣ及びＥＥＰＲＯＭ１４のＰＤＴＣの何れを信用して良いか不明であるためである。
【００６９】
一方、Ｓ４３０で一致するデータがあると判定すると（Ｓ４３０：ＹＥＳ）、Ｓ４４０に移行し、ＥＥＰＲＯＭ１４のＰＤＴＣのうち、ＳＲＡＭ１２のＤＴＣと一致したものを正しいＰＤＴＣとして採用する。図２及び図３で前述したように、ＣＰＵ４は、ＳＲＡＭ１２にＤＴＣを記憶させるともに、そのＳＲＡＭ１２に記憶させたＤＴＣをＰＤＴＣとしてＥＥＰＲＯＭ１４に記憶させることから、ＳＲＡＭ１２には、ＥＥＰＲＯＭ１４のＰＤＴＣの元となるＤＴＣが記憶されていることとなる。このため、ＥＥＰＲＯＭ１４のＰＤＴＣのうち、ＳＲＡＭ１２のＤＴＣと一致したものについては、正しい（信頼性が高い）データであると言える。
【００７０】
次に、Ｓ４５０に進み、ＥＥＰＲＯＭ１４の領域のうち、誤ったＰＤＴＣが記憶されている（データ化けしたＰＤＴＣが記憶されている）領域（以下、誤情報格納領域と記載する）に対して、Ｓ４４０で採用した正しいＰＤＴＣを書き込む再書込み処理を実行する。この再書込み処理については、図８に記載している。そして、Ｓ４５０の再書込み処理の後、当該図５の処理を終了する。
【００７１】
ここで、再書込み処理について、図８を用いて説明する。
この再書込み処理では、まず、Ｓ７１０で、ＥＥＰＲＯＭ１４が有する記憶領域が全て故障していないかどうかを判定する。尚、記憶領域のそれぞれについて、その記憶領域が故障している場合には、故障している旨の情報が後述するＳ７８０で所定のメモリに記憶される。Ｓ７１０で記憶領域が全て故障していると判定すると（Ｓ７１０：ＹＥＳ）、再書込みができないと判断してそのまま当該処理を終了する。
【００７２】
一方、Ｓ７１０で、記憶領域が全て故障しているわけではない、言い換えると、少なくとも何れかの記憶領域が故障していないと判定すると（Ｓ７１０：ＮＯ）、Ｓ７２０に移行し、記憶領域（或いは誤情報格納領域）への正しいＰＤＴＣの書込みが失敗した場合にその失敗した回数をカウントする書込失敗カウンタ（図示省略）をリセットし、その値を０にする。
【００７３】
次に、Ｓ７３０に進み、誤情報格納領域に、正しいデータ（ＰＤＴＣ）を書き込む。
次に、Ｓ７４０に進み、Ｓ７３０で誤情報格納領域に書き込んだＰＤＴＣを読み出す。
そして、Ｓ７５０に進み、Ｓ７４０で誤情報格納領域から読み出したＰＤＴＣが、Ｓ７３０でその誤情報格納領域に書き込んだＰＤＴＣと一致するか否かを判定し、一致すると判定すると（Ｓ７５０：ＹＥＳ）、誤情報格納領域に正しいＰＤＴＣが正常に書き込まれたと判断して、そのまま当該処理を終了する。
【００７４】
一方、Ｓ７５０で一致しないと判定すると（Ｓ７５０：ＮＯ）、Ｓ７６０に移行し、書込失敗カウンタを１だけインクリメントする。
そして次に、Ｓ７７０に進み、書込失敗カウンタの値が２より大きいか否かを判定し、２より大きくないと判定すると（Ｓ７７０：ＮＯ）、再びＳ７３０に戻り、再書込みを試みる。
【００７５】
一方、Ｓ７７０で書込失敗カウンタの値が２より大きいと判定すると（Ｓ７７０：ＹＥＳ）、正常に再書込みができないと判断してＳ７８０に移行し、今回再書込みの対象とした領域について故障が生じている旨を、所定のメモリに記憶する。
【００７６】
次に、Ｓ７９０に移行し、ＥＥＰＲＯＭ１４において、他に書込み可能な記憶領域があるか否かを判定し、無いと判定した場合には（Ｓ７９０：ＮＯ）、書込みをあきらめてそのまま当該処理を終了する。
【００７７】
一方、Ｓ７９０で他に書込み可能な領域があると判定すると（Ｓ７９０：ＹＥＳ）、Ｓ８００に移行し、正しいＰＤＴＣを記憶させる対象の記憶領域を、その書込み可能な領域に変更する。そして、再びＳ７１０に戻る。
【００７８】
次に、図６の処理について説明する。
図６の処理は、前述のように、図４のＳ３４０で２種類のＰＤＴＣのうち何れか一方のみがＤＴＣテーブル内の複数種類のＤＴＣのいずれかと一致すると判定された場合に実行される処理であり、まずＳ５１０で、２種類のＰＤＴＣのうちＤＴＣテーブル内に含まれるＰＤＴＣを正しいＰＤＴＣとして採用する。次に、Ｓ５２０に移行し、前述した図８の再書込み処理を実行する。そしてその後、当該図６の処理を終了する。
【００７９】
尚、非常に稀とは考えられるものの、２つのＰＤＴＣのうち何れか一方のみがＤＴＣテーブル内にある場合において、前述のように、その２つのＰＤＴＣが誤ったＰＤＴＣに化け、たまたま何れか一方がＤＴＣテーブルに含まれるＤＴＣに一致したような場合も想定される。そこで、図６のＳ５１０の処理に代えて、２つのＰＤＴＣをＳＲＡＭ１２のＤＴＣと照合し、そのＤＴＣと一致したＰＤＴＣを正しいＰＤＴＣとして採用する、という処理を行っても良い。これによれば、信頼性がより向上する。
【００８０】
次に図７の処理について説明する。
図７の処理は、前述のように、図４のＳ３４０で２つのＰＤＴＣが共にＤＴＣテーブルに含まれないと判定された場合に実行される処理であり、まず、Ｓ６１０で、ＳＲＡＭ１２に異常が生じているか否かを判定する。このＳ６１０の処理は、前述のＳ４１０の処理と同じである。そして、Ｓ６１０でＳＲＡＭ１２に何らかの異常が生じていると判定すると（Ｓ６１０：ＮＯ）、Ｓ６６０に移行する。このＳ６６０の処理は、前述のＳ４６０の処理と同じである。
【００８１】
一方、Ｓ６１０でＳＲＡＭ１２に異常が生じていないと判定すると（Ｓ６１０：ＹＥＳ）、Ｓ６２０に移行し、ＳＲＡＭ１２のＤＴＣと、ＲＯＭ８のＤＴＣテーブルとを照合する。これは、ＥＥＰＲＯＭ１４の２つのＰＤＴＣが共にＤＴＣテーブル内に無いためその何れも信用できず、このためＥＥＰＲＯＭ１４に記憶させるＰＤＴＣの元となるＤＴＣが記憶されているＳＲＡＭ１２におけるそのＤＴＣが信用できるか否かを判定する趣旨である。
【００８２】
次に、Ｓ６３０に移行し、Ｓ６２０でＳＲＡＭ１２のＤＴＣとＲＯＭ８のＤＴＣテーブルとを照合した結果、一致するデータがあるか否かを判定し、一致するデータがないと判定すると（Ｓ６３０：ＮＯ）、ＳＲＡＭ１２のＤＴＣも信用できないと判断してＳ６６０に移行する。
【００８３】
一方、Ｓ６３０で一致するデータがあると判定すると（Ｓ６３０：ＹＥＳ）、Ｓ６４０に移行し、ＳＲＡＭ１２のＤＴＣを正しいＤＴＣとして採用する。
そして次に、Ｓ６５０に進み、前述の再書込み処理（図８参照）を実行し、その後、当該図７の処理を終了する。
【００８４】
次に、図９〜図１２を用いて、３面冗長方式の場合について説明する。尚、ここでは、ＥＥＰＲＯＭ１４には３箇所に０ｘ１１が記憶されており、ＤＴＣテーブルは図２（ａ）と同じ構成を有しているものとする。
【００８５】
図９の処理では、まず、Ｓ８１０で、ＥＥＰＲＯＭ１４において３箇所に記憶されたＰＤＴＣの比較を行う。次に、Ｓ８２０に進み、Ｓ８１０の比較結果に基づきその３箇所のＰＤＴＣが全て一致するか否かを判定し、全て一致すると判定すると（Ｓ８２０：ＹＥＳ）、異常がないと判断してそのまま当該処理を終了する。
【００８６】
一方、Ｓ８２０で３箇所のＰＤＴＣが全て一致するわけではないと判定すると（Ｓ８２０：ＮＯ）、Ｓ８３０に移行し、その３箇所に記憶された３つ
のＰＤＴＣについてそれぞれ、ＲＯＭ８に記憶されたＤＴＣテーブルと照合する。具体的には、３つのＰＤＴＣについてそれぞれ、ＤＴＣテーブル内の複数種類のＤＴＣのいずれかと一致するものが存在するか否かを照合する。
そして、Ｓ８４０で、Ｓ８３０の照合結果に基づきその３箇所のＰＤＴＣがＤＴＣテーブルに含まれるか否かを判定し、３つのＰＤＴＣのうち、２種類以上がＤＴＣテーブル内にあると判定すると、図１０の処理に移行する。また、３つのＰＤＴＣのうち１種類のみがＤＴＣテーブル内にあると判定すると、図１１の処理に移行する。また、３つのＰＤＴＣのうち何れもＤＴＣテーブル内に無いと判定すると、図１２の処理に移行する。
【００８７】
尚、３つのＰＤＴＣのうち、２種類以上がＤＴＣテーブル内にある例を図９（ａ）に示し、３つのＰＤＴＣのうち１種類のみがＤＴＣテーブル内にある例を図９（ｂ）に示し、３つのＰＤＴＣのうち何れもＤＴＣテーブル内に無い例を図９（ｃ）に示す。
【００８８】
３つのＰＤＴＣのうち、２種類以上がＤＴＣテーブル内にある例としては、図９（ａ）に示すように、上段の如く３つのＰＤＴＣのうちの２つ（２、３面データ）が化けたものの、その２つのうちの１つ（２面データ）がたまたまＤＴＣテーブルに含まれるＤＴＣに化けた場合、或いは、下段の如く３つのＰＤＴＣのうちの１つ（３面データ）が、たまたまＤＴＣテーブルに含まれるＤＴＣに化けた場合がある。
【００８９】
３つのＰＤＴＣのうち１種類のみがＤＴＣテーブル内にある例としては、図９（ｂ）に示すように、上段の如く３つのＰＤＴＣのうちの２つ（２、３面データ）がＤＴＣテーブルに含まれないデータに化けた場合がある。或いは、下段の如く３つのＰＤＴＣが全て化けたものの、その３つのうちの１つ（２面データ）がたまたまＤＴＣテーブルに含まれるＤＴＣに化けた場合も想定される。
【００９０】
３つのＰＤＴＣのうち何れもＤＴＣテーブル内に無い例としては、図９（ｃ）に示すように、３つのＰＤＴＣがともにＤＴＣテーブルに含まれないデータに化けた場合がある。
次に、図１０の処理について説明する。
【００９１】
図１０の処理は、前述のように、図９のＳ８４０で、３つのＰＤＴＣのうち２種類以上がＤＴＣテーブルに含まれると判定された場合に実行される処理であり、まず、Ｓ９１０で、ＥＥＰＲＯＭ１４に記憶されたＰＤＴＣのうち、２箇所で一致するものがあり、かつその２箇所で一致するＰＤＴＣがＲＯＭ８のＤＴＣテーブルに含まれているか否かを判定する。
【００９２】
Ｓ９１０で、２箇所で一致するＰＤＴＣがない、或いは２箇所で一致するＰＤＴＣがあってもそのＰＤＴＣがＲＯＭ８のＤＴＣテーブルに含まれていないと判定すると（Ｓ９１０：ＮＯ）、Ｓ９２０に移行する。
【００９３】
Ｓ９２０では、ＳＲＡＭ１２に異常が生じているか否かを判定し、異常が生じていると判定すると（Ｓ９２０：ＮＯ）、Ｓ９７０に移行する。
Ｓ９７０では、ＳＲＡＭ１２に記憶されたＤＴＣ及びＥＥＰＲＯＭ１４に記憶されたＰＤＴＣを共にクリア（初期化）すると共に、ＥＥＰＲＯＭ１４が異常である旨を、ＳＲＡＭ１２或いはＥＥＰＲＯＭ１４に記憶させる。尚、ＥＥＰＲＯＭ１４が異常である旨を、図示しない他のメモリに記憶させても良い。
【００９４】
一方、Ｓ９２０でＳＲＡＭ１２に異常が生じていないと判定すると（Ｓ９２０：ＹＥＳ）、Ｓ９３０に移行し、ＳＲＡＭ１２のＤＴＣとＥＥＰＲＯＭ１４のＰＤＴＣとを比較する。
【００９５】
次に、Ｓ９４０に進み、ＥＥＰＲＯＭ１４のＰＤＴＣのうち、何れか１つでもＳＲＡＭ１２のＤＴＣと一致するか否かを判定し、一致しないと判定すると（Ｓ９４０：ＮＯ）、Ｓ９７０に移行する。ＳＲＡＭ１２のＤＴＣ及びＥＥＰＲＯＭ１４のＰＤＴＣの何れを信用して良いか不明であるためである。
【００９６】
一方、Ｓ９４０で、ＥＥＰＲＯＭ１４のＰＤＴＣのうち、何れか１つでもＳＲＡＭ１２のＤＴＣと一致すると判定すると（Ｓ９４０：ＹＥＳ）、Ｓ９５０に移行する。またここで、Ｓ９１０で、ＥＥＰＲＯＭ１４に記憶されたＰＤＴＣのうち、２箇所で一致するものがあり、かつその２箇所で一致するＰＤＴＣがＲＯＭ８のＤＴＣテーブルに含まれていると判定した場合も（Ｓ９１０：ＹＥＳ）、Ｓ９５０に移行する。
【００９７】
まず、Ｓ９１０から移行した９５０では、ＥＥＰＲＯＭ１４の２箇所で一致し、ＲＯＭ８のＤＴＣテーブルにも含まれていたＰＤＴＣを、正しいＰＤＴＣとして採用する。また、Ｓ９４０から移行したＳ９５０では、ＥＥＰＲＯＭ１４のＰＤＴＣのうち、ＳＲＡＭ１２のＤＴＣと一致したものを、正しいＰＤＴＣとして採用する。
【００９８】
そして次に、Ｓ９６０に進み、前述した再書込み処理（図８参照）を実行する。そしてその後、当該図１０の処理を終了する。
次に、図１１の処理について説明する。
【００９９】
図１１の処理は、前述のように、図９のＳ８４０で、３つのＰＤＴＣのうち１種類のみがＤＴＣテーブル内の複数種類のＤＴＣのいずれかと一致すると判定された場合に実行される処理であり、まず、Ｓ１０１０で、３つのＰＤＴＣのうちＤＴＣテーブル内に含まれる１種類のＰＤＴＣを正しいＰＤＴＣとして採用する。
【０１００】
Ｓ１０１０の後は、Ｓ１０２０に進み、前述した再書込み処理（図８参照）を実行する。そしてその後、当該図１１の処理を終了する。
尚、非常に稀とは考えられるものの、３つのＰＤＴＣのうち１種類のみがＤＴＣテーブル内にある場合において、前述のように、３つのＰＤＴＣが全て化けたものの、その３つのうちの１つがたまたまＤＴＣテーブルに含まれるＤＴＣに一致したような場合も想定される。そこで、図１１のＳ１０１０の処理に代えて、３つのＰＤＴＣをＳＲＡＭ１２のＤＴＣと照合し、そのＤＴＣと一致したＰＤＴＣを正しいＰＤＴＣとして採用する、という処理を行っても良い。これによれば、信頼性がより向上する。
【０１０１】
次に、図１２の処理について説明する。
図１２の処理は、前述のように、図９のＳ８４０で３つのＰＤＴＣのうち何れもＤＴＣテーブル内に無いと判定された場合に実行される処理であり、まず、Ｓ１１１０で、ＳＲＡＭ１２に異常が生じているか否かを判定する。このＳ１１１０の処理は、前述のＳ４１０（或いはＳ６１０）の処理と同じである。そして、Ｓ１１１０でＳＲＡＭ１２に何らかの異常が生じていると判定すると（Ｓ１１１０：ＮＯ）、Ｓ１１６０に移行し、ＳＲＡＭ１２に記憶されたＤＴＣ及びＥＥＰＲＯＭ１４に記憶されたＰＤＴＣを共にクリア（初期化）すると共に、ＥＥＰＲＯＭ１４が異常である旨を、ＳＲＡＭ１２或いはＥＥＰＲＯＭ１４に記憶させる。尚、ＥＥＰＲＯＭ１４が異常である旨を、図示しない他のメモリに記憶させても良い。
【０１０２】
一方、Ｓ１１１０でＳＲＡＭ１２に異常が生じていないと判定すると（Ｓ１１１０：ＹＥＳ）、Ｓ１１２０に移行し、ＳＲＡＭ１２のＤＴＣと、ＲＯＭ８のＤＴＣテーブルとを照合する。これは、３つのＰＤＴＣが共にＤＴＣテーブル内に無いためその何れも信用できず、このためＥＥＰＲＯＭ１４に記憶させるＰＤＴＣの元となるＤＴＣが記憶されているＳＲＡＭ１２におけるそのＤＴＣが信用できるか否かを判定する趣旨である。
【０１０３】
次に、Ｓ１１３０に移行し、Ｓ１１２０でＳＲＡＭ１２のＤＴＣとＲＯＭ８のＤＴＣテーブルとを照合した結果、一致するデータがあるか否かを判定し、一致するデータがないと判定すると（Ｓ１１３０：ＮＯ）、ＳＲＡＭ１２のＤＴＣも信用できないと判断してＳ１１６０に移行する。
【０１０４】
一方、Ｓ１１３０で一致するデータがあると判定すると（Ｓ１１３０：ＹＥＳ）、Ｓ１１４０に移行し、ＳＲＡＭ１２のＤＴＣを正しいＤＴＣとして採用する。
そして次に、Ｓ１１５０に進み、前述の再書込み処理（図８参照）を実行し、その後、当該図１２の処理を終了する。
【０１０５】
以上説明したように、本実施形態においては、車両の故障を表す故障コードを、ＥＥＰＲＯＭ１４の互いに異なる領域に記憶させると共に、そのＥＥＰＲＯＭ１４に記憶された故障コードが全て一致することで、その故障コードは正しいと判断するため、ＥＥＰＲＯＭ１４のデータ（故障コード）の信頼性が向上する。
【０１０６】
また、ＥＥＰＲＯＭ１４に記憶された故障コードが書き換わったりして、全て一致するわけではなくなったとしても、ＥＥＰＲＯＭ１４に記憶されるべき故障コードのテーブル（故障コードテーブル）と、ＥＥＰＲＯＭ１４の故障コードとを照合するため、ＥＥＰＲＯＭ１４において正しい故障コードが残ってさえいれば、問題なく、ＥＥＰＲＯＭ１４の故障コードのうち、何れが正しい故障コードであるかを認識することができる。これは、ＥＥＰＲＯＭ１４の故障コードのうち、故障コードテーブルに含まれないものは誤りであると判断できることからも明らかである。
【０１０７】
さらに、ＥＥＰＲＯＭ１４に正しい故障コードが残っていなかったとしても、ＥＥＰＲＯＭ１４の故障コードの元となる同じ故障コードが記憶されているＳＲＡＭ１２の故障コードと故障データテーブルとを照合して、一致したものを正しい故障コードと認識するため、信頼性を維持することができる。
【０１０８】
また、ＥＥＰＲＯＭ１４に、故障コードテーブルに含まれる故障コードが複数種類記憶されている場合は、ＥＥＰＲＯＭ１４の故障コードとＳＲＡＭ１２の故障コードとを照合することで、ＥＥＰＲＯＭ１４の故障コードのうち何れが正しいかを認識できる。前述のように、ＳＲＡＭ１２には、ＥＥＰＲＯＭ１４の故障コードの元となる同じ故障コードが記憶されているため、ＥＥＰＲＯＭ１４の故障コードのうち、ＳＲＡＭ１２の故障コードと一致するものについては、正しいと言える。
【０１０９】
また、故障コードテーブルはＲＯＭ８に記憶されているため、書き換わることがなく安心である。
尚、本実施形態において、Ｓ１５０及びＳ２２０の処理が記憶制御手段に相当し、Ｓ３１０、Ｓ３２０、Ｓ８１０及びＳ８２０の処理が誤り検出手段に相当し、Ｓ４２０〜Ｓ４４０、Ｓ５１０、Ｓ６２０〜Ｓ６４０、Ｓ９３０〜Ｓ９５０、Ｓ１０１０、及びＳ１１２０〜Ｓ１１４０が正規データ認識手段に相当し、特に、Ｓ４２０〜Ｓ４４０及びＳ９３０〜Ｓ９５０の処理が請求項８の正規データ認識手段に相当し、Ｓ５１０及びＳ１０１０の処理が請求項１の正規データ認識手段に相当し、Ｓ６２０〜Ｓ６４０及びＳ１１２０〜Ｓ１１４０の処理が請求項７の正規データ認識手段に相当し、図８の処理、特に、Ｓ７３０〜Ｓ７５０の処理が再書込み手段に相当し、ＣＰＵ４が、トリップ期間起動制御手段及びコード要求時起動制御手段に相当している。
【０１１０】
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術範囲内において種々の形態をとることができる。
例えば、上記実施形態では、車両の故障を表す故障コードの記憶を例にとり説明したが、記憶対象となるデータは、故障コードのみならず、どのような情報であっても良い。
【０１１１】
また、上記実施形態の図４のＳ３２０において、非常に稀であるとは思われるものの、２箇所のＰＤＴＣがたまたま同じ別のＰＤＴＣに化けてしまってその２箇所のＰＤＴＣが一致したと判定される場合も否定できないため、２箇所のＰＤＴＣが一致した場合でも、Ｓ３３０のように、２箇所のＰＤＴＣをＲＯＭ８に記憶されたＤＴＣテーブルと照合するようにしても良い。そして、そのＰＤＴＣがＤＴＣテーブルに含まれていると判断できて初めて、異常がない（ＰＤＴＣは正しい）と判断するようにしても良い。これによれば、より信頼性が向上する。３面冗長方式の場合でも同様である。つまり、図９のＳ８２０で、３箇所のＰＤＴＣが全て一致したと判断した場合でも、Ｓ８３０のようにＲＯＭ８内のＤＴＣテーブルと照合すると共に、そのＤＴＣテーブルに含まれていると判断できて初めて、異常がない（ＰＤＴＣは正しい）と判断するようにしても良い。
【０１１２】
また、上記実施形態の図８の再書込み処理において、対象領域に故障が生じてその対象領域にＰＤＴＣを記憶させることができない場合に（Ｓ７７０：ＹＥＳ）、対象領域を他の記憶領域に変更するようにしているが（Ｓ８００）、変更することなく図８の処理が終了するようにしても良い。
【０１１３】
また、上記実施形態において、ＳＲＡＭ１２にＤＴＣのミラーデータを記憶させるようにしているが、ミラーデータを記憶させなくても良い。このようにすれば、ＳＲＡＭ１２のメモリ資源を節約することができる。また、ミラーデータではなく、元データと同じデータを記憶させるようにしても良い。
【図面の簡単な説明】
【０１１４】
【図１】本実施形態のＥＣＵ１の構成図である。
【図２】ＥＣＵ１１のＣＰＵ４が実行するＤＴＣ記憶処理を表すフローチャートである。
【図３】ＥＣＵ１１のＣＰＵ４が実行するＰＤＴＣ記憶処理を表すフローチャートである。
【図４】ＥＣＵ１１のＣＰＵ４が実行するＥＥＰＲＯＭ１４のＰＤＴＣの信頼性をチェックする処理を表すフローチャートである（２面冗長方式その１）。
【図５】ＥＣＵ１１のＣＰＵ４が実行するＥＥＰＲＯＭ１４のＰＤＴＣの信頼性をチェックする処理を表すフローチャートである（２面冗長方式その２）。
【図６】ＥＣＵ１１のＣＰＵ４が実行するＥＥＰＲＯＭ１４のＰＤＴＣの信頼性をチェックする処理を表すフローチャートである（２面冗長方式その３）。
【図７】ＥＣＵ１１のＣＰＵ４が実行するＥＥＰＲＯＭ１４のＰＤＴＣの信頼性をチェックする処理を表すフローチャートである（２面冗長方式その４）。
【図８】ＥＣＵ１１のＣＰＵ４が実行する再書込み処理を表すフローチャートである。
【図９】ＥＣＵ１１のＣＰＵ４が実行するＥＥＰＲＯＭ１４のＰＤＴＣの信頼性をチェックする処理を表すフローチャートである（３面冗長方式その１）。
【図１０】ＥＣＵ１１のＣＰＵ４が実行するＥＥＰＲＯＭ１４のＰＤＴＣの信頼性をチェックする処理を表すフローチャートである（３面冗長方式その２）。
【図１１】ＥＣＵ１１のＣＰＵ４が実行するＥＥＰＲＯＭ１４のＰＤＴＣの信頼性をチェックする処理を表すフローチャートである（３面冗長方式その３）。
【図１２】ＥＣＵ１１のＣＰＵ４が実行するＥＥＰＲＯＭ１４のＰＤＴＣの信頼性をチェックする処理を表すフローチャートである（３面冗長方式その４）。
【符号の説明】
【０１１５】
１…ＥＣＵ
２…マイコン
３…状態診断装置
４…ＣＰＵ
６…Ｉ／Ｏ
８…ＲＯＭ
１０…ＲＡＭ
１２…ＳＲＡＭ
１４…ＥＥＰＲＯＭ
１６…バス
【図１】
0004363471.tif 000002
【図２】
0004363471.tif 000003
【図３】
0004363471.tif 000004
【図４】
0004363471.tif 000005
【図５】
0004363471.tif 000006
【図６】
0004363471.tif 000007
【図７】
0004363471.tif 000008
【図８】
0004363471.tif 000009
【図９】
0004363471.tif 000010
【図１０】
0004363471.tif 000011
【図１１】
0004363471.tif 000012
【図１２】
0004363471.tif 000013