今回はSTM32マイコンのIWDG(独立ウォッチドッグ)について紹介します。WDG(ウォッチドッグ)は名の通り、MPUの動作を見張る番犬です。WDGを有効化するとMPUに異常な処理が発生した場合や意図しない処理の無限ループに入ってしまった場合に異常としてMPUをリセットさせることができます。そのような異常な状態にならないようにコードを実装することはもちろんですが、意図しない電源の急激な変化や強い静電気や電磁波といった外乱によって万一、動作が不安定になった場合にWDGによってリセットさせることで自動的に異常な状態から復帰させることができるようになります。
WDGの動作原理として、監視の時間間隔を予め設定し、監視を開始します(HAL_IWDG_Init)。そのあと、コード上で定期的にWDGカウントリフレッシュ関数HAL_IWDG_Refreshを呼び出します。正常な場合は予め設定した監視時間よりも前にHAL_IWDG_Refresh関数で正常に動いていることをWDGに知らせます。何かしらの異常が発生した場合はHAL_IWDG_Refresh関数が予め設定した監視時間になってもHAL_IWDG_Refresh関数による知らせがWDGにないため、監視時間を超えた時点でWDGが強制的にMPUのリセットを実行する仕組みです。正常動作にも関わらず、監視時間に達してリセットされてしまうということがないように、ある程度余裕のある監視時間を設定すべきです。ただ、余裕にしすぎると万一、異常な状態になった場合にリセットがかかるまでに時間を要することになるため、バランスを見て設定する必要があります。例えば、長い処理ではリフレッシュ関数を所々に予め入れておくといった対応が想定されます。
STM32マイコンのWDGにはWWDGとIWDGの2種類ありますが、IWDGはMPUのメインクロック供給源から独立した内蔵32kHzクロックを使用しています。そのため、意図しない電源の急激な変化や強い静電気や電磁波といった外乱に強くなります。なお、WWDGはMPUと共通のクロックを使用するため、クロック系に異常が発生した場合はWWDGとMPUともに共倒れします。
WDGとして強力なIWDGはCubeMX上で設定可能です。一方でIWDGを使用する上ではいくつか注意点があります。
■IWDG注意点@
IWDGはソフトウェアモードとハードウェアモードの2種類あります。デフォルトでは「ソフトウェアモード」が有効です。ソフトウェアの場合、独立クロックという面ではWWDGよりも有利ですが、外乱によってはリセットが働かない場合があります。ハードウェアモードの方が、ハードウェア上で監視するため、ソフトウェアに比べてより幅広い外乱や異常に対応することができます。
ソフトウェアモードとハードウェアモードの切り替えはCubeMX上ではできません。オプションバイトにアクセスして変更する必要があります。コード上でオプションバイトを操作する方法もありますが、簡単な方法は書き込みソフトウェアでオプションバイトを操作する方法です。
STLinkUtilityの場合はTarget→OptionBytesから下記の画面を表示させて、IWDG_SWのチェックを外すことでハードウェアモードになります。MPUのシリーズによって項目名が多少異なりますが、デフォルトがソフトウェアモードになっており、チェックを外すとハードウェアモードになる点では同じです。チェックを外してApplyをクリックすると設定がMPUに反映されます。
STM32CubeProgrammerの場合はOB(OptionBytes)のUserConfigurationから設定変更可能です。チェックを外してApplyをクリックすると設定がMPUに反映されます。
■IWDG注意点A
IWDGはソフトウェアモードでは問題になりませんが、ハードウェアモードの場合、外乱により強い一方で特に注意が必要となります。一度、オプションバイトを操作してハードウェアモードにした場合、再度、オプションバイトを元に戻さない限り、ファームウェアを書き換えてもハードウェアモードが維持されます。このハードウェアモードの状態では必ずIWDG初期化関数HAL_IWDG_Initとリフレッシュ関数HAL_IWDG_Refresh関数が入ったファームが必要です。
コード上にIWDG初期化関数HAL_IWDG_Initとリフレッシュ関数HAL_IWDG_Refreshがない場合、起動直後にIWDGによるリセットが連続で発生し、コードが停止します。例えば、ハードウェアモードを有効化したMPUに対してIWDGを有効化する前の古いファームを書き込むとデバッガや入出力が停止して、応答が何もなくなり、MPUが文鎮化した状態になります。このような場合はコード上にIWDG初期化関数とリフレッシュ関数があるファームを書き込むか、オプションバイトを操作して、ソフトウェアモードに切り替えてから再度、ファームを書き込むことでまた元通りに正常に動くようになります。これらのことから、ファームを頻繁に入れ替えたりする場合は当面、ソフトウェアモードで運用した方が利便性が高いです。
今回はSTM32マイコンのIWDGについて紹介しました。特に注意点AについてはIWDGをハードウェアモードにしたことを忘れて、別のファームを書き込んだ際に全くマイコンが動作せず、何が原因か悩んだ挙句、IWDGがハードウェアモードだったことが原因ということがありました。オプションバイトはファームと独立しており、余計にややこしくなるため、注意が必要だと分かりました。数か月後の自身に知らせるためにもMPUに「IWDGハードウェア」の印を貼っておいた方が無難だと実感しました。
posted by Crescent at 00:00|
Comment(0)
|
組込ソフト
|

|