1
概述
系統看門狗定時器(System WatchDog Timer)通常用于嵌入式系統,可以有效的防止軟件錯誤、系統死鎖、篡改以及意外行為,幫助維護健康和安全的系統。
在 AMD Versal 自適應 SoC中,分別在 FPD(Full power domain)和 LPD(Low power domain)中各自集成了一個 SWDT 用來幫助客戶開發穩定的系統。其整體結構框圖如下:
從框圖中可以看到 SWDT 中包含有 2 種不同的定時器,分別是窗口模式的定時器(Windowed WatchDog Timer)和通用模式的定時器(Generic WatchDog Timer)。
注意在使用 SWDT 之前,需要確認 LPD 和 FPD 的系統級別的復位是否已經釋放,例如CRL.RST_LPD_SWDT 寄存器和CRF.RST_FPD_SWDT 寄存器。
2
通用模式定時器
通用模式定時器一共包含三個相關寄存器,分別是 G_Refresh,G_Offset 和 G_CSR 寄存器。
G_CSR 寄存器用來使能通用定時器模式,以及反饋狀態。
G_Offset 寄存器用來配置定時的周期時間。
G_Refresh 寄存器用來刷新定時器,即喂狗。
工作模式如下圖所示:
通用模式工作時最多會有兩個定時周期,當計數器計時達到第一個定時周期后,定時器會產生一個定時中斷。然后計數器會繼續計時,當計數器計時到達第二個定時周期后,定時器會產生一個超時中斷。在定時器的計數器到達第二個定時周期之前,軟件程序都可以通過 G_Refresh 寄存器刷新計數器計數值,從頭開始計時。
可以看到通用模式使用起來非常簡單。但是有一點需要注意,通用模式的定時器在超時發生之后,并不會輸出系統級錯誤到 PSM 的錯誤堆棧中,即不會產生系統錯誤,從而使得 PSM 或者 PLM 程序固件執行相應的系統層面的操作。
3
窗口模式定時器
窗口模式定時器功能較為全面,功能充分考慮了系統安全的各種應用場景。
窗口模式基本流程如上圖所示,一共可以分成三個部分,分別是第一窗口(First Window),第二窗口(Second Window)和二次序列時間(Second Sequence Timer)。一共涉及到5個寄存器,分別是使能與狀態寄存器(Enable_and_Status),功能控制寄存器(Funct_Ctrl),第一窗口時間寄存器(First_Wind),第二窗口時間寄存器(Second_Wind)和二次序列時間寄存器(SST_COUNT)。
第一窗口時間是一個封閉的時間段,在這個時間段內應用程序是不能對看門狗進行刷新和復位操作。如果這個時間段內對看門狗進行了刷新喂狗或是復位看門狗操作,那么就會產生一個錯誤事件,從而輸出一個系統錯誤到 PSM 和 PMC。這樣設計是考慮到用戶既然配置看門狗,那么就一定是要讓看門狗起到作用,所以設置了一個保護看門狗的時間,用來防范系統的異常操作。
當第一窗口保護期到了之后,看門狗會產生一個中斷通知系統。這個中斷的產生時間可以通過配置功能控制寄存器(Funct_Ctrl)中的 BSS 和 SBC 位設定。應用程序可以在接收到中斷后刷新看門狗,或者復位/停止/重新配置看門狗。
如果應用程序在第二窗口沒有對看門狗有任何處理,計時器超過了用戶設定的第二窗口時間,這個時候會產生超時中斷。如果在看門狗運行之前使能了二次序列時間,那么看門狗此時不會立刻產生系統錯誤,而是等到二次序列時間計時結束之后再產生。這樣應用程序就可以有時間去記錄一些狀態,日志或是處理某些外設等操作,便于后續排查問題或是增加系統的安全性。但是要是沒有配置這個二次序列時間,那么看門狗在第二窗口時間超時之后會立刻產生錯誤事件,并發送系統錯誤到 PSM 和 PMC。
以上就是看門狗窗口模式下最基礎的功能。總的來說,應用程序只有在看門狗處于第二窗口時間段內,才能對看門狗進行刷新喂狗,復位/停止/重新配置操作,否則就會產生錯誤事件,并發送系統錯誤到 PSM 和 PMC。另外,需要注意以下兩點:
第一個窗口的時間可以設置為 0,從而跳過保護周期。
在看門狗運行的任意窗口期間,如果通過 LPD 和 FPD 的系統級別的復位對整個看門狗進行復位,不會產生額外中斷以及系統錯誤。
為了進一步提高看門狗的安全性,窗口模式下還提供了兩種防止系統異常操作的進階功能。它們是簽名方式(PSM)和問答方式(Q&A),如下圖紅框標注的功能。
1. 簽名方式(PSM)
在啟動看門狗計時之前,用戶需要先在 Task_Sig0 寄存器中保存一個簽名。然后應用程序在第二窗口刷新看門狗之前,先要對 Task_Sig1 寄存器寫入和 Task_Sig0 一樣的簽名。當看門狗被正常刷新之后,會先去比較這兩個簽名是否一致,如果不一致就會立刻產生一個錯誤事件,并產生系統錯誤輸出 PSM 和 PMC。
2. 問答方式(Q&A)
在運行看門狗之前,用戶需要先在 Token_fb 寄存器中設定種子(seed)和反饋(FeedBack)值,這兩個值和使能與狀態寄存器(Enable_and_Status)中 ACNT 位會被用來計算寫入 Token_Resp 寄存器的值。算法如下表所示。Token 對應種子值,Count 對應 ACNT 值,Feedback Value 對應反饋值。
舉個例子,如果反饋(Feedback)的值是 3,那么應答(response)的每一位的計算方法就需要參考上面列表中的最后一列"11"來進行。那么 bit0 的值就是將 ACNT 的 bit1 值,異或種子(seed) bit 2 的值,再異或種子(seed)的 bit 3 的值。當應答 8 個位的值都計算好之后,寫入 Token_resp 寄存器中即完成了一次問答。
當用戶配置好看門狗功能設置,各個窗口時間以及問答種子和反饋值后,需要通過執行第一次應答(response)以后,看門狗才會開始啟動計時。并且在第一窗口時間內,用戶需要完成第二次和第三次應答,間隔的時間可以由用戶自行來控制。當這兩次應答完成后,即使第一窗口時間沒有計完,也會立即進入第二窗口進行計時。接著,用戶需要在第二窗口時間內完成第四次應答。一旦第四次應答在第二窗口完成,即使第二窗口時間沒有計完,也會立即返回到第一窗口,重新開始計時。但是,如果在第二窗口內沒有完成第四次應答,那么同樣會回到第一窗口重新計時,不過接下來的應答還是需要按照第四次應答去完成。
在這個復雜的過程中,可以允許有限次數的應答失敗,失敗次數保存在使能與狀態寄存器(Enable_and_Status)的失敗計數位中(Fail count)。也就是說每當失敗一次,失敗計數就會增加 1,每應答成功一次失敗計數就會減 1。當失敗次數累計到 7 次以后,那么再出現失敗,就會產生一個錯誤事件,并發送系統錯誤輸出到 PSM 和 PMC。
4
總結
Vesal 器件中的看門狗模塊提供了豐富的功能,從應用簡易程度和安全性方面層層遞進,讓用戶根據不同的應用場景來實現對自己系統的保護。
審核編輯:劉清
-
amd
+關注
關注
25文章
5539瀏覽量
135542 -
寄存器
+關注
關注
31文章
5397瀏覽量
122650 -
嵌入式系統
+關注
關注
41文章
3661瀏覽量
130566 -
soc
+關注
關注
38文章
4295瀏覽量
220956 -
SoC芯片
+關注
關注
1文章
624瀏覽量
35516 -
PSM
+關注
關注
1文章
43瀏覽量
13656 -
看門狗定時器
+關注
關注
0文章
64瀏覽量
16361
原文標題:開發者分享|SWDT 在 AMD Versal? Adaptive SoC 中的應用
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
AMD Versal SoC刷新邊緣AI性能,單芯片方案驅動嵌入式系統

CSU SWDT、LPD SWDT和FPD SWDT的關系與使用
使用QEMU啟動Versal VCK190
AMD Versal SoC全新升級邊緣AI性能,單芯片方案驅動嵌入式系統

AMD發布第二代Versal自適應SoC,AI嵌入式領域再提速
AMD Versal? Adaptive SoC CPM PCIE PIO EP設計CED示例

ALINX VERSAL SOM產品介紹
AMD Versal自適應SoC CPM5 QDMA的Tandem PCIe啟動流程介紹

AMD推出第二代Versal Premium系列
AMD Vivado Design Suite 2024.2全新推出
如何通過PMC_GPIO喚醒AMD Versal? Adaptive SoC Linux系統

AMD Versal自適應SoC器件Advanced Flow概覽(上)

AMD Versal自適應SoC器件Advanced Flow概覽(下)

第二代AMD Versal Premium系列SoC滿足各種CXL應用需求

評論