1、概述
看门狗有两种类型:
- 超时看门狗(Time-Out Watchdog - default value);
- 窗口看门狗( Window Watchdog)。
可以在 SBC Normal Mode下选择和编程相应的看门狗功能。在SBC Stop Mode下,配置保持不变。
SBC与看门狗的对应关系如图:
2.1、Time-Out Watchdog
超时看门狗是一个比窗口看门狗更容易但不太安全的看门狗,因为看门狗触发器可以在配置的监视器计时器周期内的任何时间设置。
如果超时看门狗周期过去,则通过设置复位输出RSTN Low创建SBC复位,SBC切换到SBC重新启动或SBC故障安全模式。
考虑内部振荡器的公差,考虑安全触发区域如图33所示。
2.2 Window Watchdog
与超时看门器相比,窗口看门器的特点是看门器周期分为closed window 和 open window。必须在 open window内触发。
正确的看门狗触发器导致closed window 关闭, open window 打开。
看门狗计时器周期也是典型的触发时间,并定义了打开窗口的中间值。考虑振荡器公差导致安全触发区域:tWD x 0.72 < safe trigger area < tWD x 1.20。
典型的关闭窗口定义为所选窗口看门狗计时器周期的60%。考虑到内部振荡器的公差,定义的时间如图34中所示。
正确的看门狗服务立即启动下一个关闭的窗口。
如果触发信号满足关闭窗口或看门狗计时器周期过去,则通过设置复位输出RSTN Low创建看门狗复位,SBC切换到SBC重新启动或SBC故障安全模式。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1b35db5cc4bd4f9e81e07422f1bbeee6.png
3、Watchdog Control Register
4、Disable Watchdog Operation
在SBC Normal Mode下的SBC Stop Mode下,可以禁用看门狗。出于安全原因,必须遵循一个特殊的顺序,才能禁用看门狗如图35所示。需要在寄存器WK_CTRL_0和WD_CTRL中设置两个不同的SPI位(WD_STM_ EN_0,WD_STM_ EN_1)。
1)Sequence Errors:
- 在设置了WD_STM_EN_1后,缺少用下一个看门狗触发器来设置位WD_STM_EN_0;
- 保持正常模式而不是下一个触发器进入停止模式。
2)Will enable the WD: - 切换到SBC Normal Mode;
- 触发看门狗;
3)如果出现序列错误,则将清除位WD_STM_ EN_1,并且必须重新启动该序列。
4)可以通过在SBC停止模式下触发看门狗或通过SPI命令切换回SBC正常模式来启用看门狗。在这两种情况下,看门狗从一个长打开的窗口开始,位WD_STM_EN_1和WD_STM_ EN_0被清除。在长打开窗口后,看门狗必须在WD_CTRL寄存器中配置。
5)当序列启动时,位WD_STM_ EN_0被自动清除,它之前是“1”。
6)如果尚未设置WD_STM_ EN_1,则也不能设置WD_STM_ EN_0。
5、Watchdog Start in SBC Stop Mode due to Bus Wake
在SBC停止模式下用任何总线唤醒(CAN)都可以启动看门狗。通过设置位WD_EN_WK_BUS=1(POR后的=默认值)来启用此功能。
该位WD_EN_WK_BUS只能在SBC正常模式下更改,并且需要在启动看门狗禁用序列之前进行编程。
CAN上的唤醒产生一个中断,CAN的RXD引脚被拉到低。通过这些信号,微控制器被告知看门狗是用一个长时间打开的窗口启动的。在长打开窗口后,看门狗必须在WD_CTRL寄存器中配置。
要再次禁用看门狗,必须将SBC切换到正常模式,并且必须再次发送序列。
6、代码实现部分
6.1 看门狗类型配置
uint8 TLF9471CfgWatchdogType(WatchdogTypeSelectionBit type)
{
if(type > WatchdogWorksAsWindowWatchdog)
{
return 0xFF;
}
else
{
g_TLE9471ES.M_S_CTRL.U = Tlf9471DataTransfer(ReadCmd, M_S_CTRL_Add, 0);
if(g_TLE9471ES.M_S_CTRL.B.MODE != SBCNormalMode)
{
return 0xFE;
}
else
{
if(g_TLE9471ES.WD_CTRL.B.WD_WIN == type)
{
return type;
}
else
{
g_TLE9471ES.WD_CTRL.U = Tlf9471DataTransfer