独立したウォッチドッグ(IWDG)またはウィンドウウォッチドッグ(WWDG)


15

私はまだこの質問の答えを探しています:

stm32 MCUには完全なウォッチドッグ(つまり、ウィンドウウォッチドッグ(WWDG))があるのに、単純なウォッチドッグ(独立したウォッチドッグ(IWDG))があるのはなぜですか?

私が言ったこのページを見つけました:

ST Microelectronicsには、Cortex-M3デバイスのラインがあります。M3はローエンドの組み込みデバイスで非常に人気があり、STのSTM32Fはこれらの部品の代表です(ただし、WDTはSTアドオンであり、他のベンダーの実装を必ずしも反映していません)。STM32Fには2つの異なる保護メカニズムがあります。「独立したウォッチドッグ」は、使いやすさ以外の目的はほとんどない、かなりバニラなデザインです。しかし、彼らのWindow Watchdogはより強力な保護を提供します。カウントダウンタイマーの期限が切れると、リセットが生成されます。これは、タイマーをリロードすることによって妨げられる可能性があります。特別なものはありません。ただし、リロードが速すぎると、システムもリセットされます。この場合、「速すぎる」は、制御レジスタにプログラムする値によって決定されます。

別のクールな機能:リセットの直前に割り込みを生成できます。割り込みを捕捉するためのコードを少し書くと、たとえば、システムを安全な状態にしたり、デバッグ目的でデータのスナップショットを作成したりするためのアクションを実行できます。STは、ISRを使用してウォッチドッグをリロードすることを推奨しています。つまり、リセットが発生しないようにドッグをキックします。彼らのアドバイスを受け入れないでください。プログラムがクラッシュした場合、割り込みハンドラは正常に機能し続ける可能性があります。また、ISRを使用してWDTをリロードすると、ウィンドウウォッチドッグの理由全体が無効になります。

そしてこれ

STMicroelectronicsのSTM32F4 Cortex™-M4 CPUの新しいシリーズには、2つの独立したウォッチドッグがあります。独自の内部RCオシレーターから実行します。つまり、すべての種類のものがCPU内で崩壊する可能性があり、WDTは引き続き起動します。また、「ウィンドウウォッチドッグ」(WWDT)もあります。これは、コードを頻繁にくすぐる必要がありますが、あまり頻繁ではありません。これは、保護メカニズムにランダムに書き込むクラッシュコードを保証する非常に効果的な方法で、リセットがアサートされる少し前にWWDTが割り込みを生成できます。

さて、リファレンスマニュアルを見てみましょう:

STM32F10xxxには、高度な安全レベル、タイミング精度、および使用の柔軟性の組み合わせを提供する2つのウォッチドッグ周辺機器が組み込まれています。両方のウォッチドッグ周辺機器(独立およびウィンドウ)は、ソフトウェア障害による誤動作を検出および解決し、カウンターが指定されたタイムアウト値に達したときにシステムリセットまたは割り込み(ウィンドウウォッチドッグのみ)をトリガーします。独立したウォッチドッグ(IWDG)は、専用の低速クロック(LSI)によってクロックが供給されるため、メインクロックに障害が発生してもアクティブのままになります。ウィンドウウォッチドッグ(WWDG)クロックは、APB1クロックから事前にスケーリングされており、異常に遅いまたは早いアプリケーション動作を検出するようにプログラムできる構成可能なタイムウィンドウを備えています。IWDGは、ウォッチドッグをメインアプリケーションの外部で完全に独立したプロセスとして実行する必要があるアプリケーションに最適です。ただし、タイミング精度の制約は低くなります。WWDGは、ウォッチドッグが正確なタイミングウィンドウ内で反応する必要があるアプリケーションに最適です。

ウィンドウウォッチドッグは、通常外部干渉または予期しない論理条件によって生成されるソフトウェア障害の発生を検出するために使用され、アプリケーションプログラムが通常のシーケンスを放棄する原因となります。ウォッチドッグ回路は、プログラムがT6ビットがクリアされる前にダウンカウンタの内容を更新しない限り、プログラムされた期間の終了時にMCUリセットを生成します。MCUリセットは、ダウンカウンタがウィンドウレジスタ値に達する前に(制御レジスタ内の)7ビットダウンカウンタ値がリフレッシュされた場合にも生成されます。これは、限られたウィンドウでカウンターを更新する必要があることを意味します。

