(57)【要約】【課題】ＤＭＡ転送動作時に転送先アドレス誤りが発生しＤＭＡが想定外のメモリ領域に不正アクセスした場合において、ＤＭＡの異常を検出しメモリの上書きを最小限に抑えることを可能にする。【解決手段】ＤＭＡ（Direct Memory Access）機能を有した制御装置において、ＤＭＡ装置Ａ１３ａの転送先であるメモリ領域Ａ１２１と、タイマＡ１４ａの初期値を保存したメモリ領域Ｂ１２１ａと、所定の時間でタイムアウトするタイマＡ１４ａと、タイマＡ１４ａのタイムアウトよりも短く所定の間隔でＤＭＡ装置Ｂ１３ｂの起動要求信号を生成するタイマＢ１４ｂと、メモリ領域Ｂ１２１ａの値をタイマＡ１４ａのカウンタに転送し初期化するＤＭＡ装置Ｂ１３ｂを有する。【選択図】  図１
2011145841.tif 000002
【特許請求の範囲】
【請求項１】
ＤＭＡ装置Ａの転送先であるメモリ領域Ａと、所定の時間でタイムアウトするタイマＡと、前記メモリ領域Ａに隣接し前記タイマＡの初期値を保存したメモリ領域Ｂと、前記メモリ領域Ｂの値を前記タイマＡに転送し初期化するＤＭＡ装置Ｂと、前記タイマＡのタイムアウトよりも短い所定の間隔で前記ＤＭＡ装置Ｂの転送要求信号を生成するタイマＢを有する制御装置において、
前記タイマＡの初期値を保存した前記メモリ領域Ｂが上書きされた場合に、ＤＭＡ装置Ｂによって転送される前記タイマＡの初期値が小さくなることにより、前記タイマＢによる前記タイマＡの初期化のタイミングよりも先に前記タイマＡのタイムアウトすることで前記ＤＭＡ装置Ａの転送先が転送先領域外であることを検知する手段。
【請求項２】
請求項１において、前記メモリ領域Ａとスタック領域の間に前記メモリ領域Ｂを置き、前記メモリ領域Ａ外が上書きされた場合の被害を少なくすることを特徴としたＤＭＡ装置の異常検知手段。
【請求項３】
請求項１において、前記メモリ領域Ｂを連続した領域に複数個有し、前記タイマＢのイベント毎に前記ＤＭＡ装置Ｂの転送元領域を順次変更することで、前記メモリ領域Ａ外が上書きされた場合の検出確率を高くすることを特徴としたＤＭＡ装置の異常検知手段。
【請求項４】
請求項１において、前記制御装置が複数個のＤＭＡ装置を有している場合に、一定間隔で前記メモリ領域Ｂを複数個設け、前記タイマＢのイベント毎に前記ＤＭＡ装置Ｂの転送元を順次変更することで、ＤＭＡ装置の異常を検出することを特徴とした手段。
【請求項５】
請求項１において、前記タイマＡ，Ｂの代わりに所定の時間で起動する定常タスクを有する制御装置の場合に、前記定常タスク毎に前記メモリ領域Ｂの値をチェックする処理プログラムを有し、前記メモリ領域Ｂが上書きされた場合に、保存していた初期値が変化することで、前記ＤＭＡ装置Ａの転送先が転送先領域外になることを検知する手段。
【請求項６】
請求項５において、前記メモリ領域Ｂの下にスタック領域を置くことで、前記メモリ領域Ａ外が上書きされた場合の被害を少なくすることを特徴としたＤＭＡ装置の異常検知手段。
【請求項７】
請求項５において、前記メモリ領域Ｂを連続した領域に複数個有し、前記定常タスク毎にチェックすることで、前記メモリ領域Ａ外が上書きされた場合の検出確率を高くすることを特徴としたＤＭＡ装置の異常検知手段。
【請求項８】
請求項５において、前記制御装置が複数個のＤＭＡ装置と前記メモリ領域Ａを有している場合に、一定間隔でメモリ領域Ｂを複数個設け、前記定常タスク毎に前記メモリ領域Ｂをチェックすることで、ＤＭＡ装置の異常を検出することを特徴とした手段。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＭＡ装置を用いてデータ転送を行う制御装置に関する。
【背景技術】
【０００２】
ＤＭＡとは、プログラムされた機械語の命令群の実行によってＣＰＵなどを介する方法によらず、メモリとメモリ又はメモリとＩ／Ｏデバイスの間で直接データを転送することである。しかしＣＰＵを介さずに独立してメモリにアクセスするため、ＤＭＡに誤った転送先アドレスが設定された場合、メモリを上書きしてしまう可能性ある。従来技術では、ＤＭＡの転送先アドレスを定時タスクで監視するプログラムやバスを監視する外部デバイスを搭載してメモリ上書きを防止してきた。またメモリプロテクトといったＤＭＡがメモリに書き込みする前に転送先アドレスをチェックし、メモリアクセス許可・禁止を行うマイクロプロセッサを搭載した例もある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開昭６１−１２１１４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、ＤＭＡの転送先が意図したアドレスで停止せず動作しつづける故障モードを監視することを目的とする。
【０００５】
従来技術を使用する場合、ＤＭＡの転送先アドレスを定時タスクで監視するプログラムでは、監視周期を短くするとＣＰＵが高負荷となり、長くするとＤＭＡが不正アクセスした場合に、メモリの上書きされる領域が大きくなる。またバスを監視する外部デバイスでは、コスト的に不利であり、メモリプロテクト機能は、搭載されていないマイクロプロセッサが多いという問題があった。
【０００６】
本発明では、標準的にマイクロプロセッサに搭載されているＤＭＡ装置とタイマ機能を用いて、ＣＰＵを介さずにＤＭＡによるメモリの上書きを検知する手段を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明では、制御アプリケーションが使用しているＤＭＡ装置Ａの転送先領域に隣接する領域に、タイマＡの初期値を保存しておき、この値を所定周期でタイマＡに転送し初期化する。前記タイマＡは、タイムアウトを検知するタイマであり、前記初期値分の時間が経過する前に再び初期化されないと、タイムアウトしＣＰＵにイベントを通知する。ＣＰＵは、前記イベントにより前記ＤＭＡの初期値が上書きされたことを認識することができる。前記タイマＡの初期値転送は、前記ＤＭＡとは別のＤＭＡ装置Ｂによって所定周期で実行する。また、前記ＤＭＡ装置Ｂによる転送周期は、タイマＡとは別のタイマＢによってタイミングが生成されるが、前記タイマＡのタイムアウトは、前記タイマＢの所定周期のイベントよりも長くしておくことで、正常時はタイマＡのタイムアウトは発生しないが、前記タイマＡの初期値を保存している領域が上書きされ、初期値が小さくなることで、タイマＡのタイムアウトが発生し、ＤＭＡ装置Ａの暴走を検知できる。尚、前記タイマＡの初期値は、メモリ領域の最大値に近い値である程、上書きされたときの検出率が高くなり、最大値から遠い値であるほど、タイムアウトが早くなるという特徴をもつ。
【発明の効果】
【０００８】
上記の手段を用いることで、前記従来技術の機能を搭載していない制御装置において、ＣＰＵを介さずにＤＭＡによるメモリの上書きを検出することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明の組み込み制御装置のシステム構成例を示す図である。
【図２】本発明の一実施の形態によるエンジン制御ユニットのシステム構成例を示す図である。
【図３】本発明の一実施の形態によるエンジン制御ユニットのＤＭＡ装置が正常動作している場合の処理フローを示した図である。
【図４】本発明の一実施の形態によるエンジン制御ユニットのＤＭＡ装置が正常動作している場合のタイマのタイミングチャートを示した図である。
【図５】本発明の一実施の形態によるエンジン制御ユニットのＤＭＡ装置が異常動作した場合の処理フローを示した図である。
【図６】本発明の一実施の形態によるエンジン制御ユニットのＤＭＡ装置が異常動作した場合のタイマのタイミングチャートを示した図である。
【発明を実施するための形態】
【００１０】
以下に本発明の実施形態による組み込み制御装置について図面を参照しつつ説明を行う。図２は本発明の第一の実施形態である自動車用エンジン制御ユニットに搭載されているマイクロプロセッサの構成例を示す図である。図２に示すように、エンジン制御ユニット２のマイクロプロセッサ１は、ＣＰＵ１５と、内蔵ＲＡＭ３１（Random Access Memory）と、ＤＭＡＣ３２（Direct Memory Access Controller）と、ダウンカウントタイマ３３ｂ，コンペアマッチタイマ３３ａを有している。
【００１１】
ＤＭＡＣ３２は、ＤＭＡチャネルＡ３２ａ，ＤＭＡチャネルＢ３２ｂを有している。内蔵ＲＡＭ３１は、ＤＭＡＣ用メモリ領域３１１を有しており、ＤＭＡＣ用メモリ領域３１１内は、ＤＭＡチャネルＡ用メモリ領域３１１ａ，ＤＭＡチャネルＢ用メモリ領域３１１ｂに分かれている。またＤＭＡチャネルＢ用メモリ領域３１１ｂはＤＭＡチャネルＡ用メモリ領域３１１ａに隣接して置かれている。
【００１２】
ダウンカウントタイマ３３ｂは所定の間隔でカウンタをダウンカウントするタイマのことであり、予め初期値を設定しスタートさせる。カウンタが０になると、ＣＰＵ１５へのイベント要求信号を生成し、カウンタのカウントダウンが停止する。ＣＰＵ１５がダウンカウントタイマ３３ｂのイベント要求信号を検知すると、割り込み処理が発生する。またＤＭＡチャネルＢ用メモリ領域３１１ｂには、ダウンカウントタイマ３３ｂの初期値と同じ値を設定する。
【００１３】
コンペアマッチタイマ３３ａは所定の間隔でカウンタをカウントアップするタイマのことであり、ダウンカウントタイマ３３ｂの初期値より短い値を閾値として設定しスタートさせる。コンペアマッチタイマ３３ａのカウンタ値と設定した閾値とが一致すると、ＤＭＡチャネルＢ３２ｂへのイベント要求信号を生成する。またイベント要求信号を生成と同時にカウンタを自動的に０クリアし、再度カウントを開始する。
【００１４】
ＤＭＡチャネルＡ３２ａは、外部イベントをトリガとして起動し、ＤＭＡチャネルＡ用メモリ領域３１１ａにデータを転送する。ＤＭＡチャネルＢ３２ｂはコンペアマッチタイマ３３ａのイベントをトリガとして起動し、ＤＭＡチャネルＢ用メモリ領域３１１ｂにある値を、ダウンカウントタイマ３３ｂのカウンタに転送する。
【００１５】
ＤＭＡが正常に動作する場合の初期動作から通常動作までのフローチャートを図３に示す。図２，図３を参照しつつＤＭＡが正常に動作している場合の初期動作から通常動作までを説明する。コンペアマッチタイマ３３ａ，ダウンカウントタイマ３３ｂを起動する前にＤＭＡチャネルＡ３２ａ，ＤＭＡチャネルＢ３２ｂ，ＤＭＡチャネルＢ用メモリ領域３１１ｂ，ダウンカウントタイマ３３ｂ，コンペアマッチタイマ３３ａを設定する。Ｓ１０１では、ＤＭＡチャネルＡ３２ａの起動は外部トリガ，ＤＭＡチャネルＡ用メモリ領域３１１ａにデータを転送する設定とし、ＤＭＡチャネルＢ３２ｂはコンペアマッチタイマ３３ａのイベント要求信号をトリガとし、ＤＭＡチャネルＢ用メモリ領域３１１ｂの値をダウンカウントタイマ３３ｂのカウンタに転送する設定としてＤＭＡチャネルＡ３２ａ，Ｂ３２ｂを起動する。Ｓ１０２ではコンペアマッチタイマ３３ａの閾値、Ｓ１０３ではダウンカウントタイマ３３ｂ，コンペアマッチタイマ３３ａのカウンタに初期値を設定する。但しダウンカウントタイマ３３ｂのカウンタに設定する初期値はコンペアマッチタイマ３３ａの閾値より大きい値、またコンペアマッチタイマ３３ａのカウンタに設定する値は０とする。Ｓ１０４では、ＤＭＡチャネルＢ用メモリ領域３１１ｂに初期値を設定する。設定する初期値はダウンカウントタイマ３３ｂの初期値を同じ値とする。Ｓ１０５ではダウンカウントタイマ３３ｂ，コンペアマッチタイマ３３ａを同時に起動し、ダウンカウントタイマ３３ｂはカウンタをカウントダウン、コンペアマッチタイマ３３ａはカウンタのカウントアップを開始する。Ｓ１０５でタイマを起動して所定時間が経過すると、Ｓ１０６でダウンカウントタイマ３３ｂがタイムアウトする前に、コンペアマッチタイマ３３ａのカウンタ値が設定した閾値と一致する。Ｓ１０７ではコンペアマッチタイマ３３ａがＤＭＡチャネルＢ３２ｂへのイベント要求信号を生成すると同時に、カウンタを０クリアしカウントを再スタートする。Ｓ１０８ではＤＭＡチャネルＢ３２ｂがイベント要求信号を検知すると、ＤＭＡチャネルＢ用メモリ領域３１１ｂの値をダウンカウントタイマ３３ｂに書き込む。Ｓ１０９ではダウンカウントタイマ３３ｂがタイムアウトする前に、初期値を再設定される。またコンペアマッチタイマ３３ａのカウンタの０クリアとＤＭＡチャネルＢ３２ｂによるダウンカウントタイマ３３ｂの書き込みは同タイミングで処理されていることとする。以降ＤＭＡが正常に動作している場合、Ｓ１０６〜Ｓ１０９の動作を繰り返す。またこの時のダウンカウントタイマ３３ｂ，コンペアマッチタイマ３３ａの起動後におけるカウンタのタイミングチャートを図４に示す。図４に示すように、ダウンカウントタイマ３３ｂ，コンペアマッチタイマ３３ａの起動後、ダウンカウントタイマ３３ｂが０（タイムアウト）になる前に、コンペアマッチタイマ３３ａのカウンタが閾値と一致して、カウンタが０クリアしている動作となる。またコンペアマッチタイマ３３ａはカウンタの０クリアすると同時に、ＤＭＡチャネルＢ３２ｂへのイベント要求信号をＤＭＡチャネルＢ３２ｂに送り、ダウンカウントタイマ３３ｂのカウンタにＤＭＡチャネルＢ用メモリ領域３１１ｂの値を書き込んで初期化しているため、ダウンカウントタイマ３３ｂはタイムアウトしない動作となる。
【００１６】
また図３に示すＳ１０６〜Ｓ１０９の動作中にＤＭＡチャネルＡ３２ａがＤＭＡチャネルＡ用メモリ領域３１１ａ外のＤＭＡチャネルＢ用領域３１１ｂに不正アクセスした場合の異常検知方法について図５に示す。図５について説明すると、Ｓ２０１でＤＭＡチャネルＡ３２ａがＤＭＡチャネルＢ用メモリ領域３１１ｂに不正アクセスし、設定していた初期値が更新される。但し更新される値は、コンペアマッチタイマ３３ａの閾値よりも小さい値とする。ＤＭＡチャネルＢ用メモリ領域３１１ｂの値が更新されると、Ｓ１０９でダウンカウントタイマ３３ｂのカウンタに設定される値がコンペアマッチタイマ３３ａの閾値よりも小さくなるため、Ｓ２０２でダウンカウントタイマ３３ｂのタイムアウトする。ダウンカウントタイマ３３ｂのタイムアウトによりＳ２０３でＣＰＵ１５へのイベント要求信号が生成される。Ｓ２０４でＣＰＵ１５がイベント要求信号を検知すると、割り込み処理を発生させ、ＤＭＡチャネルＡ３２ａの異常を検知し、ＤＭＡチャネルＡ３２ａを停止する。またこの時のダウンカウントタイマ３３ｂ，コンペアマッチタイマ３３ａの起動後からＤＭＡチャネルＡ３２ａの異常検知までにおいてのカウンタのタイミングチャートを図６に示す。図６に示すように、ＤＭＡチャネルＡ３２ａの異常発生後、ＤＭＡチャネルＢ３２ｂによりダウンカウントタイマ３３ｂの値が更新されるが、コンペアマッチタイマ３３ａの閾値よりも小さい値となり、次回コンペアマッチタイマ３３ａのイベント要求信号生成よりも前に、ダウンカウントタイマ３３ｂのタイムアウトし、ＣＰＵ１５へのイベント要求信号が生成される動作となっている。
【００１７】
以上、本発明の第一の実施形態による制御装置によれば、ＤＭＡ装置が意図していないメモリ領域に不正アクセスした場合において、ダウンカウントタイマ，コンペアマッチタイマ，ＤＭＡ装置を用いることで監視し、ＤＭＡ装置によるメモリ上書きを検知することができる。
【００１８】
また図２で説明したＤＭＡチャネルＢ用メモリ領域の下にスタック領域を置くことで、ＤＭＡによるメモリ上書きの被害を減らすことができる。更にＤＭＡチャネルＢ用メモリ領域の形態を工夫することで、ＤＭＡによるメモリ上書きの検出確率を高くすることができる。例えばＤＭＡチャネルＢ用メモリ領域の値を連続して複数個置き、コンペアマッチタイマのイベント毎にＤＭＡチャネルＢの転送元を順次変える方法や複数のＤＭＡ装置を有している場合に、一定の間隔でＤＭＡチャネルＢ用メモリ領域を設け、コンペアマッチタイマのイベント毎にＤＭＡチャネルＢの転送元を順次変更することで、ＤＭＡによるメモリ上書きの検出確率を高くすることができる。
【００１９】
次に本発明の第二の実施形態による制御装置について説明を行う。
【００２０】
本発明の第一の実施形態においては、マイクロプロセッサ内のＤＭＡＣ，コンペアマッチタイマ，ダウンカウントタイマ，内臓ＲＡＭ，ＣＰＵを用いた例を示したが、本実施の形態による制御装置のように、コンペアマッチタイマ，ダウンカウントタイマがなく、代わりに所定の時間で起動する定常タスクで有していれば、ＤＭＡのメモリ上書きをソフトウェアで検知することができる。方法としては、まず定常タスク毎にＤＭＡチャネルＢ用メモリ領域の値をチェックする。ＤＭＡチャネルＢ用メモリ領域が上書きされた場合に、保存していた初期値が変わることで、ＤＭＡチャネルＡの転送先が転送先領域外になることを検知する。また本発明の第一の実施形態で説明したＤＭＡチャネルＢ用メモリ領域の形態を同じように工夫することで、ＤＭＡによるメモリ上書きの検出確率を高くすることができる。
【産業上の利用可能性】
【００２１】
本発明は、２つ以上のＤＭＡ装置を具備する制御装置に適用できる。
【符号の説明】
【００２２】
１  マイクロプロセッサ
２  エンジン制御ユニット
１３ａ  ＤＭＡ装置Ａ
１３ｂ  ＤＭＡ装置Ｂ
１４ａ  タイマＡ
１４ｂ  タイマＢ
１５  ＣＰＵ
３１  内蔵ＲＡＭ
３２  ＤＭＡＣ
３２ａ  ＤＭＡチャネルＡ
３２ｂ  ＤＭＡチャネルＢ
３３ａ  コンペアマッチタイマ
３３ｂ  ダウンカウントタイマ
１２１  メモリ領域Ａ
１２１ａ  メモリ領域Ｂ
３１１  ＤＭＡＣ用メモリ領域
３１１ａ  ＤＭＡチャネルＡ用メモリ領域
３１１ｂ  ＤＭＡチャネルＢ用メモリ領域
【図１】
2011145841.tif 000003
【図２】
2011145841.tif 000004
【図３】
2011145841.tif 000005
【図４】
2011145841.tif 000006
【図５】
2011145841.tif 000007
【図６】
2011145841.tif 000008