在上一篇中已經介紹了 WDG 看門狗計時器的用途以及 IWDG 與 WWDG 的差別,也示範了 IWDG 的基本用法。
這一篇要接著介紹 WWDG 窗口看門狗的基本概念。
在啓用 WWDG 時有兩種情況會造成它觸發 System Reset:
0x40
。Conditional reset
- Reset (if watchdog activated) when the downcounter value becomes less than 0x40
- Reset (if watchdog activated) if the downcounter is reloaded outside the window
條件 1 就和 IWDG 是類似的情況,但它不是下數到 0x00
,而是 0x40
。這也是 Window 的下限,是不能調整的。
條件 2 是 WWDG 與 IWDG 最大的不同,如果還沒到 Window 內就 Refresh 的話也會觸發 Reset。這也是 Window 的上限,可以由使用者調整。
▲ WWDG 的 Window 示意圖。取自 RM0390 Rev 6 P.648。
在上圖中,WWDG 下數計數器的當前計數值是 T[6:0],而 Window 的值是 W[6:0](上限)。
透過圖可以看出,T[6:0] 會隨時間不斷下數,當數到 0x3F
時(0x40
後,也就是 T6 位元從 1
變 0
)會觸發 Reset(條件 1)。
但是在 T[6:0] > W[6:0] 時是在 Window 外,是「Refresh not allowed」的區段,在這個區段內進行 Refresh 也會觸發 Reset(條件 2)。
▲ WWDG 的系統方塊圖。取自 RM0390 Rev 6 P.647。
▲ WWDG 的 Timeout 計算公式。取自 RM0390 Rev 6 P.648。
由於 WWDG 位於 APB1 底下,其時鐘會先經過一個固定除 4096 的除頻器,再經過一個可程式設定的 WDG 預除頻器。而計算公式也是相當簡單好理解,來看一下範例:
▲ WWDG 的 Timeout 計算範例(結果錯誤)。取自 RM0390 Rev 6 P.649。
如果你真的照著上面的數字去按計算機的話,會發現結果不是 21.85,而是 87.38 ms。
爲什麼?單純是因爲官方文件打錯了,在 2021 年此問題就被提出,官方看起來有收到此問題了,並有說後續更新文件時會修正。
可能有些人會覺得爲什麼計算公式中是 T[5:0] 而不是 T[6:0],因爲第 6 位元 T6 實際上是用來指示是否該進行 Reset 的 Flag。
當 T[6:0] 的值從 0x40
變成 0x3F
——也就是從 0100 0000b
變成 0011 1111b
——時,T6 位元從 1
變成 0
,就會觸發 Reset。
這部分可以參考上面的 WWDG 的系統方塊圖, T6 位反相後接到一個 OR 閘,而此 OR 閘的輸出就是 Reset。所以實際的計數公式只有 T0~T5,不包含 T6。
這次接續 IWDG 的內容,繼續介紹 WWDG 的用法。
相比於 IWDG,WWDG 多了 Windows 的概念,所以在計算 Timeout 時會多一個要計算的值,但計算的過程相信不會太複雜。
本文同步發表於我的 Blog。