あなたが見ることができるように、それらのいずれも、なぜ 2つの番犬がいると言っていません。両方のウォッチドッグの違いを尋ねると、上記で見ることができるすべての機能をカウントし、両方を比較したい場合は、明らかにウィンドウウォッチドッグ(WWDG)が勝者になります!次に、なぜ2つのウォッチドッグがありますか?

IWDGをいつ使用し、いつWWDGを使用する必要があるかを知りたいですか?

そして、なぜ彼らはこの名前で2番目の時計を呼び出すのですか?> "ウィンドウウォッチドッグ"と言う理由はありますか?

回答:


23

通常のウォッチドッグタイマーは、タイムアウトする前にリセットする必要があります。100ms WDTがある場合、99.9msまたは10usごとにリセットでき、タイムアウトすることはありません。

ウィンドウウォッチドッグタイマーには、リセットする必要がある時間ウィンドウがあります。リセットが早すぎたり遅すぎたりすると(前のリセットから)、プロセッサがリセットされます。

明確でない場合、目的は、WDTをリセットするコードが目的のコードであり、目的の方法で動作することを保証することです。高周波のWDTリセットを生成する予期せぬ条件のいくつかは、システムのリセットを妨げません。

システムクロックからWDTを実行することは、少し問題になる可能性があります。クロックに障害が発生し、独立したクロックモニタ回路がない場合、悪いことが起こる可能性があります。WDTの独立したクロックは、何らかの理由でモノが1/10の速度で実行を開始した場合、WDTがリセットされることを意味します(ただし、ウィンドウWDTはリセットされません)。

可能であれば両方を使用します。

ページにあるように、ISRでWDTをリセットすることは一般に悪いことです(ただし、タイマーをリセットする前にファームウェアのリセットが機能していることをISRが確認した場合は許容可能です)。


システムクロックが失敗する可能性は本当にありますか?それが起こった場合、それを理解できます。したがって、WDTは有用ではありません。なぜ心配になるのでしょうか?
h 14

1
独立したWDTクロックによってMCUが強制的にリセット状態になった場合(その状態は安全です)、おそらく災害を防ぐことができます。短絡したMCUクリスタルは、初期に重大な事故を引き起こしました(BART、IIRC)。
スペロペファニー14

1
@Roh:このプロセッサでスリープモードに入った後、システムクロックが戻ってこないのを実際に見ました(まあ、STM32 F0はM0です)。特定の時間に特定のことを行うと、PLLクロックが起動に失敗し、全体が1/6の速度で実行されることがわかりました。
ナトン

@Nathonありがとう。面白い。M0シリーズは完全に嫌いです。STMの各シリーズに問題があるように聞こえます。

7

質問に貼り付けたテキストは、必要な答えを提供します。

  1. IWDGは、単純なウォッチドッグが必要な場合、または完全に独立したウォッチドッグが必要な場合に使用します。IWDGには独自のクロックがあり、WWDGはバスクロックの1つからクロックを取得します。
  2. 特定のタイムスパン(ウィンドウ)内でのみリセットできるウォッチドッグが必要な場合は、WWDGを使用します。ソフトウェアがWWDGをリセットするのが遅すぎる場合、WWDGはプロセッサのリセットを作動させます。ソフトウェアがWWDGをあまりにも早期にリセットすると、プロセッサもリセットされます。

指定された期間(機会のウィンドウ)にウォッチドッグがリセットされるだけで、ウォッチドッグがプロセッサをリセットできないという単純な理由から、「ウィンドウウォッチドッグ」と呼ばれます。

どちらも似たような仕事をしますが、彼らは異なった仕事をします。必要なものは、満たさなければならない要件によって異なります。


Spehro Pefhanyへの私のコメントを読んでください。
h 14

1
WWDGが使用するタイマーはプログラム可能です。ソフトウェアを使用してそのレートを変更できます。ソフトウェアが制御不能になり、APB1レートを変更すると、タイムウィンドウが間違って、ウォッチドッグがプロセッサを絶えずリセットします。ウォッチドッグキッカーは、適切なタイミングでウォッチドッグをキックしません(または偶然のみ)。プログラムは、APB1クロックまたはWWDGタイマーを完全に無効にすることもできます。この場合、プロセッサはリセットされません。
JRE 14

