wiki:Watch_dog_for_RPi

Raspberry Pi用のウォッチドックタイマー の使い方

Raspberry Pi Model B用ウォッチドッグ基板 販売ページ

Raspberry Pi Model B+用ウォッチドッグ基板 販売ページ

ウォッチドックタイマーとは

ウォッチドッグタイマー (watchdog timer) はメインの処理とは独立したハードウェアタイマー(時間計測器)です。

一般的に、このタイマーはメイン処理から定期的に更新されるように設定します。 この場合、メインのプログラムがハングアップなどの不正な状態に陥りタイマーが更新されなくなると、タイマーに設定された時間をオーバーフローします(タイムアウト)。 このタイムアウトを利用して、システムに例外処理を発生させ、システム全体の耐障害性を高める仕組みの一つです。

例外処理の方法には、ハングアップしたシステムを正常動作に戻すことを目的として、システムをリセットする(リセット)、電源切断によりシステムを強制停止させる(シャットダウン)、電源を切断した後に再投入する(リブート)、などがあります。


◆ 特徴

  • Raspberry Piにウォッチドッグ機能(以下WD機能)を追加する電源供給基板
  • WD機能を利用する場合は、基板上のDCジャックから5V電源を供給する必要がある
  • 基板上のマイコンは、Raspberry PiのGPIOを監視し、Raspberry Pi上のメインプログラムに異常が無いかを判定する。
  • 異常を検出したときは、Raspberry Piへの電源供給を一時停止し、電源再投入してRaspberry Piの再起動を促す。



◆ Raspberry Pi Model B用ウォッチドッグ基板のハードウェア

  • 右下のDCジャックは5V入力専用
  • 監視ポート選択パッドの初期接続はGPIO17
  • ジャンパを切り接続を変更すると、GPIO の9,10,11,22,27も選択可能
  • LED on/offジャンパーをショートすると、動作ステート用LEDが点灯する

Watch_dog_for_RPi_04_Function


◆ Raspberry Pi Model B+用ウォッチドッグ基板のハードウェア

  • 右下のDCジャックは5V入力専用
  • HAT形状の基板だが、RPi本体側からの電源逆流防止回路は搭載していない
  • 監視ポート選択パッドの初期接続はGPIO17
  • ジャンパを切り接続を変更すると、GPIO の9,10,11,13,19,22,26,27も選択可能
  • LED on/offジャンパーをショートすると、動作ステート用LEDが点灯する

Watch_dog_for_RPi_BP_04_Function


◆ マイコンのウォッチドッグプログラムの状態遷移

program state

各ステート時のLEDの光り方

  • WD_default時には、ステートLEDが約2.56秒に1回点滅
  • WD_Active時には、ステートLEDが約0.32秒に1回LED点滅
  • WD_ReBoot時には、ステートLEDが約0.08秒に1回LED点滅



◆ 使用方法

ウォッチドッグ基板は、初期状態でGPIO17を監視しながら上記の状態遷移を自動で繰り返すので、特に設定することはありません(タイマー時間は固定です)。唯一LEDは省電力のため標準で消灯としてあります。動作をLEDで確認したいときはジャンパをショートしてください。その場合、マイコンの状態がLEDに反映されます。

Raspberry Pi側で準備する事は、ブートアップして準備が整ったら、監視ポート(標準ではGPIO17)にパルス信号を出すプログラムを自動で走らせる事です。このパルスを出すプログラムは、メインのプログラムに組み込んでも専用のプログラムにしても(あるいは両方でも)可能です。Raspberry Piの処理がスタックした場合に、パルスが止まるようになっていれば大丈夫です。

ウォッチドック基板のマイコンは、パルスの立下りエッジを5回検出すると自動的にウォッチドッグ動作を有効にし(初期化パルスの検出)、それ以降、異常検出のためのポートの監視を続けます。この時の初期化パルスの間隔には時間制限はありません。

ウォッチドッグが有効になってからも、監視ポートに特定時間に1回パルスを出し続ければ、ウォッチドッグカウンターが更新されてリブートはかかりません。パルスは0.1秒~5秒未満に1回検出できれば有効で、この間隔が不規則であってもウォッチドッグカウンターは更新されます。なおパルスの間隔は、余裕を見て0.5秒~4秒程度に設定する事をお勧めします。

もしGPIO17を利用出来ない場合は、他のGPIOピンを監視ポートにすることも可能です。その時は、基板上のGPIO17のジャンパをカットし、利用したいポートのジャンパをショートしてください。同時にRaspberry Pi側のパルス出力もそのポートに変更してください。

もし現在の仕様で利用条件に合わない場合には、下記のソースファイルを書き換えることで、ある程度対応可能です。


Last modified 22 months ago Last modified on Mar 3, 2016 4:25:46 PM

Attachments (3)

Download all attachments as: .zip