以下に本発明の実施形態を図面とともに説明する。
本実施形態の電子制御装置(以下、ECUという)1は、車両に搭載され、車両のエンジン(不図示)の制御を行う。
図1に示すようにECU1は、CPU、プログラムを記憶する記憶媒体としてのROM、データを一時記憶するためのRAM、入出力ポートなどからなるマイクロコンピュータ(以下、マイコンという)2,3を備える。
マイコン2は、ROMに記憶されているアプリケーションプログラム20(本実施形態では、例えば、点火制御用プログラム21、噴射制御用プログラム22および失火検出用プログラム23)を実行する。これによりマイコン2は、エンジンに取り付けられたイグナイタ11およびインジェクタ12を制御するための処理、エンジンの失火を検出した際に異常警告13を実施する処理などを行う。
マイコン3は、ROMに記憶されているアプリケーションプログラム30(本実施形態では、例えば、燃焼状態量算出用プログラム31およびセンサ異常検出用プログラム32)を実行する。これによりマイコン3は、エンジンの各気筒に設けられた筒内圧力センサ14からの信号に基づいて、エンジンの燃焼状態量を算出する処理、筒内圧力センサ14の異常を検出する処理などを行う。
また、マイコン2とマイコン3は、通信線4,5を介して相互にデータ通信可能に接続されている。また、マイコン2の入出力ポートとマイコン3の入出力ポートは、信号線6を介して相互に信号入出力可能に接続されている。
そしてマイコン3は、図2に示すように、時間に同期したタイミング(本実施形態では4ms毎)で、通信線4を介して、DMA(Dynamic Memory Access)通信にてデータをマイコン2へ送信する(図2の矢印AL01,AL02,AL03,AL04を参照)。以下、時間に同期したタイミングで実行するDMA通信を時間同期DMA通信という。
そして時間同期DMA通信では、送信タイミング毎に、複数個(本実施形態では8個)のデータを一括して送信するように構成されており、一括して送信される複数個の送信データをそれぞれ格納するためのデータ領域TDR1, TDR2,・・・, TDRn(nは正の整数。本実施形態ではn=8)が予め設定されている。
本実施形態では、データ領域TDR1, TDR2,・・・, TDR8のうち、データ領域TDR1,TDR2,TDR3,TDR4,TDR5は、送信タイミング毎に送信されるデータを格納するための通常データ領域として割り当てられている。また、データ領域TDR6,TDR7,TDR8は、通信異常時にデータを再送するための予備データ領域として割り当てられている。なお、データ領域TDR1,TDR2,TDR3,TDR4,TDR5に格納されるデータを、それぞれDATA1,DATA2,DATA3,DATA4,DATA5と表記する。なお、通常データ領域に格納される送信データとしては、例えば、シフトポジション情報が挙げられる。
さらにマイコン3は、エンジンのクランク軸の回転角度(クランク角度)を検出するクランク角センサ15(図1を参照)からの信号を入力し、クランク角度に同期したタイミング(本実施形態では180°CA毎)で、通信線5を介して、DMA通信にてデータをマイコン2へ送信する(図2の矢印AL11,AL12,AL13を参照)。なお、「CA」とは、クランクアングルを意味する。以下、クランク角度に同期したタイミングで実行するDMA通信を角度同期DMA通信という。
そして角度同期DMA通信では、送信タイミング毎に、複数個(本実施形態では8個)のデータを一括して送信するように構成されており、一括して送信される複数個の送信データをそれぞれ格納するためのデータ領域ADR1, ADR2,・・・, ADRn(nは正の整数。本実施形態ではn=8)が予め設定されている。
本実施形態では、データ領域ADR1, ADR2,・・・, ADR8のうち、データ領域ADR1, ADR2, ADR3, ADR4, ADR5は、送信タイミング毎に送信されるデータを格納するための通常データ領域として割り当てられている。また、データ領域ADR6, ADR7, ADR8は、通信異常時にデータを再送するための予備データ領域として割り当てられている。なお、データ領域ADR1, ADR2, ADR3, ADR4, ADR5に格納されるデータを、それぞれdata1,data2,data3,data4,data5と表記する。data1,data2,data3,data4,data5は、アプリケーションプログラム20で用いられる制御データであり、マイコン3がアプリケーションプログラム30(燃焼状態量算出用プログラム31およびセンサ異常検出用プログラム32)を実行することにより生成される。
そしてマイコン2は、角度同期DMA通信でマイコン3からデータを受信する毎に、受信が正常に行われたか否かを判断し、その判断結果を示す信号を、入出力ポート内で予め設定された出力ポート(以下、受信結果出力ポートという)から出力するように構成されている(図2の矢印AL21,AL22,AL23を参照)。
さらにマイコン2は、図3に示すように、エンジンの気筒毎に点火制御、噴射制御および失火検出を実行するように構成されている。
そしてECU1は、エンジンの各気筒の上死点(TDC)よりも540°CA前のタイミングで、対応する気筒用のデータをマイコン3からマイコン2へ角度同期DMA通信で送信するように構成されている(図3の受信ポイントRP1,RP2,RP3を参照)。例えば、第1気筒の上死点(図3の[#1TDC]を参照)よりも540°CA前のタイミング(図3の[#1B540]を参照)で、第1気筒用のデータが角度同期DMA通信で送信される(図3の受信ポイントRP1を参照)。
またマイコン2は、各気筒の上死点(TDC)よりも360°CA前のタイミングで、各気筒の上死点(TDC)よりも540°CA前のタイミングで受信したdata1およびdata2を参照するように構成されている(図3の参照ポイントRP11,RP12,RP21,RP22,RP31,RP32を参照)。例えば、第1気筒の上死点(TDC)よりも360°CA前のタイミング(図3の[#1B360]を参照)で、マイコン2はdata1およびdata2を参照する(図3の参照ポイントRP11,RP12を参照)。なおマイコン2は、対応する気筒の追加噴射の設定を行うためにdata1を参照し、対応する気筒の異常燃焼を検出するためにdata2を参照する。
またマイコン2は、各気筒の上死点(TDC)よりも180°CA前のタイミングで、各気筒の上死点(TDC)よりも540°CA前のタイミングで受信したdata3を参照するように構成されている(図3の参照ポイントRP13,RP23を参照)。例えば、第1気筒の上死点(TDC)よりも180°CA前のタイミング(図3の[#1B180]を参照)で、マイコン2は、第1気筒の上死点(TDC)よりも540°CA前のタイミングで受信したdata3を参照する(図3の参照ポイントRP13を参照)。なおマイコン2は、対応する気筒の点火時期を算出するためにdata3を参照する。
またマイコン2は、各気筒の上死点(TDC)のタイミングで、各気筒の上死点(TDC)よりも540°CA前のタイミングで受信したdata4およびdata5を参照するように構成されている(図3の参照ポイントRP14を参照)。例えば、第1気筒の上死点(TDC)のタイミングで(図3の[#1TDC]を参照)、マイコン2は、第1気筒の上死点(TDC)よりも540°CA前のタイミングで受信したdata4およびdata5を参照する(図3の参照ポイントRP14を参照)。なおマイコン2は、対応する気筒の失火検出などのためにdata4およびdata5を参照する。
以上より、data1およびdata2は、データを受信したタイミングの後に最も早く参照されるデータである。またdata3は、データを受信したタイミングの後において2番目に早く参照されるデータである。そしてdata4およびdata5は、データを受信したタイミングの後に最も遅く参照されるデータである。このため、data1およびdata2には、最も高い優先度である優先度1が設定されている。またdata3には、2番目に高い優先度である優先度2が設定されている。そして、data4およびdata5には、3番目に高い優先度である優先度3が設定されている。
このように構成されたECU1において、マイコン2は、後述する時間同期DMA受信処理および角度同期DMA受信処理を実行する。またマイコン3は、後述する時間同期DMA送信処理、角度同期DMA送信処理および再送データ設定処理を実行する。
まず、マイコン2が実行する時間同期DMA受信処理の手順を図4を用いて説明する。この時間同期DMA受信処理は、時間同期DMA通信でマイコン3からデータを受信する毎に実行される処理である。
この時間同期DMA受信処理が実行されると、マイコン2は、まずS10にて、時間同期DMA通信によるデータ受信で異常が発生したか否かを判断する。なおS10では、データ受信中にシリアルエラー(パリティエラー、フレーミングエラー等)が発生するとレジスタにセットされるエラー情報を用いて、受信異常が発生したか否かを判断する。
ここで、データ受信で異常が発生していない場合には(S10:NO)、S20にて、受信したデータの予備データ領域(すなわち、データ領域TDR6,TDR7,TDR8)にデータが格納されているか否かを判断する。なおS20では、予備データ領域に、初期値である$FF以下の値が格納されている場合に、予備データ領域にデータが格納されていると判断する。
ここで、予備データ領域にデータが格納されている場合には(S20:YES)、S30にて、予備データ領域に格納されているデータを、角度同期DMA通信での再送データとして、マイコン2のRAM内に予め設定されている第1制御用データ領域に格納し、S40に移行する。なお第1制御用データ領域は、角度同期DMA通信による受信タイミング毎に対応して設けられている。そしてS30では、予備データ領域に格納されている再送データを、この再送データが最初に送信されたタイミングと対応付けて第1制御用データ領域に格納する。
一方、予備データ領域にデータが格納されていない場合には(S20:NO)、S40に移行する。
そしてS40に移行すると、受信したデータの通常データ領域(すなわち、データ領域TDR1,TDR2,TDR3,TDR4,TDR5)に格納されているデータを、時間同期DMA通信で取得したデータとして、マイコン2のRAM内の第2制御用データ領域に格納し、時間同期DMA受信処理を一旦終了する。なお第2制御用データ領域は、時間同期DMA通信による受信タイミング毎に対応して設けられている。
またS10にて、データ受信で異常が発生した場合には(S10:YES)、S50にて、角度同期DMA異常カウンタをインクリメントし、時間同期DMA受信処理を一旦終了する。
次に、マイコン2が実行する角度同期DMA受信処理の手順を図5を用いて説明する。この角度同期DMA受信処理は、角度同期DMA通信でマイコン3からデータを受信する毎に実行される処理である。
この角度同期DMA受信処理が実行されると、マイコン2は、まずS110にて、受信結果出力ポートを初期化する。すなわち、受信結果出力ポートをローレベルにする。
その後S120にて、角度同期DMA通信によるデータ受信で異常が発生したか否かを判断する。なおS120では、S10と同様に、エラー情報を用いて、受信異常が発生したか否かを判断する。
ここで、データ受信で異常が発生していない場合には(S120:NO)、S130にて、受信したデータの予備データ領域(すなわち、データ領域ADR6,ADR7,ADR8)にデータが格納されているか否かを判断する。なおS130では、S20と同様に、予備データ領域に、初期値である$FF以下の値が格納されている場合に、予備データ領域にデータが格納されていると判断する。
ここで、予備データ領域にデータが格納されている場合には(S130:YES)、S140にて、予備データ領域に格納されているデータを、角度同期DMA通信での再送データとして、この再送データが最初に送信されたタイミングと対応付けて第1制御用データ領域に格納し、S150に移行する。一方、予備データ領域にデータが格納されていない場合には(S130:NO)、S150に移行する。
そしてS150に移行すると、受信したデータの通常データ領域(すなわち、データ領域ADR1,ADR2,ADR3,ADR4,ADR5)に格納されているデータを、角度同期DMA通信における今回の受信タイミングに対応した第1制御用データ領域に格納する。その後S160にて、受信結果出力ポートをローレベルにする。これにより、ローレベルの受信結果信号がマイコン2からマイコン3へ出力される。そして、角度同期DMA受信処理を一旦終了する。
またS120にて、データ受信で異常が発生した場合には(S120:YES)、S170にて、角度同期DMA受信異常カウンタの値(以下、角度同期DMA受信異常回数という)が0であるか否かを判断する。
ここで、角度同期DMA受信異常回数が0である場合には(S170:YES)、S180にて、角度同期DMA受信異常カウンタをインクリメントし、S200に移行する。一方、角度同期DMA受信異常回数が0でない場合には(S170:NO)、S190にて、角度同期DMA受信異常カウンタをリセット(すなわち、カウンタの値を0にする)して、S200に移行する。
そしてS200に移行すると、受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される。そして、角度同期DMA受信処理を一旦終了する。
次に、マイコン3が実行する時間同期DMA送信処理の手順を図6を用いて説明する。この時間同期DMA送信処理は、所定時間毎(本実施形態では4ms毎)に繰り返し実行される処理である。
この時間同期DMA送信処理が実行されると、マイコン3は、まずS310にて、エンジン回転速度が予め設定された再送判定値(本実施形態では5000rpm)以下であるか否かを判断する。ここで、エンジン回転速度が再送判定値を超えている場合には(S310:NO)、時間同期DMA送信処理を一旦終了する。一方、エンジン回転速度が再送判定値以下である場合には(S310:YES)、S320にて、時間同期再送要求フラグがセットされているか否かを判断する。
ここで、時間同期再送要求フラグがクリアされている場合には(S320:NO)、S350に移行する。一方、時間同期再送要求フラグがセットされている場合には(S320:YES)、S330にて、時間同期DMA通信の予備データ領域に再送データを格納する。具体的には、後述するS590で時間同期DMA通信による再送データとして設定されたデータを格納する。その後S340にて、時間同期再送要求フラグをクリアし、S350に移行する。
そしてS350に移行すると、時間同期DMA通信の通常データ領域に送信データを格納する。そしてS360にて、時間同期DMA通信の通常データ領域および予備データ領域に格納されたデータをマイコン2へ送信して、時間同期DMA送信処理を一旦終了する。
次に、マイコン3が実行する角度同期DMA送信処理の手順を図7を用いて説明する。この角度同期DMA送信処理は、所定クランク角度毎(本実施形態では30°CA毎)に繰り返し実行される処理である。
この角度同期DMA送信処理が実行されると、マイコン3は、まずS410にて、180°CA毎に到来する通常の角度同期DMA送信タイミングであるか否かを判断する。ここで、通常の角度同期DMA送信タイミングである場合には(S410:YES)、S430に移行する。一方、通常の角度同期DMA送信タイミングでない場合には(S410:NO)、S420にて、角度同期再送要求フラグがセットされているか否かを判断する。ここで、角度同期再送要求フラグがクリアされている場合には(S420:NO)、角度同期DMA送信処理を一旦終了する。
一方、角度同期再送要求フラグがセットされている場合には(S420:YES)、S430に移行する。
そしてS430に移行すると、後述するS590で角度同期DMA通信による再送データとして設定されたデータが存在するか否かを判断する。ここで、再送データとして設定されたデータが存在しない場合には(S430:NO)、S460に移行する。一方、再送データとして設定されたデータが存在する場合には(S430:YES)、S440にて、角度同期DMA通信の予備データ領域に再送データを格納し、さらにS450にて、角度同期再送要求フラグをクリアして、S460に移行する。
そしてS460に移行すると、角度同期DMA通信の通常データ領域に送信データを格納する。そしてS470にて、角度同期DMA通信の通常データ領域および予備データ領域に格納されたデータをマイコン2へ送信して、角度同期DMA送信処理を一旦終了する。
次に、マイコン3が実行する再送データ設定処理の手順を図8を用いて説明する。この再送データ設定処理は、角度同期DMA送信処理によるデータ送信が完了してから所定時間が経過した後に実行される処理である。
この再送データ設定処理が実行されると、マイコン3は、まずS510にて、受信結果入力ポートがハイレベルであるか否かを判断する。ここで、受信結果入力ポートがローレベルである場合には(S510:NO)、再送データ設定処理を一旦終了する。一方、受信結果入力ポートがハイレベルである場合には(S510:YES)、S520にて、角度同期再送要求フラグをセットし、さらにS530にて、角度同期DMA再送カウンタをインクリメントする。
そしてS540にて、角度同期DMA再送カウンタの値(以下、角度同期DMA再送回数という)が1であるか否かを判断する。ここで、角度同期DMA再送回数が1である場合には(S540:YES)、再送データ設定処理を一旦終了する。
一方、角度同期DMA再送回数が1でない場合には(S540:NO)、S550にて、エンジン回転速度が予め設定された再送判定値(本実施形態では5000rpm)以下であるか否かを判断する。ここで、エンジン回転速度が再送判定値を超えている場合には(S550:NO)、S570に移行する。一方、エンジン回転速度が再送判定値以下である(S550:YES)、S560にて、時間同期再送要求フラグをセットし、S570に移行する。
そしてS570に移行すると、角度同期DMA再送カウンタをリセット(すなわち、カウンタの値を0にする)し、S580にて、角度同期再送要求フラグをクリアする。
そしてS590にて、今回の角度同期DMA送信(すなわち、再送データ設定処理の実行開始の直前に完了した角度同期DMA送信)の送信データのうち、次回の時間同期DMA通信の予備データ領域に格納される再送データと、次回の角度同期DMA通信の予備データ領域に格納される再送データを、マイコン2がデータを参照するタイミングに間に合うように設定し、再送データ設定処理を一旦終了する。
本実施形態では、例えば以下に示すようにして、再送データを設定する。
まず、エンジン回転速度が再送判定値(本実施形態では5000rpm)以下であり且つ今回の角度同期DMA送信において予備データ領域にデータが格納されていない場合に、優先度1に設定されたデータ(すなわち、角度同期DMA通信のデータ領域ADR1,ADR2に格納されたデータ)を、時間同期DMA通信の予備データ領域に格納するように設定するとともに、優先度2,3に設定されたデータ(すなわち、角度同期DMA通信のデータ領域ADR3,ADR4, ADR5に格納されたデータ)を、角度同期DMA通信の予備データ領域に格納するように設定する。
また、エンジン回転速度が再送判定値以下であり且つ今回の角度同期DMA送信において予備データ領域にデータが格納されている場合に、予備データ領域に格納されているデータのうちで、優先度2に設定されていたデータを優先度1に設定し、優先度3に設定されていたデータを優先度2に設定する。そして、優先度1に設定されたデータを、時間同期DMA通信の予備データ領域に格納するように設定するとともに、優先度2に設定されたデータを、角度同期DMA通信の予備データ領域に格納するように設定する。
また、エンジン回転速度が再送判定値を超えており且つ今回の角度同期DMA送信において予備データ領域にデータが格納されていない場合に、角度同期DMA通信のデータ領域ADR4, ADR5に格納されたデータをそれぞれ、角度同期DMA通信の予備データ領域ADR7, ADR8に格納するように設定する。
また、エンジン回転速度が再送判定値を超えており且つ今回の角度同期DMA送信において予備データ領域にデータが格納されている場合に、角度同期DMA通信のデータ領域ADR7, ADR8に格納されたデータをそれぞれ、角度同期DMA通信の予備データ領域ADR7, ADR8に格納するように設定する。但し、再送するデータが参照タイミングに間に合わない場合には、データ領域ADR4, ADR5に格納されたデータをそれぞれ、予備データ領域ADR7, ADR8に格納するように設定する。
次に、角度同期DMA通信で異常が発生したときのECU1の動作を図9を用いて説明する。
まず、180°CA毎に到来する通常の角度同期DMA送信タイミングで、マイコン3が、予備データ領域にデータが格納されていない角度同期DMA送信データAD01を角度同期DMA通信でマイコン2へ送信するとする(矢印AL31を参照)。なお、角度同期DMA送信データAD01の通常データ領域ADR1, ADR2, ADR3, ADR4, ADR5に格納されているデータを、それぞれdata11,data21,data31,data41,data51と表記する。これらのデータは、第1気筒の制御のためにマイコン2により参照される。
そして、角度同期DMA送信データAD01の受信で異常が発生したとマイコン2が判断すると、マイコン2は受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL32を参照)。
マイコン3は、角度同期DMA送信データAD01の送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがハイレベルであると判断し、角度同期再送要求フラグをセットする(フラグ立ち上がりエッジFUE1を参照)。
このためマイコン3は、通常の角度同期DMA送信タイミングから30°CA後の再送信タイミングで、角度同期DMA送信データAD01を再送信する(矢印AL33を参照)。とともに、角度同期再送要求フラグをクリアする(フラグ立ち下がりエッジFDE1を参照)。
そして、角度同期DMA送信データAD01の再受信で異常が発生したとマイコン2が判断すると、マイコン2は受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL34を参照)。
マイコン3は、角度同期DMA送信データAD01の再送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがハイレベルであると判断し、時間同期再送要求フラグをセットする(フラグ立ち上がりエッジFUE2を参照)。
そしてマイコン3は、角度同期DMA送信データAD01のデータ領域ADR1,ADR2に格納されたデータをそれぞれ、時間同期DMA通信の予備データ領域TDR6,TDR7に格納するように設定する(矢印AL61を参照)とともに、角度同期DMA送信データAD01のデータ領域ADR3,ADR4, ADR5に格納されたデータをそれぞれ、角度同期DMA通信の予備データ領域ADR6, ADR7, ADR8に格納するように設定する(矢印AL62,AL63を参照)。
これによりマイコン3は、次の時間同期DMA送信タイミングで、予備データ領域TDR6,TDR7にそれぞれdata11,data21が格納された時間同期DMA送信データTD01を時間同期DMA通信でマイコン2へ送信する(矢印AL51を参照)とともに、時間同期再送要求フラグをクリアする(フラグ立ち下がりエッジFDE2を参照)。またマイコン3は、次の通常の角度同期DMA送信タイミングで、予備データ領域ADR6, ADR7, ADR8にそれぞれdata31,data41,data51が格納された角度同期DMA送信データAD02を角度同期DMA通信でマイコン2へ送信する(矢印AL35を参照)。なお、角度同期DMA送信データAD02の通常データ領域ADR1,ADR2,ADR3,ADR4,ADR5にはそれぞれ、角度同期DMA送信データAD01とは異なるdata12,data22,data32,data42,data52が格納される。これらのデータは、第2気筒の制御のためにマイコン2により参照される。
これによりマイコン3は、次の角度同期DMA送信タイミングよりも早いタイミングで、data11,data21をマイコン2へ送信することができる。なお、data31,data41,data51は、次の角度同期DMA送信タイミングで再送信されてもマイコン2が参照するタイミングに間に合う。
そして、角度同期DMA送信データAD02の受信で異常が発生したとマイコン2が判断すると、マイコン2は受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL36を参照)。
マイコン3は、角度同期DMA送信データAD02の送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがハイレベルであると判断し、角度同期再送要求フラグをセットする(フラグ立ち上がりエッジFUE3を参照)。
このためマイコン3は、通常の角度同期DMA送信タイミングから30°CA後の再送信タイミングで、角度同期DMA送信データAD02を再送信する(矢印AL37を参照)。とともに、角度同期再送要求フラグをクリアする(フラグ立ち下がりエッジFDE3を参照)。
そして、角度同期DMA送信データAD02の再受信で異常が発生したとマイコン2が判断すると、マイコン2は受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL38を参照)。
マイコン3は、角度同期DMA送信データAD02の再送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがハイレベルであると判断し、時間同期再送要求フラグをセットする(フラグ立ち上がりエッジFUE4を参照)。
そしてマイコン3は、角度同期DMA送信データAD02のデータ領域ADR1,ADR2,ADR6に格納されたデータをそれぞれ、時間同期DMA通信の予備データ領域TDR6,TDR7,TDR8に格納するように設定する(矢印AL64, AL65を参照)とともに、角度同期DMA送信データAD02のデータ領域ADR3,ADR7, ADR8に格納されたデータをそれぞれ、角度同期DMA通信の予備データ領域ADR6, ADR7, ADR8に格納するように設定する(矢印AL66,AL67を参照)。
これによりマイコン3は、次の時間同期DMA送信タイミングで、予備データ領域TDR6,TDR7,TDR8にそれぞれdata12,data22,data31が格納された時間同期DMA送信データTD02を時間同期DMA通信でマイコン2へ送信する(矢印AL52を参照)とともに、時間同期再送要求フラグをクリアする(フラグ立ち下がりエッジFDE4を参照)。またマイコン3は、次の通常の角度同期DMA送信タイミングで、予備データ領域ADR6, ADR7, ADR8にそれぞれdata32,data41,data51が格納された角度同期DMA送信データAD03を角度同期DMA通信でマイコン2へ送信する(矢印AL39を参照)。なお、角度同期DMA送信データAD03の通常データ領域ADR1,ADR2,ADR3,ADR4,ADR5にはそれぞれ、角度同期DMA送信データAD02とは異なるdata13,data23,data33,data43,data53が格納される。これらのデータは、第3気筒の制御のためにマイコン2により参照される。
これによりマイコン3は、マイコン2が参照するタイミングよりも前に、data12,data22,data31をマイコン2へ送信することができる。なお、data32,data41,data51は、次の角度同期DMA送信タイミングで再送信されてもマイコン2が参照するタイミングに間に合う。
そして、角度同期DMA送信データAD03の受信で異常が発生しなかったとマイコン2が判断すると、マイコン2は受信結果出力ポートをローレベルにする。これにより、ローレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL40を参照)。
マイコン3は、角度同期DMA送信データAD03の送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがローレベルであると判断し、角度同期再送要求フラグをクリアの状態に維持する。
このためマイコン3は、角度同期DMA送信データAD03の再送信を行わない。
次に、エンジン回転速度が再送判定値(本実施形態では5000rpm)を超えている状態において角度同期DMA通信で異常が発生したときのECU1の動作を図10を用いて説明する。
まず、180°CA毎に到来する通常の角度同期DMA送信タイミングで、マイコン3が、予備データ領域にデータが格納されていない角度同期DMA送信データAD11を角度同期DMA通信でマイコン2へ送信するとする(矢印AL71を参照)。なお、角度同期DMA送信データAD11の通常データ領域ADR1, ADR2, ADR3, ADR4, ADR5に格納されているデータを、それぞれdata11,data21,data31,data41,data51と表記する。これらのデータは、第1気筒の制御のためにマイコン2により参照される。
そして、角度同期DMA送信データAD11の受信で異常が発生したとマイコン2が判断すると、マイコン2は受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL72を参照)。
マイコン3は、角度同期DMA送信データAD11の送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがハイレベルであると判断し、角度同期再送要求フラグをセットする。
このためマイコン3は、通常の角度同期DMA送信タイミングから30°CA後の再送信タイミングで、角度同期DMA送信データAD11を再送信する(矢印AL73を参照)。とともに、角度同期再送要求フラグをクリアする。
そして、角度同期DMA送信データAD11の再受信で異常が発生したとマイコン2が判断すると、マイコン2は受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL74を参照)。
マイコン3は、角度同期DMA送信データAD11の再送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがハイレベルであると判断し、角度同期DMA送信データAD11のデータ領域ADR4, ADR5に格納されたデータをそれぞれ、角度同期DMA通信の予備データ領域ADR7, ADR8に格納するように設定する(矢印AL91を参照)。
すなわち、角度同期DMA送信データAD11のデータ領域ADR1,ADR2に格納されたデータを次の時間同期DMA送信タイミングで送信しない(矢印AL92を参照)。これは、エンジン回転速度が高いときは、時間同期DMA通信の送信間隔に対して、角度同期DMA通信の送信間隔が短くなり、次の通常の角度同期DMA送信タイミングより早く送信できる次の時間同期DMA送信タイミングが存在しない場合があるためである。
さらに、角度同期DMA送信データAD11の領域ADR3に格納されたデータを次の角度同期DMA送信タイミングで送信しない(矢印AL93を参照)。これは、噴射制御で使用するデータ領域ADR1,ADR2のデータと、点火制御で使用するデータ領域ADR3のデータとは気筒毎に同期を取る必要があり、データ領域ADR1,ADR2のデータを送信しない場合には、データ領域ADR3のデータを送信する必要がなくなるためである。
これによりマイコン3は、次の通常の角度同期DMA送信タイミングで、予備データ領域ADR7, ADR8にそれぞれdata41,data51が格納された角度同期DMA送信データAD12を角度同期DMA通信でマイコン2へ送信する(矢印AL75を参照)。なお、角度同期DMA送信データAD12の通常データ領域ADR1,ADR2,ADR3,ADR4,ADR5にはそれぞれ、角度同期DMA送信データAD11とは異なるdata12,data22,data32,data42,data52が格納される。これらのデータは、第2気筒の制御のためにマイコン2により参照される。なお、data41,data51は、次の角度同期DMA送信タイミングで再送信されてもマイコン2が参照するタイミングに間に合う。
そして、角度同期DMA送信データAD12の受信で異常が発生したとマイコン2が判断すると、マイコン2は受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL76を参照)。
マイコン3は、角度同期DMA送信データAD12の送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがハイレベルであると判断し、角度同期再送要求フラグをセットする。
このためマイコン3は、通常の角度同期DMA送信タイミングから30°CA後の再送信タイミングで、角度同期DMA送信データAD12を再送信する(矢印AL77を参照)。とともに、角度同期再送要求フラグをクリアする。
そして、角度同期DMA送信データAD12の再受信で異常が発生したとマイコン2が判断すると、マイコン2は受信結果出力ポートをハイレベルにする。これにより、ハイレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL78を参照)。
マイコン3は、角度同期DMA送信データAD12の再送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがハイレベルであると判断し、角度同期DMA送信データAD12のデータ領域ADR7, ADR8に格納されたデータをそれぞれ、角度同期DMA通信の予備データ領域ADR7, ADR8に格納するように設定する(矢印AL94を参照)。すなわち、角度同期DMA送信データAD12のデータ領域ADR1,ADR2に格納されたデータを次の時間同期DMA送信タイミングで送信することと、角度同期DMA送信データAD11の領域ADR3に格納されたデータを次の角度同期DMA送信タイミングで送信することを行わない(矢印AL95,AL96を参照)。
これによりマイコン3は、次の通常の角度同期DMA送信タイミングで、予備データ領域ADR7, ADR8にそれぞれdata41,data51が格納された角度同期DMA送信データAD13を角度同期DMA通信でマイコン2へ送信する(矢印AL79を参照)。なお、角度同期DMA送信データAD13の通常データ領域ADR1,ADR2,ADR3,ADR4,ADR5にはそれぞれ、角度同期DMA送信データAD12とは異なるdata13,data23,data33,data43,data53が格納される。これらのデータは、第3気筒の制御のためにマイコン2により参照される。
そして、角度同期DMA送信データAD13の受信で異常が発生しなかったとマイコン2が判断すると、マイコン2は受信結果出力ポートをローレベルにする。これにより、ローレベルの受信結果信号がマイコン2からマイコン3へ出力される(矢印AL80を参照)。
マイコン3は、角度同期DMA送信データAD13の送信完了後に遅延タスクを発生させて受信結果入力ポートの状態を監視する。これによりマイコン3は、受信結果入力ポートがローレベルであると判断し、角度同期再送要求フラグをクリアの状態に維持する。
このためマイコン3は、角度同期DMA送信データAD13の再送信を行わない。
このように構成されたECU1は、エンジンの燃焼状態を特定するための筒内圧力を検出する筒内圧力センサ14からの検出信号を入力し、入力した検出信号に基づいて、エンジンを制御するための複数の制御データ(data1,data2,data3,data4,data5)を生成するマイコン3と、マイコン3が生成した複数の制御データを用い、エンジンに対する燃料噴射および点火を制御するマイコン2とを備え、マイコン2が制御のために制御データを参照するタイミング(以下、データ参照タイミングという)が、クランク角度に基づいて、複数の制御データ毎に設定されている。
また、クランク角度に同期して、マイコン3が生成した複数の制御データをマイコン2へ送信する(S410,S460,S470)。
そして、複数の制御データの送信で異常が発生した場合に、異常が発生した複数の制御データのうち、対応するデータ参照タイミングまでに送信可能な制御データを、データ参照タイミングまでに再送信する(S510〜S590,S330,S360,S440,S470)。
これにより、制御データの送信で異常が発生した場合であっても、データ参照タイミングまでに送信可能な制御データであれば、マイコン2が制御のために必要となるタイミングまでにマイコン2がマイコン3から制御データを取得することができる。このため、エンジン制御のために必要となるタイミングまでに制御データが取得できないという状況の発生を抑制し、エンジン制御の安定性を向上させることができる。
さらに、データの再送信は、制御データの送信で異常が発生した場合に実行されるため、マイコン3とマイコン2との間での通信に起因したマイクロコンピュータの処理負荷の増大を必要最低限に抑制することができる。
また、複数の制御データdata1,data2,data3,data4,data5のうち、データ参照タイミングが早い制御データほど早いタイミングで再送信する。本実施形態では、data1およびdata2のデータ参照タイミングが最も早く、data3のデータ参照タイミングが2番目に早いため、data1およびdata2の方がdata3よりも早く再送信される(例えば、図9の矢印AL61,AL62を参照)。また、data4およびdata5のデータ参照タイミングが最も遅いため、data3の方がdata4およびdata5よりも早く再送信される(例えば、図9の矢印AL65,AL67を参照)。
これにより、エンジン制御のために必要となるタイミングまでに制御データが取得できないという状況の発生を更に抑制することができる。
また、クランク角度に同期してデータを送信するクランク角度同期送信機能と、時間に同期してデータを送信する時間同期送信機能との両方を用いて制御データを再送信する(S330,S360,S440,S470)。
これにより、クランク角度同期送信機能で異常が発生してクランク角度同期送信機能が使用できなくなったとしても時間同期送信機能を用いて再送信することができるため、エンジン制御のために必要となるタイミングまでに制御データが取得できないという状況の発生を更に抑制することができる。
以上説明した実施形態において、ECU1は本発明におけるエンジン制御装置、マイコン3は本発明における第1マイクロコンピュータ、マイコン2は本発明における第2マイクロコンピュータ、S410,S460,S470の処理は本発明におけるクランク同期送信手段、S510〜S590,S330,S360,S440,S470の処理は本発明における再送信手段、筒内圧力センサ14は本発明におけるエンジン状態検出器である。
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。