5

独立したウォッチドッグの代わりに、またはそれに加えて、ウィンドウウォッチドッグを使用する別の理由があります。WWDGには、フックできる割り込みがあります。これは、コードがループまたはフーガに入った場合、WWDG ISRにブレークポイントを設定し、犬がbarえたときにファームウェアが何をしていたかを逆方向に調べることができることを意味します。

IWDGでこれを行うことはできません。名前が示すように、それはプロセッサに依存しません。割り込みを発生させるのではなく、単に/ RESETをアサートおよびディアサートします。これにより、なぜwhyえたかについて多くの手がかりが得られません。通常の動作パラメータ内でWWDGを設定し、さらに長い期間(おそらく2 * WWDG最大)でIWDGを設定することを強くお勧めします。両方をキックするキックドッグ関数を作成します。このようにして、IWDGは、最終バックアップとしてWWDGがロックアウトしたときにのみ鳴きます。


1

私の考え:

異なる障害状態を探すため、両方を同時に使用します。

独立ウォッチドッグ(IWDG)タイマーは継続的にそれ倍の前にリセットであることが必要です。実際には、有効なプログラム状態があるすべての場所にリセットコードを追加するか、大きな遅延なしに頻繁に実行されるはずのメインループがある場合はメインループに1回追加するだけです。このように、タイマーをリセットする呼び出し(「ペッティング」、「くすぐり」、または単に「リセット」「ウォッチドッグ」と呼ばれることもある)が時間内に発生しない場合は、コードA)が 誤ってスタックしたことを意味しますあなたが予見しなかったどこか---ある種の予期せぬ無限ループ型の状態、またはB) を経由して強制にどこかに強制に行き詰まったassert()いくつかの重要な条件が当てはまらない場合にコードを移動させる埋め込み無限ループを使用した関数呼び出し。したがって、アサート条件がfalseであるため、コードは意図的に無限ループに陥り、ウォッチドッグはマイクロコントローラーをリセットして有効な状態に戻します。「独立したウォッチドッグ(IWDG)は、専用の低速クロック(LSI)によってクロックが供給されるため、メインクロックに障害が発生してもアクティブのままです」(ST RM0008リファレンスマニュアルp493を参照)。

ただし、Window Watchdog(WWDG)タイマーは、上記のケース(コードが意図せずまたは意図的に(アサートを介して)どこかで "スタック"する)を探しないように設計されているようです。A)あなたのコードは、それが何かは実行されませんはずが。つまり、メインループまたはコードの他のサブセクションの実行が速すぎる(または完全にスキップされる)フォールトが発生するため、ウォッチドッグをウィンドウの外ですぐにリセットし、mcuをリセットします。または、B)それが見つけることができる他の条件は、タイマー設定の失敗です。おそらく、一定の間隔でリセットしていますが、この間隔を作成するために使用するタイマーの構成が誤ってあるはずの場所で誤って変更されるか、そもそもそれを誤って構成すると、時間間隔がオフになり、固定されます時間間隔をリセットすると、そのウィンドウの外でWWDGがリセットされ(早すぎるか遅すぎる)、mcuがリセットされてユーザーに通知したり、条件を修正したりします。

これは私の考えです。考えやフィードバックを歓迎します。


0

「windowed」ウォッチドッグは、さらに悪いプログラミング慣行に対して何らかの方法で保護する単なる通常のウォッチドッグです。他の人が言ったように、「フィード」を供給する必要がある場所で通常調整可能な「時間枠」があります。

コードが自動的に持続するループに入る可能性がある場合、それらのいずれも防弾ではありません。例えば。タイマー関連のIRQに基づいて「フィード」する予定がある場合、メールスレッド内でコードが途中で止まったり、割り込みが正しい順序でWWDTにフィードする可能性があるため、これは非常に悪い習慣です。

実際、MIPS(Microchip)の場合のように通常の実行コードでIRQ優先度を下げることができる場合は、割り込みを使用してWWDTをフィードできます

コードが生命維持やクリティカルなどの場合は、それらをすべてドロップして、外部WDTを使用します(Q&Aベースが望ましい)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.