大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是系統看門狗WDOG1在i.MXRT1xxx系統啟動中的應用及影響。
軟件看門狗模塊(WDOG)在 MCU 應用里可以說是非常基礎的功能模塊。對于一個產品級的應用程序,如果它沒有使能主控內部的看門狗模塊,一般都不能算是一個合格的軟件設計。有的時候,硬件工程師覺得軟件看門狗不可靠,還會在板級設計里再加入外部看門狗電路。總之看門狗對于產品工作穩定性具有很重要的意義。
最近有一個 i.MXRT 客戶注意到了芯片手冊 System Boot 章節里提及了 WDOG 應用,想使能這個功能,并且要確認該功能真實生效以及評估對后續應用程序的影響。借助客戶的問題,我們來細聊下這個話題。
一、WDOG模塊簡介
首先我們來了解一下 i.MXRT1xxx 系列內部的 WDOG 模塊,在i.MXRT1xxx 內部 WDOG 模塊一共有三個(WDOG1/2/3),雖然 WDOG 本質上就是個特殊功能定時器,但因為芯片設計時為其賦予的超時觸發行為不同,所以其應用場合并不一樣。
1.1 系統看門狗WDOG1/2
WDOG1 和 WDOG2 屬于系統看門狗,前者用于系統級復位(產生 WDOG_RESET_B_DEB 信號給 SRC 模塊)防止系統發生異常,后者用于系統 SNVS 域安全警報(不會產生復位效果)。不過從模塊寄存器角度,WDOG1 和 WDOG2 是一樣的,因此除了超時觸發行為外,它們其余方面特性是一樣的:
1. 模塊內部兩個計數時鐘源是固定的,來自 ipg_clk_32k 以及 anatop_xtal32k_clk 。 2. 模塊內部 8bit 定時器(Time-Out Counter)用于產生 WDOG_RESET_B_DEB 復位信號,計時精度固定為 0.5 秒,超時可設范圍為 0.5 秒到 128 秒。 3. 模塊內部定時器(Power Down Counter)用于產生對外輸出的復位信號 WDOG_B,其超時時間固定為 16 秒。 4. 模塊對外輸出的信號最多有三個: WDOG_RST_B_DEB、WDOG_B、WDOG_ANY(僅 WDOG1)。 5. 模塊使能信號 WDOGx->WCR[WDE] 可多次設置(并不是一次復位期間僅可 write one once)。 6. 模塊配置寄存器與定時器計數值可直接修改。 7. 模塊 Time-Out Counter 默認是關閉的,Power Down Counter 默認是開啟的。
1.2 內核看門狗WDOG3(4)
WDOG3 有時候又叫 RTWDOG(對于 RT1170,還存在用于默認 CM4 從核的 WDOG4),屬于內核看門狗,主要用于復位內核,防止程序陷入死循環。其模塊寄存器跟 WDOG1/2 完全不同,更接近于一般的定時器模塊設計:
1. 模塊內部計數時鐘源有四種選擇,Bus clock / LPO clock / INTCLK / ERCLK 。 2. 模塊內部 16bit 定時器(Time-Out Counter)用于產生內核復位信號。 3. 模塊使能信號 WDOGx->CS[EN] 可多次設置(但是其屬于 write-once 屬性)。 4. 模塊配置寄存器 write-once bits 與定時器計數值需要特殊 unlock 時序才可以修改。 5. 模塊 Time-Out Counter 默認是開啟的。
二、系統ROM里對WDOG的使用
i.MXRT1xxx 系列芯片上電默認都是先執行系統 BootROM,在 BootROM 里會有對看門狗的處理。默認情況下 BootROM 是不啟用看門狗做代碼執行守護的,只有當用戶燒寫了指定的 eFuse 位,看門狗功能才會生效。BootROM 并沒有使用默認開啟的 WDOG3,而是將其關閉并打開了 WDOG1 作為看門狗。
2.1 看門狗使能
i.MXRT10xx 系列芯片 BootROM 看門狗在 eFuse 里配置如下,包含 eFuse 0x460[21] 使能位與 eFuse 0x6D0[15:13] 超時時間設置。
i.MXRT1160/1170 芯片 BootROM 看門狗在 eFuse 里配置如下,包含 eFuse 0x9A0[15] 使能位與 eFuse 0x9B0[2:0] 超時時間設置,以及多了 eFuse 0x9B0[5:3] 關于 WDOG_B 外部信號腳選擇設置。
當 Fuse 里使能了看門狗功能后,BootROM 對看門狗模塊的配置如下:
voidROM_WDOG_init(void) { uint16_ttimeout=get_timeout_value_from_fuse(); WDOG1->WCR=(uint16_t)(WDOG_WCR_WT(timeout) |WDOG_WCR_WDW_MASK |WDOG_WCR_SRE_MASK |WDOG_WCR_WDA_MASK |WDOG_WCR_WDBG_MASK |WDOG_WCR_SRS_MASK); WDOG1->WCR|=(uint16_t)WDOG_WCR_WDE_MASK; }
2.2 看門狗作用
對于 i.MXRT10xx 系列,BootROM 看門狗主要用于 Serial Downloader 分支程序下(SDP 模式 BT_MODE = 2'b01,或者 Device Boot 模式 BT_MODE = 2'bx0 下啟動失敗進入了 Serial Downloader)檢測與主機通訊情況,只要在設置的超時時間里沒有通信交互行為,看門狗就會復位整個系統(并不是單次通信就可以的,任意超時時間內都得保持交互)。如果在 Device Boot 模式下能夠正常啟動程序,則看門狗不會被使能。
對于 i.MXRT1160/1170 系列,BootROM 看門狗不僅在 Serial Downloader 分支程序中有效,其在 Device Boot 模式下(BT_MODE = 2'bx0)也同樣被使能了,這樣做主要有兩個用意:
用意1: 如果因板級電路干擾導致首次啟動程序失敗,BootROM 正常是直接跳轉到了 SDP 模式不會再做啟動程序行為。但是使能了看門狗,則在 SDP 模式下等待超時時間后系統復位會重新嘗試啟動程序,這樣不斷嘗試直到板級干擾消失。
用意2: 如果啟動程序成功,BootROM 會直接跳轉到目標應用程序,但無法檢驗目標程序是否能夠正常執行。但是使能了看門狗,如果應用程序不對看門狗做有效處理,系統還是會復位回來,這樣相當于做了應用程序是否執行的驗證。
三、WDOG使能后對i.MXRT開發的影響
現在回到文章開頭提到的客戶問題,如何判斷 BootROM 中 WDOG 已經生效了,這個其實特別簡單,在 SDP 模式下插上 USB 線,在資源管理器里觀察是不是有 HID 設備每隔一段時間就會重新枚舉一次,沒錯就是 WDOG 搗的鬼。
那么對于應用程序的開發,有什么注意事項呢?對于 i.MXRT10xx 其實沒有任何影響,而對于 i.MXRT1160/1170,則必須在應用程序里增加對 WDOG1 的處理。在恩智浦提供的頭文件 system_MIMXRT1xxx.c 文件里 SystemInit() 函數中其實有關于看門狗相關代碼,默認是將全部的看門狗都關一遍(DISABLE_WDOG=1),這部分代碼對于 i.MXRT10xx 程序是可以不做的,但是對于 i.MXRT1160/1170 就必須要做了。
至此,系統看門狗WDOG1在i.MXRT1xxx系統啟動中的應用及影響痞子衡便介紹完畢了,掌聲在哪里~~~
原文標題:系統看門狗WDOG1在i.MXRT系統啟動中的應用及影響
文章出處:【微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。
-
模塊
+關注
關注
7文章
2674瀏覽量
47350 -
看門狗
+關注
關注
10文章
559瀏覽量
70754 -
寄存器
+關注
關注
31文章
5325瀏覽量
120052 -
應用程序
+關注
關注
37文章
3245瀏覽量
57615
原文標題:系統看門狗WDOG1在i.MXRT系統啟動中的應用及影響
文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論