(57)【特許請求の範囲】
【請求項１】
予め定められた時間毎に実行される時間同期ジョブに設けられ、メモリを使用する前又は使用終了後か、メモリの使用中かを、判定する手段と、
前記時間同期ジョブに設けられ、前記判定手段によりメモリを使用する前又は使用終了後であると判定されたときに、予め定められた診断単位バイト数×設定回数の１ジョブ分のバイト数ずつ診断する高速診断手段と、
前記時間同期ジョブに設けられ、前記判定手段によりメモリの使用中であると判定されたときに、前記時間同期ジョブの複数回に１回の割合で、前記診断単位バイト数ずつ診断する低速診断手段と、
を含んで構成されるマイコン用メモリの診断装置。
【請求項２】
予め定められた時間毎に実行される時間同期ジョブに設けられ、メモリを使用する前又は使用終了後か、メモリの使用中かを、判定する手段と、
前記時間同期ジョブに設けられ、前記判定手段によりメモリを使用する前又は使用終了後であると判定されたときに、予め定められた診断単位バイト数×設定回数の１ジョブ分のバイト数ずつ診断する高速診断手段と、
前記時間同期ジョブに設けられ、前記判定手段によりメモリの使用中であると判定されたときに、前記診断単位バイト数ずつ診断する低速診断手段と、
を含んで構成されるマイコン用メモリの診断装置。
【請求項３】
エンジン制御用マイコンに使用されるメモリの診断装置であって、エンジン始動前又はエンジン停止時に高速診断手段によって診断し、エンジン運転中に低速診断手段によって診断することを特徴とする請求項１又は請求項２記載のマイコン用メモリの診断装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、自動車用エンジンなどにおいて各種電子制御機器の制御用マイコンに使用されるメモリ（ＲＡＭ及びＲＯＭ）の診断装置に関する。
【０００２】
【従来の技術】
従来より、自動車用エンジンの制御装置においては、制御用マイコンのＣＰＵの自己診断の他、ＣＰＵによるＲＡＭ、ＲＯＭ等のメモリの診断を行っており、具体的には、エンジン始動前の電源投入時に、メモリの全領域に対し、ＲＡＭの場合はリード・ライトチェック、ＲＯＭの場合はサムチェック又はパリティチェックを行っている。
【０００３】
【発明が解決しようとする課題】
しかしながら、電制スロットル弁等、エンジン挙動に直接的に影響を与える制御装置においては、エンジン運転中のメモリ故障を検知する必要がある。
その一方、メモリ診断は時間がかかることから、エンジン運転中のメモリ診断は、診断中におけるエンジン制御機能に影響を与えることがある。
【０００４】
本発明は、このような従来の問題点に鑑み、制御機能に影響を与えることなく、全メモリ領域をリアルタイムに診断できるようにすることを目的とする。
【０００５】
【課題を解決するための手段】
このため、請求項１に係る発明では、予め定められた時間毎に実行される時間同期ジョブに設けられ、メモリを使用する前又は使用終了後か、メモリの使用中かを、判定する手段と、前記時間同期ジョブに設けられ、前記判定手段によりメモリを使用する前又は使用終了後であると判定されたときに、予め定められた診断単位バイト数×設定回数の１ジョブ分のバイト数ずつ診断する高速診断手段と、前記時間同期ジョブに設けられ、前記判定手段によりメモリの使用中であると判定されたときに、前記時間同期ジョブの複数回に１回の割合で、前記診断単位バイト数ずつ診断する低速診断手段とを設けて、マイコン用メモリの診断装置を構成する（図１参照）。
【０００６】
また、請求項２に係る発明では、予め定められた時間毎に実行される時間同期ジョブに設けられ、メモリを使用する前又は使用終了後か、メモリの使用中かを、判定する手段と、前記時間同期ジョブに設けられ、前記判定手段によりメモリを使用する前又は使用終了後であると判定されたときに、予め定められた診断単位バイト数×設定回数の１ジョブ分のバイト数ずつ診断する高速診断手段と、前記時間同期ジョブに設けられ、前記判定手段によりメモリの使用中であると判定されたときに、前記診断単位バイト数ずつ診断する低速診断手段とを設けて、マイコン用メモリの診断装置を構成する（図１参照）。
【０００７】
請求項３に係る発明では、エンジン制御用マイコンに使用されるメモリの診断装置であって、エンジン始動前又はエンジン停止時に高速診断手段によって診断し、エンジン運転中に低速診断手段によって診断することを特徴とする。
【０００８】
【発明の効果】
請求項１又は請求項２に係る発明によれば、メモリを使用する前又は使用終了後（非使用中）に、メモリの診断を全領域にわたって連続的に実行する高速診断によって、メモリを診断する一方、メモリの使用中は、所定の周期で割込んでメモリの診断を分割された領域毎に間欠的に実行する低速診断によって、制御機能に影響を与えることなく、全メモリ領域をリアルタイムに診断できるという効果が得られる。
【０００９】
また、請求項１又は請求項２に係る発明によれば、時間同期ジョブにより予め定められた診断単位バイト数×設定回数の１ジョブ分のバイト数ずつ診断することで、メモリの診断を全領域にわたって連続的に実行する高速診断が可能となる。
また、特に請求項１に係る発明によれば、複数回に１回の時間同期ジョブにより予め定められた診断単位バイト数ずつ診断することで、容量が比較的小さいＲＡＭに適した低速診断が可能となる。
また、特に請求項２に係る発明によれば、時間同期ジョブにより予め定められた診断単位バイト数ずつ診断することで、容量が比較的大きいＲＯＭに適した低速診断が可能となる。
【００１０】
請求項３に係る発明によれば、エンジン制御用マイコンの場合に、エンジン始動前又はエンジン停止時に高速診断手段によって診断し、エンジン運転中に低速診断手段によって診断することで、エンジン運転中にエンジン制御機能に影響を与えることなく、全メモリ領域をリアルタイムに診断できる。
【００１１】
【発明の実施の形態】
以下に、自動車用エンジンの制御用マイコンのＲＡＭ及びＲＯＭを診断する場合の本発明の実施形態について説明する。
図２は本発明の第１の実施形態を示すＲＡＭ診断のフローチャートであり、制御用マイコンのＣＰＵにより時間同期ジョブ（１０ｍｓジョブ）として実行される。
【００１２】
ステップ１（図にはＳ１と記す。以下同様）では、診断中のＲＡＭの書換えを防止するため、割込みを禁止する。
ステップ２では、エンジン始動前（電源投入時）か、それ以外の通常時（エンジン運転中）かを判定する。具体的には、始動前終了フラグを読込み、０の場合は始動前、１の場合（後述するステップ１１で１にセットされた場合）は通常時と判定する。
【００１３】
始動前の場合は、ステップ３へ進む。
ステップ３では、初回か否かを判定し、初回の場合は、ステップ４で診断対象ＲＡＭアドレスを初期設定する。診断対象ＲＡＭアドレスは、診断単位バイト数を４バイトとし、４バイトずつの診断対象ＲＡＭ毎に診断を行って、最終的にＲＡＭの全領域（但しバックアップＲＡＭを除く）に対して診断を行うように、初期設定する。
【００１４】
ステップ５では、診断対象ＲＡＭアドレスを参照する。
ステップ６では、図３のフロー（ステップ１０１〜）に従って、始動前ＲＡＭ診断を実行する。
ステップ１０１では、診断対象ＲＡＭアドレスに基づく４バイトずつの診断対象ＲＡＭのデータをバッファに退避する。
【００１５】
ステップ１０２では、診断対象ＲＡＭに例えばＡＡＡＡＡＡＡＡｈ（４バイトデータ）を格納する。
ステップ１０３では、診断対象ＲＡＭのデータをテンポラリ（ＣＰＵ側の一時レジスタ）にコピーする。
ステップ１０４では、テンポラリのデータをビット反転する。これにより、ＡＡＡＡＡＡＡＡｈの場合、５５５５５５５５ｈとなる。
【００１６】
ステップ１０５では、診断対象ＲＡＭにテンポラリのデータを再格納する。
ステップ１０６では、診断対象ＲＡＭのデータとテンポラリのデータとの比較を行う。
この比較の結果、相違があった場合に、ＲＡＭ診断ＮＧとして、ステップ１１０へ進み、ＮＧ処理へ移行する。一致している場合は、ステップ１０７へ進む。
【００１７】
ステップ１０７では、診断対象ＲＡＭにバッファのデータを復帰する。
ステップ１０８では、診断対象ＲＡＭのデータとバッファのデータとの比較を行う。
この比較の結果、相違があった場合に、ＲＡＭ診断ＮＧとして、ステップ１１０へ進み、ＮＧ処理に移行する。一致している場合は、ステップ１０９へ進む。
【００１８】
ステップ１０９では、診断対象ＲＡＭをクリアして、図２のメインフロー（ステップ７）に戻る。
ステップ７では、診断対象ＲＡＭアドレスをインクリメントする。
ステップ８では、１ジョブ分として、予め設定したバイト数（４バイト×設定回数）の処理が終了したか否かを判定し、１ジョブ分未終了の場合は、ステップ５へ戻る。すなわち、ステップ５〜７を繰り返し実行して、始動前ＲＡＭ診断を次の診断対象ＲＡＭに対して行う。
【００１９】
１ジョブ分の診断が正常に終了すれば、ステップ８からステップ９へ進む。
ステップ９では、ＲＡＭの全領域の診断が終了したか否かを判定し、未終了の場合は、次のジョブで始動前ＲＡＭ診断を続行すべく、本ジョブを終了する。
このように、１０ｍｓジョブにより予め定められた診断単位バイト数×設定回数の１ジョブ分のバイト数ずつ診断することにより、ＲＡＭの診断を全領域にわたって連続的に実行する。
【００２０】
ＲＡＭの全領域の診断が正常に終了すれば、ステップ９からステップ１０へ進んで、始動前ＲＡＭ診断ＯＫとし、ステップ１１で始動前終了フラグ＝１とし、ステップ１２で割込みを許可して、本ジョブを終了する。
通常時は、ステップ１３へ進む。
ステップ１３では、Ｃ１をインクリメントする。
【００２１】
ステップ１４では、Ｃ１＝１０か否かを判定する。
Ｃ１≠１０（Ｃ１＜１０）の場合は、ステップ２１で割込みを許可して、本ジョブを終了する。
Ｃ１＝１０の場合は、ステップ１５でＣ１＝０に戻した後、ステップ１６へ進む。言い換えれば、１０ｍｓ×１０＝１００ｍｓ毎の周期でステップ１６へ進む。
【００２２】
ステップ１６では、診断対象ＲＡＭアドレスを参照する。尚、始動前ＲＡＭ診断の終了時に診断対象ＲＡＭアドレスは先頭アドレスにセットされている。
ステップ１７では、図４のフロー（ステップ２０１〜）に従って、通常時ＲＡＭ診断を実行する。
ステップ２０１では、診断対象ＲＡＭアドレスに基づく４バイトずつの診断対象ＲＡＭのデータをバッファに退避する。
【００２３】
ステップ２０２では、診断対象ＲＡＭのデータをテンポラリ（ＣＰＵ側の一時レジスタ）にコピーする。
ステップ２０３では、テンポラリのデータをビット反転する。
ステップ２０４では、診断対象ＲＡＭにテンポラリのデータを格納する。
ステップ２０５では、診断対象ＲＡＭのデータとテンポラリのデータとの比較を行う。
【００２４】
この比較の結果、相違があった場合に、ＲＡＭ診断ＮＧとして、ステップ２０８へ進み、ＮＧ処理へ移行する。一致している場合は、ステップ２０６へ進む。
ステップ２０６では、診断対象ＲＡＭにバッファのデータを復帰する。
ステップ２０７では、診断対象ＲＡＭのデータとバッファのデータとの比較を行う。
【００２５】
この比較の結果、相違があった場合に、ＲＡＭ診断ＮＧとして、ステップ２０８へ進み、ＮＧ処理に移行する。一致している場合は、図２のメインフロー（ステップ１８）に戻る。
ステップ１８では、診断対象ＲＡＭアドレスをインクリメントする。
ステップ１９では、ＲＡＭの全領域の診断が終了したか否かを判定し、未終了の場合は、ステップ２１で割込みを許可して、本ジョブを終了する。この場合、１０ｍｓジョブの続きとして、エンジン制御のための演算処理を実行することになる。
【００２６】
従って、１０ｍｓジョブの１０回につき１回、すなわち１０ｍｓ×１０＝１００ｍｓ毎の周期で、４バイトずつの診断対象ＲＡＭを診断する。すなわち、複数回に１回の１０ｍｓジョブにより予め定められた診断単位バイト数ずつ診断することにより、所定の周期で割込んでＲＡＭの診断を分割された領域毎に間欠的に実行する。
【００２７】
ＲＡＭの全領域の診断が正常に終了すれば、ステップ１９からステップ２０へ進んで、通常時ＲＡＭ診断ＯＫとし、ステップ２１で割込みを許可して、本ジョブを終了する。
この後も、エンジン運転中である限り、上記の通常時ＲＡＭ診断を繰り返し実行する。
【００２８】
ここで、ステップ１，２，３〜１２の部分が高速診断手段に相当し、ステップ１，２，１３〜２１の部分が低速診断手段に相当する。
尚、ＲＡＭの全領域を１０Ｋバイトとして、４バイトずつの診断対象ＲＡＭを単位として診断するものとすると、１０Ｋバイト／４バイト＝２５６０回の診断が必要となる。
【００２９】
始動前ＲＡＭ診断は、始動前にＲＡＭの全領域を５００ｍｓ以内で診断を終了するように、診断時間を例えば４００ｍｓに設定すると、２５６０回／４００ｍｓ＝６４回／１０ｍｓであるので、１０ｍｓジョブ毎に、６４回診断する必要がある。従って、１０ｍｓジョブ毎に、６４回×４バイト＝２５６バイトのリード・ライトチェックを行う。
【００３０】
通常時ＲＡＭ診断は、１０ｍｓジョブの１０回に１回で、１００ｍｓ毎に、４バイトずつの診断対象ＲＡＭの診断を行うことで、診断時間は、（１０Ｋバイト／４バイト）×１００ｍｓ＝２５６ｓｅｃ、すなわち、約４．２ｍｉｎとなる。図５は本発明の第２の実施形態を示すＲＯＭ診断のフローチャートであり、制御用マイコンのＣＰＵにより時間同期ジョブ（１０ｍｓジョブ）として実行される。
【００３１】
ステップ３１では、エンジン始動前（電源投入時）か、それ以外の通常時（エンジン運転中）かを判定する。具体的には、始動前終了フラグを読込み、０の場合は始動前、１の場合（後述するステップ４１で１にセットされた場合）は通常時と判定する。
始動前の場合は、ステップ３２へ進む。
【００３２】
ステップ３２では、初回か否かを判定し、初回の場合は、ステップ３３で診断対象ＲＯＭアドレスを初期設定し、ステップ３４でサム値ＳＵＭ及びパリティ値ＰＴＹを０にする。尚、診断対象ＲＯＭアドレスは、診断単位バイト数を４バイトとし、４バイトずつの診断対象ＲＯＭ毎に診断を行って、最終的にＲＯＭの全領域に対して診断を行うように、初期設定する。
【００３３】
ステップ３５では、診断対象ＲＯＭアドレスを参照する。
ステップ３６では、診断対象ＲＯＭアドレスに基づく４バイトずつの診断対象ＲＯＭのデータを加算して、次式の如く、サム値ＳＵＭを演算する。
ＳＵＭ＝ＳＵＭ＋データ
ステップ３７では、診断対象ＲＯＭアドレスに基づく４バイトずつの診断対象ＲＯＭのデータの排他的論理和（ＸＯＲ）により、次式のごとく、パリティ値ＰＴＹを演算する。
【００３４】
ＰＴＹ＝ＸＯＲ（ＰＴＹ，データ）
ステップ３８では、診断対象ＲＯＭアドレスをインクリメントする。
ステップ３９では、１ジョブ分として、予め設定したバイト数（４バイト×設定回数）の処理が終了したか否かを判定し、１ジョブ分未終了の場合は、ステップ３５へ戻る。すなわち、ステップ３５〜３８を繰り返し実行して、サム演算及びパリティ演算を次の診断対象ＲＯＭに対して行う。
【００３５】
１ジョブ分のサム演算及びパリティ演算が終了した場合は、ステップ３９からステップ４０へ進む。
ステップ４０では、ＲＯＭの全領域のサム演算及びパリティ演算が終了したか否かを判定し、未終了の場合は、次のジョブでサム演算及びパリティ演算を続行すべく、本ジョブを終了する。
【００３６】
このように、１０ｍｓジョブにより予め定められた診断単位バイト数×設定回数の１ジョブ分のバイト数ずつ診断（最終的な診断のための演算）することにより、ＲＯＭの診断を全領域にわたって連続的に実行する。
ＲＯＭの全領域のサム演算及びパリティ演算が終了した場合は、ステップ４０からステップ４１へ進んで、始動前終了フラグ＝１とした後、最終的な始動前ＲＯＭ診断を行うべく、ステップ４７へ進む。
【００３７】
ステップ４７では、サム値ＳＵＭを予め定めてある比較値ＳＵＭＣＨＫ＃と比較し、相違する場合は、ＲＯＭ診断ＮＧとして、ステップ５１へ進み、ＮＧ処理に移行する。一致した場合は、ステップ４８へ進む。
ステップ４８では、パリティ値ＰＴＹを予め定めてある比較値ＰＴＹＣＨＫ＃と比較し、相違する場合は、ＲＯＭ診断ＮＧとして、ステップ５１へ進み、ＮＧ処理に移行する。一致した場合は、ステップ４９へ進む。
【００３８】
ステップ４９では、サムチェック及びパリティチェックのいずれもＯＫであるので、ＲＯＭ診断ＯＫとし、次のステップ５０でサム値ＳＵＭ及びパリティ値ＰＴＹを０にして、本ジョブを終了する。
通常時は、ステップ４２へ進む。
ステップ４２では、診断対象ＲＡＭアドレスを参照する。尚、始動前ＲＯＭ診断の終了時に診断対象ＲＯＭアドレスは先頭アドレスにセットされている。
【００３９】
ステップ４３では、診断対象ＲＯＭアドレスに基づく４バイトずつの診断対象ＲＯＭのデータを加算して、次式の如く、サム値ＳＵＭを演算する。
ＳＵＭ＝ＳＵＭ＋データ
ステップ４４では、診断対象ＲＯＭアドレスに基づく４バイトずつの診断対象ＲＯＭのデータの排他的論理和（ＸＯＲ）により、次式のごとく、パリティ値ＰＴＹを演算する。
【００４０】
ＰＴＹ＝ＸＯＲ（ＰＴＹ，データ）
ステップ４５では、診断対象ＲＯＭアドレスをインクリメントする。
ステップ４６では、ＲＯＭの全領域のサム演算及びパリティ演算が終了したか否かを判定し、未終了の場合は、本ジョブを終了する。この場合、１０ｍｓジョブの続きとして、エンジン制御のための演算処理を実行することになる。
【００４１】
従って、１０ｍｓジョブ毎に、４バイトずつサム演算及びパリティ演算を行う。すなわち、１０ｍｓジョブにより予め定められた診断単位バイト数ずつ診断（最終的な診断のための演算）することにより、所定の周期で割込んでＲＯＭの診断を分割された領域毎に間欠的に実行する。
ＲＯＭの全領域のサム演算及びパリティ演算が終了した場合は、最終的な通常時ＲＯＭ診断を行うべく、ステップ４７へ進む。
【００４２】
ステップ４７では、サム値ＳＵＭを予め定めてある比較値ＳＵＭＣＨＫ＃と比較し、相違する場合は、ＲＯＭ診断ＮＧとして、ステップ５１へ進み、ＮＧ処理に移行する。一致した場合は、ステップ４８へ進む。
ステップ４８では、パリティ値ＰＴＹを予め定めてある比較値ＰＴＹＣＨＫ＃と比較し、相違する場合は、ＲＯＭ診断ＮＧとして、ステップ５１へ進み、ＮＧ処理に移行する。一致した場合は、ステップ４９へ進む。
【００４３】
ステップ４９では、サムチェック及びパリティチェックのいずれもＯＫであるので、ＲＯＭ診断ＯＫとし、次のステップ５０でサム値ＳＵＭ及びパリティ値ＰＴＹを０にして、本ジョブを終了する。
ここで、ステップ３１，３２〜４１，４７〜５０が高速診断手段に相当し、ステップ３１，４２〜４６，４７〜５０が低速診断手段に相当する。
【００４４】
尚、ＲＯＭの全領域を２５６Ｋバイトとして、４バイトずつの診断対象ＲＯＭを単位として診断するものとすると、２５６Ｋバイト／４バイト＝６５５３６回の診断が必要となる。
始動前ＲＯＭ診断は、始動前にＲＯＭの全領域を５００ｍｓ以内で診断を終了するように、診断時間を例えば４２０ｍｓに設定すると、６５５３６回／４２０ｍｓ＝１５６０回／１０ｍｓ（余り１６回）であるので、１０ｍｓジョブ毎に、１５６０回診断する必要がある。従って、１０ｍｓジョブ毎に、１５６０回×４バイト＝６２４０バイトのサム及びパリティの演算を行う。
【００４５】
通常時ＲＯＭ診断は、１０ｍｓジョブで、１０ｍｓ毎に、４バイトずつの診断対象ＲＯＭのサム及びパリティの演算を行うことで、診断時間は、（２５６Ｋバイト／４バイト）×１０ｍｓ＝６５５ｓｅｃ、すなわち、約１１ｍｉｎとなる。
尚、第１の実施形態（図３，図４）のステップ１１０，２０８、又は、第２の実施形態（図５）のステップ５１でのＮＧ処理について説明すれば、ＮＧ処理としては、制御対象機器の電源ＯＦＦ等を行う。
【００４６】
例えば、自動車用エンジンの制御装置で、電制スロットル弁を制御している場合は、電制スロットル弁のモータに対する電源回路のリレーをＯＦＦにする。リレーＯＦＦにより、電制スロットル弁はリターンスプリングの作用で、比較的低開度側のフェイルセーフ開度に固定され、エンジン出力が規制されるものの、最低限のリンプホーム運転が可能となる。
【００４７】
また、以上の実施形態では、エンジン始動前に高速診断を行うようにしたが、エンジン停止時に高速診断を行うようにしてもよい。
【図面の簡単な説明】
【図１】本発明の構成を示す機能ブロック図
【図２】本発明の第１の実施形態を示すＲＡＭ診断のフローチャート
【図３】同上実施形態における始動前ＲＡＭ診断のフローチャート
【図４】同上実施形態における通常時ＲＡＭ診断のフローチャート
【図５】本発明の第２の実施形態を示すＲＯＭ診断のフローチャート
【図１】
0003578638.tif 000002
【図２】
0003578638.tif 000003
【図３】
0003578638.tif 000004
【図４】
0003578638.tif 000005
【図５】
0003578638.tif 000006