點擊上方藍字談思實驗室
獲取更多汽車網絡安全資訊

01
看門狗的概念
看門狗(WDT)是一個定時器,開啟看門狗定時器之后(比如定時100ms),在單片機程序中每隔一段時間(小于100ms)就要"喂狗"一次,即將看門狗定時器清零。這樣做的用處是,一旦單片機程序跑飛,沒有在定時的時間之內去喂狗,那么定時達到200ms時,看門狗自動將單片機復位。
在由單片機構成的微型計算機系統中,由于單片機的工作常常會受到來自外界電磁場的干擾,造成程序的跑飛,而陷入死循環,程序的正常運行被打斷,由單片機控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的后果,所以出于對單片機運行狀態進行實時監測的考慮,便產生了一種專門用于監測單片機程序運行狀態的芯片,俗稱“看門狗”(watchdog)。
根據功能不同,通常分為獨立看門狗和窗口看門狗。因為獨立看門狗受工作場合因素的影響會多一點,僅適用于一些對時間精度要求較低的場合;窗口看門狗適用于對時間精度高的場合。
02
獨立看門狗(IWDG)
2.1 IWDG簡介
獨立看門狗本質上是一個定時器,這個定時器有一個輸出端,可以輸出復位信號。該定時器是一個 12 位的遞減計數器,當計數器的值減到 0 的時候,就會產生一個復位信號。如果在計數沒減到 0 之前,重置計數器的值的話,那么就不會產生復位信號,這個動作我們稱為喂狗。 看門狗功能由 VDD 電壓域供電,在停止模式和待機模式下仍然可以工作。

從 IWDG 框圖整體認知就是, IWDG 有一個輸入(時鐘 LSI ),經過一個 8 位的可編程預分頻器提供時鐘給一個 12 位遞減計數器,滿足條件就會輸出一個復位信號。STM32F103 的獨立看門狗由內部專門的 40Khz 低速時鐘(LSI)驅動,即使主時鐘發生故障,它也仍然有效。這里需要注意獨立看門狗的時鐘是一個內部 RC 時鐘,所以并不是準確的40Khz,而是在 30~60Khz 之間的一個可變化的時鐘,只是我們在估算的時候,以 40Khz 的頻率來計算,看門狗對時間的要求不是很精確,所以,時鐘有些偏差,都是可以接受的。
2.2 IWDG寄存器
IDWG主要用到三個寄存器,一個預分頻寄存器(IWDG_PR),鍵寄存器(IWDG_KR),重載寄存器(IWDG_RLR)。
鍵寄存器(IWDG_KR)
鍵寄存器是獨立看門狗的控制寄存器。下面是使用其的規則:
寫入0xCCCC,開始啟用獨立看門狗,計數器開始從復位值0xFFF遞減計數,當計數器計數到0x000時開始產生復位信號。
寫入0xAAAA,IWDG_RLR中的值會被加載到計數器中從而避免復位。
需要先寫入0x5555,IWDG_PR和IWDG_RLR的值才能修改,如果將其他值寫入這個寄存器將會打亂操作順序,寄存器將會重新被保護。
預分頻寄存器(IWDG_PR)

該寄存器用來設置看門狗時鐘( LSI )的分頻系數,最低為 4 ,最高位 256 ,該寄存器是一個 32 位的寄存器,但是我們只用了最低 3 位,其他都是保留位。
重載寄存器(IWDG_RLR)

該寄存器用來保存重裝載到計數器中的值。該寄存器也是一個 32 位寄存器,只有低 12 位 是有效的。
2.3 獨立看門狗的溢出時間計算


rlr為看門狗時鐘重裝載值。
比如我們設定的per值為4,則預分頻系數為64,stm32的看門狗時鐘為為40khz,如果需要得到溢出時間為1s,則可以算出rlr為625,這時候只要在1s內寫入0xAAAA到IWDG_KR,就不會導致看門狗復位。這里需要提醒大家的是,看門狗的時鐘不是準確的 40Khz,所以在喂狗的時候,最好不要太晚了,否則,有可能發生看門狗復位。
2.4 獨立看門狗的配置步驟
取消寄存器保護,向鍵寄存器寫入0x5555, 然后設置預分頻系數和重裝載值。
在鍵寄存器寫入0xCCCC,開始啟動看門狗,計數器從0xFFF開始計數。
在溢出時間內重載計數值喂狗,把0xAAAA寫入到鍵寄存器,從而觸發計數器重載也就是喂狗,否則發生復位。
03
窗口看門狗(WWDG)
3.1 WWDG簡介
窗口看門狗(WWDG)通常被用來監測由外部干擾或不可預見的邏輯條件造成的應用程序背離正常的運行序列而產生的軟件故障。窗口看門狗跟獨立看門狗一樣,也是一個遞減計數器不同的是它們的復位條件不一樣。窗口看門狗產生復位信號有兩個條件:
1) 當遞減計數器的數值減到0x40時還不喂狗的時候,到下一個計數0X3F就會產生復位,這個值稱為窗口的下限值,這個是固定的值,不能改變。
2) 當喂狗的時候如果計數值大于看門狗配置寄存器WWDF_CFR的低七位數值,也會產生復位,這個值叫窗口的上限,上限值由用戶設置。,這個數值要大于0x40。
3.2 WWDG框圖

