TL

ウォッチドッグタイマ

暴走した組み込み機器が自力で復帰する仕組みが原理から分かる。番犬タイマのキックとリセット、ウィンドウ方式、独立クロックが最後の砦になる理由を理解できる。

応用ウォッチドッグ組み込みマイコン機能安全リセット最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.ウォッチドッグは減算カウンタで、ソフトが定期的にキック(リロード)しないと0に達してMCUをリセットする。ハングアップからの自動復帰を担う最後の砦。
  • 2.ウィンドウウォッチドッグは「早すぎるキック」も禁じ、閉窓中の更新をリセット扱いにする。単純タイムアウト方式が見逃す高速ループ暴走を検出できる。
  • 3.独立ウォッチドッグは主クロックと別の低速RC発振器で動き、いったん有効化するとソフトから停止できない。主クロック停止や発振暴走でも作動する信頼性の要。

暴走した機器を誰が助けるのか

組み込み機器は人が常駐しない場所で何年も動き続けます。宇宙線によるビット反転、電源ノイズ、まれにしか踏まないバグ——原因が何であれ、ソフトが無限ループに落ちたりデッドロックしたりして応答を失うことは避けられません。PC ならユーザーが電源を切って再起動できますが、山中のセンサや走行中の ECU にその手は使えません。

ウォッチドッグタイマ(WDT、番犬タイマ) は、この「暴走からの自力復帰」を担うハードウェアです。核心は単純で、CPU とは独立に動くカウンタが時間切れになったら MCU 全体をリセット する、それだけです。正常なソフトは定期的にカウンタを「キック(餌やり、リロード)」してリセットを未然に防ぎます。キックが途絶えた=ソフトが正常に回っていない、とみなして番犬が吠える、という仕掛けです。

減算カウンタとキックの原理

内部はダウンカウンタです。クロックで一定周期ごとに値が1ずつ減り、0(またはアンダーフロー)に達した瞬間にリセット信号を生成 します。ソフトはタイムアウトが来る前に、決められたレジスタへ特定の値を書き込んでカウンタを初期値へ戻します。この書き戻しがキックです。

初期値 = タイムアウト時間 × ウォッチドッグクロック周波数

例: タイムアウト 1s、WDTクロック 32kHz、プリスケーラ 1/256 のとき
    カウンタ周期 = 256 / 32000 ≒ 8ms
    必要カウント = 1000ms / 8ms ≒ 125 → リロード値に 125 を設定

  |----キック----|----キック----|----X 応答なし----> 0到達 → RESET
  ↑             ↑             ↑                    ↑
 t=0          t=0.5s        t=1.0s        タイムアウト超過で発火

誤操作でうっかりリセットしないよう、キックには保護機構が付くのが普通です。ST の IWDG なら「まず 0xAAAA を書いてリロードを許可」といったキーシーケンス方式、他社では2つの異なる値を順に書く方式などで、ノイズや暴走コードが偶然1回書き込んだだけでは餌をやれないようにしています。

キックは「main ループの底」で1回だけ

最悪のアンチパターンが、タイマ割り込みハンドラの中で無条件にキックすることです。多くの暴走ではアプリのメインロジックが固まっても割り込みだけは動き続けます。ISR がキックし続ける設計では、システム全体がハングしても番犬は餌をもらえてしまい、リセットが永久に起きません。キックは原則メインループ末尾で行い、割り込みや DMA からの自動リロードは監視対象を狭めることを理解した上でのみ使います。

タスクの「生存投票」で全体を監視する

RTOS 下で複数タスクが走る場合、どこか1タスクだけがキックすると、他タスクが死んでも番犬は気づきません。定石は 各タスクが自分の生存フラグを立て、監視役だけがキックする 構成です。

各周期タスク: 自分の担当ビットを立てる
  task_A → alive |= BIT_A
  task_B → alive |= BIT_B
  task_C → alive |= BIT_C

監視タスク(最下位優先度など):
  if (alive == (BIT_A | BIT_B | BIT_C)) {  // 全員が生きている
      watchdog_kick();
      alive = 0;                            // 次周期のためクリア
  }
  // 1つでも欠ければキックしない → タイムアウトでリセット

こうすると、あるタスクだけがスタベーションやデッドロックで止まった場合も生存ビットが揃わず、番犬が発火します。各タスクのチェックイン期限に個別のデッドラインを設けると、遅すぎる/速すぎるタスクの検出精度が上がります。優先度やスケジューリングの前提は /os/ の設計知識が土台になります。

ウィンドウウォッチドッグ:早すぎるキックも罪

単純なタイムアウト方式には盲点があります。「遅すぎるキック(=ハング)」は検出できても、「速すぎるキック」は検出できません。もしバグでコードが本来の処理をスキップし、キック命令だけを高速に何度も叩くループに落ち込んだら、番犬は満足し続けてしまいます。

ウィンドウウォッチドッグ(WWDG) は下限と上限の両方を課してこれを塞ぎます。タイムアウトまでの区間を「閉窓(forbidden/closed window)」と「開窓(allowed/open window)」に分け、開窓に入る前の早すぎるキックをリセット事由 として扱います。

