Watchdog 使用指南
1. 模块介绍
1.1. 术语定义
术语 | 定义 | 注释说明 |
---|---|---|
WDT | Watchdog,下文简称wdt | 看门狗 |
clr_thd | Clear threshold | 清看门狗的计数时,当前计数必须要满足此门限 |
irq_thd | IRQ threshold | 看门狗产生中断的计数值 |
rst_thd | Reset threshold | 看门狗触发系统重启的门限值 |
ping | - | 指将Watchdog的计时器清零,使其重新计数,俗称“喂狗” |
1.2. 模块简介
WDT(Watchdog)给系统提供一个健康监控功能,在系统无法正常使用时,可以强制复位系统;而在系统正常运行期间,可通过重置计数来保证Watchdog模块不触发复位。
Watchdog V1.0在V0.1基础上做了优化升级,提供更多可配置的功能:
-
支持在复位系统前先(时刻可配置)发出一个中断信号,来通知系统做一些复位前的准备工作;
-
增加对计数器清零的限制,只有当前计数值满足一个门限(可配置)才能执行清零;
-
支持预先加载4个Watchdog的配置(软件可以理解为多通道),运行时可一键切换;
-
支持预先加载4个Watchdog的配置(软件可以理解为多通道),运行时可一键切换;
-
写允许
普通状态,无任何权限限制,随时可重新配置计数器;
-
写保护
如果要重新配置Watchdog计时器,需先写入操作码OP_WR_EN解锁(进入“写允许”状态);
-
写失效
此时Watchdog进入只读状态,只有OP寄存器可写(用于喂狗、切换通道)。从图中可以看到此状态不可逆,如果要修改Watchdog配置,必须要reset系统才可以。
-
-
支持更多的操作码(Operate Code),如计时器清零、通道切换、写使能。
2. 参数配置
2.1. 内核配置
在luban根目录下执行 make kernel-menuconfig,进入kernel的功能配置,按如下选择:
Linux
Device Drivers
[*] Watchdog Timer Support
<*> Artinchip SoC watchdog support
2.2. DTS 参数配置
2.2.1. Watchdog 自定义参数
Watchdog 驱动支持从DTS中配置的自定义参数,如下表:
参数名称 | 适用版本 | 类型 | 取值范围 | 功能说明 |
---|---|---|---|---|
dbg_continue | V1.0 | boolean | 有 - 1,无 - 0 | 用Jtag进入debug状态时,计数是否继续默认值是0,停止计数 |
clr_thd | V1.0 | 正整数 | > 0 ,单位:秒 | 允许清除WDT的最小秒数 |
小技巧
- 关于清除WDT的逻辑关系,请参考图 Watchdog 清零的窗口示意图 的相关说明。
- 在FPGA环境,清零窗口的功能无效,需要屏蔽clr_thd的判断逻辑。
2.2.2. Common 配置
在common/d211.dtsi中的Watchdog控制器定义:
wdt0: watchdog@19000000 {
compatible = "artinchip,aic-wdt-v1.0";
reg = <0x0 0x19000000 0x0 0x1000>;
interrupts-extended = <&plic0 64 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_WDOG>;
resets = <&rst RESET_WDOG>;
dbg_continue; // 使用Jtag进入debug状态时,计数是否继续。默认是暂停计数
clr_thd = <3>; // 用于设置clr_thd,单位:秒
};
注解
其中有两个 扩展字段,如果没有配置将默认是0。
2.2.3. Board 配置
xxx/board.dts中的参数配置比较简单,只是说明是否要打开Watchdog:
&wdt0 {
status = "okay";
};