3.3 WWDG寄存器
控制寄存器(WWDG_CR)

WDGA 位則是看門狗的激活位,該位由軟件置 1 ,啟動看門狗,并且一定要注意的是該位一旦設置,就只能在硬件復位后才能清零了。其中 T[6 : 0] 用來存儲看門狗的計數器的值,當計數器的值從0x40變為0x3F的時候將產生看門狗復位。
配置寄存器(WWDG_CFR)

該寄存器中的 EWI 位是提前喚醒中斷, 如果該位置 1 ,當遞減計數器等于 0x40 時產生提前喚醒中斷,我們就可以及時喂狗以避免 WWDG 復位。 因此,我們一般都會用該位來設置中斷,當窗口看門狗的計數器值減到 0X40 的時候,如果該位設置,并開啟了中斷,則會產生中斷,我們可以在中斷里面向 WWDG_CR 重新寫入計數器的值,來達到喂狗的目的。注意這里在進入中斷后,必須在不大于 1 個窗口看門狗計數周期的時間。
狀態寄存器(WWDG_SR)
該寄存器用來記錄當前是否有提前喚醒的標志。該寄存器僅有位 0 有效,其他都是保留位。
當計數器值達到 0x40 時,此位由硬件置 1。它必須通過軟件寫 0 來清除。對此位寫 1 無效。即使中斷未被使能,在計數器的值達到 0x40 的時候,此位也會被置 1 。

結合寄存器分析窗口看門狗的上限值和下限值。 W[6:0] 是 WWDG_CFR 寄存器的低 7 位,用于與遞減計數器 T[6:0] 比較的窗口值,也就是我們說的上限值,由用戶設置。 0x40 就是下限值,遞減計數器達到這個值就會產生復位。 T6 位就是 WWDG_CR 寄存器的位 6 ,即遞減計數器 T[6:0] 的最高位。
上限值 W[6:0] 是由用戶自己設置,但是一定要確保大于 0x40 ,否則就不存在上圖的窗口了,下限值 0x40 是固定的,不可修改。
知道了窗口看門狗的工作原理,下面學習如何計算窗口看門狗的超時公式:


