1. 芯片內部看門狗
內部看門狗通常為芯片內部某個特殊定時器,用戶可以通過手動初始化、設置timeout、使能、失能該看門狗,然后在線程中定時去喂狗,從而達到檢測應用程序跑飛、跑死的情況。
在Linux系統中,可以在uboot中打開看么狗,把喂狗時間設置長度超過kernel啟動時間,從而當kernel正常啟動后,喂狗任務由uboot交給了應用程序,這樣達到了監控kernel啟動bootsup和應用程序的雙重功效。
2. 芯片外部看門狗
外部看門狗具有獨立性,可以更加安全的確保芯片的正常運行。
外部看門狗如何工作?
外部看門狗非常簡單,沒有所謂的初始化、使能等等,就是電源、地、WDI喂狗引腳、RESET引腳,當WDI每次檢測到邊沿跳變,則重新置位看門狗計數,如果在超出timeout,則拉低RESET引腳一段時間,周而復始。
那外部看門狗的使用也帶來一些問題:
- 在超長啟動時間的系統中,如何確保外部看門狗的喂狗
- 在Uboot中將內部看門狗設置1~3min喂狗時間以確保kernel啟動過程出現問題,在系統啟動完成后,重新交由應用程序喂狗,且喂狗周期根據線程時長決定
- 不做特殊喂狗處理,uboot命令行期間將會出現看門狗超時
- 外部看門狗,則可以在硬件電路中將具有pwm功能的IO口接至WDI引腳,在uboot中使能IO口的pwm功能,在kernel加載驅動期間,可以不再對此IO進行操作,也可以重新再kernel中使能該IO腳的PWM功能,但是必須在驅動probe階段,如果交由應用程序,中間時間可能無法喂狗,導致重啟。
- 在ICT、FCT、程序燒錄階段中,如何確保這些動作不被外部看門狗打斷,循環復位
解決思路:
在電路設計中,針對第二個問題,可以設計電路的JTAG中Reset的優先級最高,當Jtag插上,程序不運行,Reset也就失效了。
增加跳線,在生產階段,將跳線跳開,完畢后,將跳線跳上,但是此法增加Factory階段的復雜度。
ISP:In-system programing 在線系統編程; IAP: In-application programing 在應用編程; ICP: In-circuit programing 在電路編程。ISP和IAP都是在板進行編程,也就是不用拆除芯片。ISP的意思就是應用程序本身有和PC上位機之間的接口,當上位機有更新程序的需求時,應用程序會進入更新程序的邏輯,知道更新結束。而IAP則是BootLoader+Application的結構,在Boot階段,如果接收到上位機的更新需求,則進行更新,更新結束跳到application。
Warm Reset:
Code Reset:
