RISCV_Watchdog使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 04/21/2023

    1. 概述

    硬件 watchdog 提供超时复位系统的功能,其功能由定时器和复位功能组成,用户可以设定一个超时时间,并在超时时间以内对它进行“喂狗”的操作,重置其内部计数,如果其内部计算达到了设定的超时时间,watchdog 就会对系统进行复位,重启系统。

    2. 关键字说明

    • watchdog

      看门狗,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

    • watchdog timeout

      看门狗的超时时长,如果超过这个时长不喂狗,WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。

    • watchdog pretimeout

      看门狗的预超时时长。pretimeout是触发时间到系统重启时间点的长度。比如,如果你设置timeout为60, pretimeout为50,那么在50秒的时候(重启之前的 10秒)将触发机关。

    3. 功能描述

    linux 内核支持基于 hrtimer 的 softdog 和基于硬件的硬件看门狗,创建 /dev/watchdog* 设备文件与用户空间程序进行交互。用户空间的 watchdog 程序,会通过/dev/watchdog* 设备进行周期性喂狗。

    图1-1 watchdog框架

    4. 硬件连接介绍

    NA

    5. RTOS用法介绍

    5.1. DRIVER PATH

    sc/driver/sysdriver/watchdog/drv/mdrv_wdt_api.h

    sc/driver/sysdriver/watchdog/drv/mdrv_wdt.c

    sc/driver/sysdriver/watchdog/drv/mdrv_wdt_reg.h

    sc/driver/sysdriver/watchdog/drv/mdrv_wdt_test.c

    5.2. CONFIG配置

    config文件位于mak/options_pcupid_riscv_isw.mak,使能CONFIG_WATCHDOG_SUPPORT

    # Feature_Name = [DRV] WATCHDOG driver support
    # Description = WATCHDOG driver support
    # Option_Selection = TRUE, FALSE
    CONFIG_WATCHDOG_SUPPORT = TRUE
    

    5.3. SYSDESC配置

    无需配置。

    5.4. Padmux配置

    无需配置。

    5.5. Sample code

    int watchdog_test(void)
    {
        int wdt_timeout = 10; /* 10s */
        int i = 0;
    
        if(sstar_wdt_probe()!=0)
        {
            CamOsPrintf("sstar_wdt_probe failed to execute\n");
            return -1;
        }
    
        if (sstar_wdt_set_timeout(wdt_timeout)!=0)  /*设置watchdog超时时间*/
        {
            CamOsPrintf("sstar_wdt_set_timeout failed to execute\n", argc);
            return -1;
        }
    
        if(sstar_wdt_start()!=0)  /*启动watchdog*/
        {
            CamOsPrintf("sstar_wdt_start failed to execute\n");
            return -1;
        }
    
        for(i = 0; i < 10; i++){
            CamOsMsSleep(wdt_timeout*1000/2); /*每隔5s喂一次狗,喂10次 */
            if (sstar_wdt_ping()!=0)
            {
                    return -1;
            }
        }
    
        /* 50s后系统不再喂狗,第60s的时候watchdog将触发系统将被重启*/
    
        return 0;
    }
    

    5.6. UT case

    测试用例:

    1)打开Watchdog的宏CONFIG_WATCHDOG_SUPPORT和__VER_WATCHDOG__

    2)测试demo路径:sc/driver/sysdriver/watchdog/drv/mdrv_wdt_test.c

    3)执行测试

    SS-RTOS # wdttest
    argv must like start/reset xs,num must be 2, now is: 0
        [start/reset] [time (s)]
        - Do some tests about wdt'
    
    Example:
      # wdttest start 10  /* 启动watchdog后,系统会不断去喂狗,所以10秒后系统不会重启 */
      # wdttest reset 10  /* 启动watchdog后,系统不会去喂狗,所以10秒后系统将重启 */
    

    6. API参考

    该功能模块提供以下接口:

    API名称 功能
    sstar_wdt_probe 初始化watchdog
    sstar_wdt_remove 释放watchdog
    sstar_wdt_start 启动watchdog
    sstar_wdt_stop 关闭watchdog
    sstar_wdt_set_timeout 设置watchdog超时时间
    sstar_wdt_ping 喂狗操作

    6.1. sstar_wdt_probe

    • 功能

      初始化watchdog

    • 语法

      int sstar_wdt_probe(void);
      
    • 参数

      参数名称 描述
      NA NA
    • 返回值

      返回值 描述
      0 成功
      other 失败

    6.2. sstar_wdt_remove

    • 功能

      释放watchdog,如果watchdog正在运行,则先停止watchdog

    • 语法

      int sstar_wdt_remove(void);
      
    • 参数

      参数名称 描述
      NA NA
    • 返回值

      返回值 描述
      0 成功
      other 失败

    6.3. sstar_wdt_start

    • 功能

      按设定好的或者默认的timeout启动WDT

    • 语法

      int sstar_wdt_start(void);
      
    • 参数

      参数名称 描述
      NA NA
    • 返回值

      返回值 描述
      0 成功
      other 失败

    6.4. sstar_wdt_stop

    • 功能

      停止watchdog

    • 语法

      int sstar_wdt_stop(void);
      
    • 参数

      参数名称 描述
      void NA
    • 返回值

      返回值 描述
      0 成功
      other 失败

    6.5. sstar_wdt_set_timeout

    • 功能

      设定WDT超期的时长,如果没有在这个时长内没有周期地使用sstar_wdt_ping来‘喂狗’,系统将会复位,俗称‘狗咬’

    • 语法

      int sstar_wdt_set_timeout(unsigned int timeout)
      
    • 参数

      参数名称 描述
      timeout watchdog超时时间
    • 返回值

      返回值 描述
      0 成功
      other 失败

    6.6. sstar_wdt_ping

    • 功能

      复位WDT计数器,俗称‘喂狗’

    • 语法

      int sstar_wdt_ping(void)
      
    • 参数

      参数名称 描述
      void NA
    • 返回值

      返回值 描述
      0 成功
      other 失败

    7. FAQ

    NA