方式許される更新タイミング検出できる異常見逃す異常
単純タイムアウト(IWDG型)0到達より前ならいつでも可ハング・無限待ち(遅すぎ)処理を飛ばした高速ループ(早すぎ)
ウィンドウ(WWDG型)閉窓を過ぎ、開窓かつ0到達より前遅すぎ+早すぎの両方窓内に偶然収まる暴走のみ

STM32 の WWDG を例にとると、7ビットのダウンカウンタが上限値 0x7F 側から減り、下限しきい値(ウィンドウレジスタ値)を 上回っている間に更新すると即リセット、しきい値を下回りかつ 0x40 に達する前に更新すれば正常、カウンタが 0x40 から 0x3F へ落ちた瞬間(T6 ビットが 0 になった瞬間)にタイムアウトでリセット、という三分岐で動きます。つまり「決められた時間帯にだけ餌をやれ」という時間窓の規律を課すわけで、処理周期そのものの狂いを捕まえられるのが強みです。

早期警告割り込み(EWI)で最後の遺言を残す

WWDG などはリセット直前に 早期警告割り込み(Early Wakeup/Warning Interrupt) や NMI を上げられます。ここでスタックやエラーコード、直近のログをフラッシュや FRAM に退避しておくと、再起動後に「なぜ落ちたか」を解析できます。番犬は復帰させるだけでなく、事後解析の証拠を残す仕掛けにもなります。

独立クロックが「信頼性の要」である理由

ここが上級での肝です。番犬が監視対象と同じクロック・同じ電源・同じ停止条件を共有していると、故障が両方を同時に巻き込み、番犬ごと沈黙してしまいます。だから信頼性の高いウォッチドッグは、監視対象から独立した資源で動く ことが設計原則になります。

主クロックが死ねば、それに依存する番犬も死ぬ

メイン PLL やシステムクロックの発振が止まる/暴れると、CPU は無反応になります。もし WDT が同じクロックで駆動されていたら、番犬のカウンタも同時に止まり、リセットは永遠に来ません。これが「独立クロックでなければならない」核心の理由です。

STM32 系の 独立ウォッチドッグ(IWDG) はこの原則を体現します。専用の低速内部 RC 発振器(LSI、およそ 32kHz)で動き、主クロックが停止・暴走しても回り続けます。さらに、いったんソフトで有効化すると二度と停止できない(設定ロック)ため、暴走コードが誤って番犬を無効化する事故も防げます。低速・低消費で常時動かせる点も、常時監視という役割に合致します。独立クロックの安定性・誤差特性そのものは /dsp-control//semiconductor/ が扱う発振・タイミングの物理に根ざしています。

独立性をさらに徹底するのが 外付けウォッチドッグ IC です。MCU の外側(監視 IC や PMIC、電圧スーパバイザ)に番犬を置き、MCU の I/O ピンにキックパルスを出させます。MCU 内部のクロックも電源も丸ごと監視対象にできるうえ、多くはウィンドウ方式に加えて チャレンジ・レスポンス(IC が出したお題に MCU が正しく計算して答えないと餌にならない)を備え、「CPU が本当に演算できているか」まで検証します。車載の ISO 26262 など高い機能安全レベルでは、内蔵 WDT だけでなくこの外付け+ウィンドウ+チャレンジ・レスポンスの多重化がしばしば要求されます。電源監視との連携は /power/ の領域とも接続します。

資格・面接で問われる勘どころ

「単純 WDT とウィンドウ WDT の違いは」には『単純型は遅すぎ(ハング)だけを見るが、ウィンドウ型は下限も課し早すぎ更新もリセット扱いにして処理周期の狂いを捕まえる』。「なぜ独立クロックが要るか」には『主クロックと共倒れを防ぎ、クロック停止時でも作動させるため。ソフトから停止不可にして無効化事故も防ぐ』。ISR で無条件キックする設計が誤り、である理由(ハングしても割り込みだけ生き残る)もあわせて押さえます。

番犬を「正しく飼う」ための原則

ウォッチドッグは付ければ安全になる魔法ではありません。設計を誤ると「動いているつもりの偽りの安心」を生みます。要点は3つに集約されます。第一に、キックは主要な処理がすべて完了したことの証跡として1箇所で行う——割り込みや自動リロードで安易に餌をやらない。第二に、タイムアウトは実用上の最短に——長すぎる猶予は暴走状態を無駄に延命します。第三に、独立性を最大化する——別クロック・停止不可、必要なら外付けで電源まで含めて監視する。この3原則を貫いて初めて、番犬は「暴走しても自力で立ち直る」という組み込みの信頼性を本当に支える存在になります。

組込み・IoT Article

ウォッチドッグタイマを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ウォッチドッグ

比較で見る軸

難易度: advanced / カテゴリ: 組込み・IoT / タグ数: 5

導入後に効く点

ウィンドウウォッチドッグは「早すぎるキック」も禁じ、閉窓中の更新をリセット扱いにする。単純タイムアウト方式が見逃す高速ループ暴走を検出できる。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
組込み・IoT
タグ数
5

判断チェックリスト

  • 自社の用途が「ウォッチドッグ / 組み込み」に近いか確認する。
  • 強みである「ウォッチドッグは減算カウンタで、ソフトが定期的にキック(リロード)しないと0に達してMCUをリセットする。ハングアップからの自動復帰を担う最後の砦。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ウォッチドッグ組み込みマイコン機能安全リセットウォッチドッグ組み込みマイコン