3.4 窗口看門狗配置步驟
使能WWDG時鐘,WWDG時鐘與IWDG不同,IWDG有自己獨立的40kHZ時鐘,而WWDG使用的是PCLK1的時鐘,需要先使能時鐘。
設置窗口值,分頻數和計數器初始值
開啟WWDG,通過設置控制寄存器的WDGA(bit7)位為1實現開啟窗口看門狗
使能中斷通道和配置優先級(如果開啟了WWDG中斷),如果在配置寄存器中將EWI 位置1則需要開啟中斷函數使能并設置相應優先級,并編寫相應的中斷服務函數。
在相應的窗口時間內喂狗,如果使能了中斷可以在中斷回調函數中進行喂狗,但是喂狗要快,否則當窗口看門狗計數器值減到 0X3F 的時候,就會引起軟復位了。
04
獨立看門狗和窗口看門狗的區別
獨立看門狗沒有中斷,窗口看門狗有中斷。獨立看門狗沒有中斷功能,只要在計數器減到0(下限)之前,重新裝載計數器的值,就不會產生復位,窗口看門狗有中斷,這個中斷的作用是在計數器達到下限0x40的時候,產生中斷,讓你喂狗;如果你不喂狗,計數器的值變為0x3f的時候,將會產生系統復位;即使是喂狗,也應該在中斷里快速喂狗,要不時間長了計數器減1也會變成0x3f產生復位。
窗口看門狗有上限和下限值,獨立看門狗只有下限。窗口看門狗還有一個上限值,這個值如果大于計數器的初始值,那么就沒有任何作用了;這個值小于計數器初始值的時候,當計數器的值大于上限值時你對計數器進行裝載,將會產生復位,只有在計數器減到小于上限值時,你才能重新裝載計數器。意思就是說只有計數器的值在上限值和下限值之間你才能裝載計數器,否則就會產生系統復位,當上限值小于下限值,也沒有意義。
獨立看門狗是12位遞減,獨立看門狗從0xFFF開始遞減,窗口看門狗的初始值是七位遞減,初始值需要自己設置,最大為0x7F.
獨立看門狗使用的是內部大約為40kHZ的RC振蕩器,窗口看門狗使用的是系統時鐘APB1CLK。
獨立看門狗一般用于避免程序跑飛或者死循環,窗口看門狗避免程序不按預定邏輯執行,比如先于理想環境完成,或者后于極限時間超時。
05
常見面經
1. 什么是嵌入式系統中的看門狗定時器(Watchdog Timer)?
看門狗本質是一個定時器電路,一般有一個輸入叫“喂狗”,一個輸出連接到MCU的復位端。在MCU正常工作的時候,每隔一段時間輸出一個信號到喂狗端,給看門狗電路清零,如果在超過規定的時間不喂狗,WDT定時超時,就會回給一個復位信號到達MCU,使MCU復位,MCU認為系統故障,會進入中斷處理程序或強制系統復位。
2. 看門狗的作用是什么?
答:在系統跑飛或者系統運行錯誤后無法喂狗時,看門狗超時重啟系統,恢復正常程序邏輯。
3. 看門狗的原理是什么?
看門狗的工作原理:在整個系統運行以后就啟動了看門狗的計數器,此時看門狗就開始自動計時,如果到達了一定的時間還不去給它清零,看門狗計數器就會溢出從而引起看門狗中斷,造成系統的復位。
4. 窗口看門狗和獨立看門狗的區別?
獨立看門狗沒有中斷,窗口看門狗有中斷。窗口看門狗可以通過設置配置寄存器的提前喚醒中斷位實現在計數器減少到0x40時產生中斷,可以通過這個中斷實現按時喂狗。
獨立看門狗有軟件硬件之分,窗口看門狗只能軟件控制。
窗口看門狗有上限和下限值,獨立看門狗只有下限。獨立看門狗計數器減少為0會產生復位,窗口看門狗計數器在窗口上限值(自己設置)和下限值(0x40)內喂狗就不會產生復位。
獨立看門狗是12位遞減,獨立看門狗從0xFFF開始遞減,窗口看門狗的初始值是七位遞減,初始值需要自己設置,最大為0x7F.
獨立看門狗使用的是內部大約為40kHZ的RC振蕩器,窗口看門狗使用的是系統時APB1CLK。
獨立看門狗一般用于避免程序跑飛或者死循環,窗口看門狗避免程序不按預定邏輯執行,比如先于理想環境完成,或者后于極限時間超時。
來源:
https://blog.csdn.net/fg247778718/article/details/138580080
end

精品活動推薦




AutoSec系列沙龍



專業社群

部分入群專家來自:
新勢力車企:
特斯拉、合眾新能源-哪吒、理想、極氪、小米、賓理汽車、極越、零跑汽車、阿維塔汽車、智己汽車、小鵬、嵐圖汽車、蔚來汽車、吉祥汽車、賽力斯......
外資傳統主流車企代表:
大眾中國、大眾酷翼、奧迪汽車、寶馬、福特、戴姆勒-奔馳、通用、保時捷、沃爾沃、現代汽車、日產汽車、捷豹路虎、斯堪尼亞......
內資傳統主流車企:
吉利汽車、上汽乘用車、長城汽車、上汽大眾、長安汽車、北京汽車、東風汽車、廣汽、比亞迪、一汽集團、一汽解放、東風商用、上汽商用......
全球領先一級供應商:
博世、大陸集團、聯合汽車電子、安波福、采埃孚、科世達、舍弗勒、霍尼韋爾、大疆、日立、哈曼、華為、百度、聯想、聯發科、普瑞均勝、德賽西威、蜂巢轉向、均聯智行、武漢光庭、星紀魅族、中車集團、贏徹科技、濰柴集團、地平線、紫光同芯、字節跳動、......
二級供應商(500+以上):
Upstream、ETAS、Synopsys、NXP、TUV、上海軟件中心、Deloitte、奇安信、為辰信安、云馳未來、信大捷安、信長城、澤鹿安全、紐創信安、復旦微電子、天融信、奇虎360、中汽中心、中國汽研、上海汽檢、軟安科技、浙江大學......
人員占比

公司類型占比

文章
關于涉嫌仿冒AutoSec會議品牌的律師聲明
一文帶你了解智能汽車車載網絡通信安全架構
網絡安全:TARA方法、工具與案例
汽車數據安全合規重點分析
淺析汽車芯片信息安全之安全啟動
域集中式架構的汽車車載通信安全方案探究
系統安全架構之車輛網絡安全架構
車聯網中的隱私保護問題
智能網聯汽車網絡安全技術研究
AUTOSAR 信息安全框架和關鍵技術分析
AUTOSAR 信息安全機制有哪些?
信息安全的底層機制
汽車網絡安全
Autosar硬件安全模塊HSM的使用
首發!小米雷軍兩會上就汽車數據安全問題建言:關于構建完善汽車數據安全管理體系的建議