EC - Watchdog

Watchdog

Watchdog 是用來偵測 Firmware 是否有正常的工作,沒有因為中斷佔用或者 Dead Loop 而被停止運作,在啟動 Watchdog 之後,Firmware 也需配合修改,在 Watchdog Timeout 之前,定時的 Touch Watchdog (Clear Watchdog Timer).若沒有定時 Touch Watdog 造成 Watchdog Timeout,EC 就會被 Watchdog Reset ,核心處理器被重置,Firmware 由程式的起始點開始執行。

Watchdog的方塊圖如下:

Watchdog Module 是由 EC 系統外掛或內含的 32KHz 或更低頻的振盪器做為  Module 的基本工作頻率,經由一5個位元的計時器 Timer 0,做為Firmware 1.0ms的計時器,產生中斷,提供給Firmware 週期性偵察裝置或事件的工作時間,Timer0 的輸出訊號,再經由16位元的計時器由 T0OUT 傳送到 ICU 由 Firmware的中斷服務程式來完成 T0OUT 中斷的要求。最後由 Watchdog 計數器 WDCNT 可選擇使用 Timer 0 或 T0OUT 來當計數訊號,計數 Timeout 後,產生硬體中斷,硬體中斷路徑可以分為Warm Reset 和 Cold Rest

  • Warm Reset – 清除核心處理器及狀態暫存器和Power Manager Controller Module
  • Cold Reset – Reset 整個晶片


當系統要填寫ESCD或更新BIOS時,需要停止Watchdog的計數,避免Watchdog持續計數,產生Reset。停止Watchdog計數的方法,以 nuvoton EC 來說明 Watchdog Configuration, 先把TWCFGWDSDME位元設為HIGH0x87,0x61,0x63填入WDSDM暫存器即可中斷Watchdog的計數。重新啟動計數只要填入0x87,0x61,0x63填入WDSDM暫存器即可。

TWCFG (Timer and Watchdog Configuration Register) 暫存器的內容

  • LTWCFG  (b[0]) : 1 - Lock TWCFG
  • LTWCP     (b[1]) : 1 - Lock TWCP and WDCP
  • LTWDT0  (b[2]) : 1 - Lock TWDT0 and T0CSR
  • LWDCNT (b[3]) : 1 - Lock WDCNT
  • WDCT0I   (b[4]) : Watchdog clock select. 0 - T0OUT  / 1 - T0IN
  • WDSDME (b[5]) : Watchdog touched. 0 - writing to WDCNT / 1 - WDSDM=0x5C  

WDSDM (Watchdog Service Data Match) 暫存器的內容

  • RSDATA  (b[7:0]) : Watchdog Restart Data

WDCNT (Watchdog Count) 暫存器的內容

  • WD_PRESET (b[7:0]) : Watchdog Counter Preset

Watchdog Module啟動計數,先把計數時填入WDCNT,再把TWCFGWDSDME位元設為HIGH

Firmware可以使用MSWCTL1暫存器的HSECM位元來判別系統是否由經過Watchdog Reset

留言

這個網誌中的熱門文章

EC 所需知識 - SMBUS

EC 所需知識 - KBC

EC 所需知識 - LPC