説明

DMA転送によるメモリ上書きを検出する方法

【課題】DMA転送動作時に転送先アドレス誤りが発生しDMAが想定外のメモリ領域に不正アクセスした場合において、DMAの異常を検出しメモリの上書きを最小限に抑えることを可能にする。
【解決手段】DMA(Direct Memory Access)機能を有した制御装置において、DMA装置A13aの転送先であるメモリ領域A121と、タイマA14aの初期値を保存したメモリ領域B121aと、所定の時間でタイムアウトするタイマA14aと、タイマA14aのタイムアウトよりも短く所定の間隔でDMA装置B13bの起動要求信号を生成するタイマB14bと、メモリ領域B121aの値をタイマA14aのカウンタに転送し初期化するDMA装置B13bを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、DMA装置を用いてデータ転送を行う制御装置に関する。
【背景技術】
【0002】
DMAとは、プログラムされた機械語の命令群の実行によってCPUなどを介する方法によらず、メモリとメモリ又はメモリとI/Oデバイスの間で直接データを転送することである。しかしCPUを介さずに独立してメモリにアクセスするため、DMAに誤った転送先アドレスが設定された場合、メモリを上書きしてしまう可能性ある。従来技術では、DMAの転送先アドレスを定時タスクで監視するプログラムやバスを監視する外部デバイスを搭載してメモリ上書きを防止してきた。またメモリプロテクトといったDMAがメモリに書き込みする前に転送先アドレスをチェックし、メモリアクセス許可・禁止を行うマイクロプロセッサを搭載した例もある(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開昭61−121146号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明は、DMAの転送先が意図したアドレスで停止せず動作しつづける故障モードを監視することを目的とする。
【0005】
従来技術を使用する場合、DMAの転送先アドレスを定時タスクで監視するプログラムでは、監視周期を短くするとCPUが高負荷となり、長くするとDMAが不正アクセスした場合に、メモリの上書きされる領域が大きくなる。またバスを監視する外部デバイスでは、コスト的に不利であり、メモリプロテクト機能は、搭載されていないマイクロプロセッサが多いという問題があった。
【0006】
本発明では、標準的にマイクロプロセッサに搭載されているDMA装置とタイマ機能を用いて、CPUを介さずにDMAによるメモリの上書きを検知する手段を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明では、制御アプリケーションが使用しているDMA装置Aの転送先領域に隣接する領域に、タイマAの初期値を保存しておき、この値を所定周期でタイマAに転送し初期化する。前記タイマAは、タイムアウトを検知するタイマであり、前記初期値分の時間が経過する前に再び初期化されないと、タイムアウトしCPUにイベントを通知する。CPUは、前記イベントにより前記DMAの初期値が上書きされたことを認識することができる。前記タイマAの初期値転送は、前記DMAとは別のDMA装置Bによって所定周期で実行する。また、前記DMA装置Bによる転送周期は、タイマAとは別のタイマBによってタイミングが生成されるが、前記タイマAのタイムアウトは、前記タイマBの所定周期のイベントよりも長くしておくことで、正常時はタイマAのタイムアウトは発生しないが、前記タイマAの初期値を保存している領域が上書きされ、初期値が小さくなることで、タイマAのタイムアウトが発生し、DMA装置Aの暴走を検知できる。尚、前記タイマAの初期値は、メモリ領域の最大値に近い値である程、上書きされたときの検出率が高くなり、最大値から遠い値であるほど、タイムアウトが早くなるという特徴をもつ。
【発明の効果】
【0008】
上記の手段を用いることで、前記従来技術の機能を搭載していない制御装置において、CPUを介さずにDMAによるメモリの上書きを検出することが可能となる。
【図面の簡単な説明】
【0009】
【図1】本発明の組み込み制御装置のシステム構成例を示す図である。
【図2】本発明の一実施の形態によるエンジン制御ユニットのシステム構成例を示す図である。
【図3】本発明の一実施の形態によるエンジン制御ユニットのDMA装置が正常動作している場合の処理フローを示した図である。
【図4】本発明の一実施の形態によるエンジン制御ユニットのDMA装置が正常動作している場合のタイマのタイミングチャートを示した図である。
【図5】本発明の一実施の形態によるエンジン制御ユニットのDMA装置が異常動作した場合の処理フローを示した図である。
【図6】本発明の一実施の形態によるエンジン制御ユニットのDMA装置が異常動作した場合のタイマのタイミングチャートを示した図である。
【発明を実施するための形態】
【0010】
以下に本発明の実施形態による組み込み制御装置について図面を参照しつつ説明を行う。図2は本発明の第一の実施形態である自動車用エンジン制御ユニットに搭載されているマイクロプロセッサの構成例を示す図である。図2に示すように、エンジン制御ユニット2のマイクロプロセッサ1は、CPU15と、内蔵RAM31(Random Access Memory)と、DMAC32(Direct Memory Access Controller)と、ダウンカウントタイマ33b,コンペアマッチタイマ33aを有している。
【0011】
DMAC32は、DMAチャネルA32a,DMAチャネルB32bを有している。内蔵RAM31は、DMAC用メモリ領域311を有しており、DMAC用メモリ領域311内は、DMAチャネルA用メモリ領域311a,DMAチャネルB用メモリ領域311bに分かれている。またDMAチャネルB用メモリ領域311bはDMAチャネルA用メモリ領域311aに隣接して置かれている。
【0012】
ダウンカウントタイマ33bは所定の間隔でカウンタをダウンカウントするタイマのことであり、予め初期値を設定しスタートさせる。カウンタが0になると、CPU15へのイベント要求信号を生成し、カウンタのカウントダウンが停止する。CPU15がダウンカウントタイマ33bのイベント要求信号を検知すると、割り込み処理が発生する。またDMAチャネルB用メモリ領域311bには、ダウンカウントタイマ33bの初期値と同じ値を設定する。
【0013】
コンペアマッチタイマ33aは所定の間隔でカウンタをカウントアップするタイマのことであり、ダウンカウントタイマ33bの初期値より短い値を閾値として設定しスタートさせる。コンペアマッチタイマ33aのカウンタ値と設定した閾値とが一致すると、DMAチャネルB32bへのイベント要求信号を生成する。またイベント要求信号を生成と同時にカウンタを自動的に0クリアし、再度カウントを開始する。
【0014】
DMAチャネルA32aは、外部イベントをトリガとして起動し、DMAチャネルA用メモリ領域311aにデータを転送する。DMAチャネルB32bはコンペアマッチタイマ33aのイベントをトリガとして起動し、DMAチャネルB用メモリ領域311bにある値を、ダウンカウントタイマ33bのカウンタに転送する。
【0015】
DMAが正常に動作する場合の初期動作から通常動作までのフローチャートを図3に示す。図2,図3を参照しつつDMAが正常に動作している場合の初期動作から通常動作までを説明する。コンペアマッチタイマ33a,ダウンカウントタイマ33bを起動する前にDMAチャネルA32a,DMAチャネルB32b,DMAチャネルB用メモリ領域311b,ダウンカウントタイマ33b,コンペアマッチタイマ33aを設定する。S101では、DMAチャネルA32aの起動は外部トリガ,DMAチャネルA用メモリ領域311aにデータを転送する設定とし、DMAチャネルB32bはコンペアマッチタイマ33aのイベント要求信号をトリガとし、DMAチャネルB用メモリ領域311bの値をダウンカウントタイマ33bのカウンタに転送する設定としてDMAチャネルA32a,B32bを起動する。S102ではコンペアマッチタイマ33aの閾値、S103ではダウンカウントタイマ33b,コンペアマッチタイマ33aのカウンタに初期値を設定する。但しダウンカウントタイマ33bのカウンタに設定する初期値はコンペアマッチタイマ33aの閾値より大きい値、またコンペアマッチタイマ33aのカウンタに設定する値は0とする。S104では、DMAチャネルB用メモリ領域311bに初期値を設定する。設定する初期値はダウンカウントタイマ33bの初期値を同じ値とする。S105ではダウンカウントタイマ33b,コンペアマッチタイマ33aを同時に起動し、ダウンカウントタイマ33bはカウンタをカウントダウン、コンペアマッチタイマ33aはカウンタのカウントアップを開始する。S105でタイマを起動して所定時間が経過すると、S106でダウンカウントタイマ33bがタイムアウトする前に、コンペアマッチタイマ33aのカウンタ値が設定した閾値と一致する。S107ではコンペアマッチタイマ33aがDMAチャネルB32bへのイベント要求信号を生成すると同時に、カウンタを0クリアしカウントを再スタートする。S108ではDMAチャネルB32bがイベント要求信号を検知すると、DMAチャネルB用メモリ領域311bの値をダウンカウントタイマ33bに書き込む。S109ではダウンカウントタイマ33bがタイムアウトする前に、初期値を再設定される。またコンペアマッチタイマ33aのカウンタの0クリアとDMAチャネルB32bによるダウンカウントタイマ33bの書き込みは同タイミングで処理されていることとする。以降DMAが正常に動作している場合、S106〜S109の動作を繰り返す。またこの時のダウンカウントタイマ33b,コンペアマッチタイマ33aの起動後におけるカウンタのタイミングチャートを図4に示す。図4に示すように、ダウンカウントタイマ33b,コンペアマッチタイマ33aの起動後、ダウンカウントタイマ33bが0(タイムアウト)になる前に、コンペアマッチタイマ33aのカウンタが閾値と一致して、カウンタが0クリアしている動作となる。またコンペアマッチタイマ33aはカウンタの0クリアすると同時に、DMAチャネルB32bへのイベント要求信号をDMAチャネルB32bに送り、ダウンカウントタイマ33bのカウンタにDMAチャネルB用メモリ領域311bの値を書き込んで初期化しているため、ダウンカウントタイマ33bはタイムアウトしない動作となる。
【0016】
また図3に示すS106〜S109の動作中にDMAチャネルA32aがDMAチャネルA用メモリ領域311a外のDMAチャネルB用領域311bに不正アクセスした場合の異常検知方法について図5に示す。図5について説明すると、S201でDMAチャネルA32aがDMAチャネルB用メモリ領域311bに不正アクセスし、設定していた初期値が更新される。但し更新される値は、コンペアマッチタイマ33aの閾値よりも小さい値とする。DMAチャネルB用メモリ領域311bの値が更新されると、S109でダウンカウントタイマ33bのカウンタに設定される値がコンペアマッチタイマ33aの閾値よりも小さくなるため、S202でダウンカウントタイマ33bのタイムアウトする。ダウンカウントタイマ33bのタイムアウトによりS203でCPU15へのイベント要求信号が生成される。S204でCPU15がイベント要求信号を検知すると、割り込み処理を発生させ、DMAチャネルA32aの異常を検知し、DMAチャネルA32aを停止する。またこの時のダウンカウントタイマ33b,コンペアマッチタイマ33aの起動後からDMAチャネルA32aの異常検知までにおいてのカウンタのタイミングチャートを図6に示す。図6に示すように、DMAチャネルA32aの異常発生後、DMAチャネルB32bによりダウンカウントタイマ33bの値が更新されるが、コンペアマッチタイマ33aの閾値よりも小さい値となり、次回コンペアマッチタイマ33aのイベント要求信号生成よりも前に、ダウンカウントタイマ33bのタイムアウトし、CPU15へのイベント要求信号が生成される動作となっている。
【0017】
以上、本発明の第一の実施形態による制御装置によれば、DMA装置が意図していないメモリ領域に不正アクセスした場合において、ダウンカウントタイマ,コンペアマッチタイマ,DMA装置を用いることで監視し、DMA装置によるメモリ上書きを検知することができる。
【0018】
また図2で説明したDMAチャネルB用メモリ領域の下にスタック領域を置くことで、DMAによるメモリ上書きの被害を減らすことができる。更にDMAチャネルB用メモリ領域の形態を工夫することで、DMAによるメモリ上書きの検出確率を高くすることができる。例えばDMAチャネルB用メモリ領域の値を連続して複数個置き、コンペアマッチタイマのイベント毎にDMAチャネルBの転送元を順次変える方法や複数のDMA装置を有している場合に、一定の間隔でDMAチャネルB用メモリ領域を設け、コンペアマッチタイマのイベント毎にDMAチャネルBの転送元を順次変更することで、DMAによるメモリ上書きの検出確率を高くすることができる。
【0019】
次に本発明の第二の実施形態による制御装置について説明を行う。
【0020】
本発明の第一の実施形態においては、マイクロプロセッサ内のDMAC,コンペアマッチタイマ,ダウンカウントタイマ,内臓RAM,CPUを用いた例を示したが、本実施の形態による制御装置のように、コンペアマッチタイマ,ダウンカウントタイマがなく、代わりに所定の時間で起動する定常タスクで有していれば、DMAのメモリ上書きをソフトウェアで検知することができる。方法としては、まず定常タスク毎にDMAチャネルB用メモリ領域の値をチェックする。DMAチャネルB用メモリ領域が上書きされた場合に、保存していた初期値が変わることで、DMAチャネルAの転送先が転送先領域外になることを検知する。また本発明の第一の実施形態で説明したDMAチャネルB用メモリ領域の形態を同じように工夫することで、DMAによるメモリ上書きの検出確率を高くすることができる。
【産業上の利用可能性】
【0021】
本発明は、2つ以上のDMA装置を具備する制御装置に適用できる。
【符号の説明】
【0022】
1 マイクロプロセッサ
2 エンジン制御ユニット
13a DMA装置A
13b DMA装置B
14a タイマA
14b タイマB
15 CPU
31 内蔵RAM
32 DMAC
32a DMAチャネルA
32b DMAチャネルB
33a コンペアマッチタイマ
33b ダウンカウントタイマ
121 メモリ領域A
121a メモリ領域B
311 DMAC用メモリ領域
311a DMAチャネルA用メモリ領域
311b DMAチャネルB用メモリ領域

【特許請求の範囲】
【請求項1】
DMA装置Aの転送先であるメモリ領域Aと、所定の時間でタイムアウトするタイマAと、前記メモリ領域Aに隣接し前記タイマAの初期値を保存したメモリ領域Bと、前記メモリ領域Bの値を前記タイマAに転送し初期化するDMA装置Bと、前記タイマAのタイムアウトよりも短い所定の間隔で前記DMA装置Bの転送要求信号を生成するタイマBを有する制御装置において、
前記タイマAの初期値を保存した前記メモリ領域Bが上書きされた場合に、DMA装置Bによって転送される前記タイマAの初期値が小さくなることにより、前記タイマBによる前記タイマAの初期化のタイミングよりも先に前記タイマAのタイムアウトすることで前記DMA装置Aの転送先が転送先領域外であることを検知する手段。
【請求項2】
請求項1において、前記メモリ領域Aとスタック領域の間に前記メモリ領域Bを置き、前記メモリ領域A外が上書きされた場合の被害を少なくすることを特徴としたDMA装置の異常検知手段。
【請求項3】
請求項1において、前記メモリ領域Bを連続した領域に複数個有し、前記タイマBのイベント毎に前記DMA装置Bの転送元領域を順次変更することで、前記メモリ領域A外が上書きされた場合の検出確率を高くすることを特徴としたDMA装置の異常検知手段。
【請求項4】
請求項1において、前記制御装置が複数個のDMA装置を有している場合に、一定間隔で前記メモリ領域Bを複数個設け、前記タイマBのイベント毎に前記DMA装置Bの転送元を順次変更することで、DMA装置の異常を検出することを特徴とした手段。
【請求項5】
請求項1において、前記タイマA,Bの代わりに所定の時間で起動する定常タスクを有する制御装置の場合に、前記定常タスク毎に前記メモリ領域Bの値をチェックする処理プログラムを有し、前記メモリ領域Bが上書きされた場合に、保存していた初期値が変化することで、前記DMA装置Aの転送先が転送先領域外になることを検知する手段。
【請求項6】
請求項5において、前記メモリ領域Bの下にスタック領域を置くことで、前記メモリ領域A外が上書きされた場合の被害を少なくすることを特徴としたDMA装置の異常検知手段。
【請求項7】
請求項5において、前記メモリ領域Bを連続した領域に複数個有し、前記定常タスク毎にチェックすることで、前記メモリ領域A外が上書きされた場合の検出確率を高くすることを特徴としたDMA装置の異常検知手段。
【請求項8】
請求項5において、前記制御装置が複数個のDMA装置と前記メモリ領域Aを有している場合に、一定間隔でメモリ領域Bを複数個設け、前記定常タスク毎に前記メモリ領域Bをチェックすることで、DMA装置の異常を検出することを特徴とした手段。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate