yaboPP电子
技术文章

微控制器中的看门狗定时器

2020年2月10日通过斯蒂芬•考利

本文是微控制器计时器系列文章的第四篇,该系列文章讨论了内部监视程序。

本文是微控制器定时器系列文章的第四篇。第一篇文章描述了大多数类型的计时器的主要特性,并涵盖了周期性计时器.如果你不熟悉单片机定时器的一般操作,我推荐阅读第一篇文章。我们还讨论了脉冲宽度调制定时器mcu中的实时时钟

本文介绍了看门狗定时器,通常缩写为WDT,也称为计算机运行正确定时器或警察。外部看门狗设备和内部看门狗功能。本文仅介绍内部看门狗。

什么是看门狗定时器?(一个非传统的类比)

看门狗定时器是一种专门的定时器模块,可以帮助微处理器从故障中恢复。如果看门狗定时器到达它的计数周期的结束,它重置整个处理器系统。为了防止这种情况发生,处理器必须执行某种类型的特定操作来重置看门狗。因此,看门狗定时器可以被配置为只有在处理器发生故障时才会到达它的计数周期的结束,并且通过强制系统复位,看门狗定时器帮助处理器逃离故障模式并继续正常运行。

为了可视化WDT的功能,我对您考虑的非常传统的类比。

丢失的是一部非常受欢迎的电视剧,讲述了一群幸存者在一次飞机失事后被困在一个神秘的岛上的故事。其中一个次要情节是,一些角色认为,他们必须在屏幕上的计数器变为0之前输入一小串数字,否则世界就会结束。

输入系列时,计数器重置并开始再次计数。如果进入一系列数字,它绝不是清楚的只是心理学实验的一部分,或者世界的命运是有利的。找出唯一的方法是不输入数字。角色可以自由地出去,找到食物,去游泳 - 但他们必须及时回归重置柜台。从计算机的角度来看,接收正确的输入意味着那里有一个人正常运行并维修计数器。没有接收正确的输入表明某些事情是错误的。

看门狗定时器像计算机系统一样运行丢失的.微控制器的其余部分是压力很大的角色,他们可以自由地做任何事情,但必须定期服务一个计数器,或者有一个微控制器的重置(AKA世界末日)。正常运行的软件和硬件将在固定的时间内为看门狗提供服务,而故障的软件或硬件则可能不能。

内部看门狗定时器的类型

看门狗有两种类型,无窗口和窗口。如果服务柜台迟到,这两种类型都会导致重置。

如果快速发生服务,则窗口看门狗也会导致重置。该图显示了使用UP计数器的看门狗的定时序列。一些看门狗使用倒计时,但原理是相同的。

看门狗定时器的时序

对于非窗口或窗口看门狗,在计数器达到上限之前的任何服务都将重置计数器,一切正常。有窗口的看门狗添加下限并创建计数窗口。下限和上限之间的任何业务都可以。下面是对图表的详细描述。

  • 一个-启动后不久,程序初始化看门狗与计数器的上限,并启用计数。对于有窗口的看门狗,还设置了下限。
  • BC- 软件在达到上限之前成功服务柜台,并且在下限之后,对于窗口看门狗。维修后,计数器重置为0并开始再次计算。一切都是好的。
  • D—程序不服务计数器,计数达到上限。看门狗复位微控制器。
  • D E—微控制器启动、初始化和使能看门狗。
  • E- 看门狗开始计数。
  • F程序在计数器达到上限之前服务计数器,对于有窗口的看门狗,在达到下限之后服务计数器。计数器重置为0并开始再次计数。一切都是好的。
  • G-程序在计数达到窗口看门狗的下限之前服务计数器。对于没有下限的非窗口看门狗,没有重置,计数器变为0并开始再次计数。对于有窗口的看门狗,微控制器被复位。

监管机构的细节各不相同。他们可以向上或向下数。他们使用不同的时钟。他们有不同的上限和下限选择。下面几节将介绍许多特征,但仅是概述。

看门狗初始化

初始化看门狗可能很棘手。例如,一些看门狗会在微控制器启动时自动启用。

如果您不使用看门狗,则必须在启动时包含代码以禁用它。这是我目前正在使用的看门狗的情况。如果我的程序需要长于一秒钟,我必须禁用看门狗或更改窗口设置!

一些看门狗只允许写入控制寄存器作为安全特性。此功能可防止失控软件在初始化后更改设置。如果您在具有此特性的看门狗中使用默认设置,请确保覆盖默认设置,即使位值是相同的。这将“锁定”值并维护安全性。

如果您使用C语言编程,请注意可能会在启动代码中初始化看门狗,它会在main()函数之前运行。这些代码有时是开发环境自动包含的,作为运行标准C程序的一部分。这段代码建立了内存和中断向量表。查看您的启动代码对看门狗的操作,并根据您的系统要求进行修改。

窗口设置

看门狗可以是非开窗的和开窗的。通过将窗口的下限作为选项,单个计时器通常提供两种类型。窗户的大小因看门狗的不同而不同。

我目前使用的看门狗的下限固定在上限的75%。另一只看门狗可以选择上限的75%、50%、37.5%或25%。而另一家监管机构则独立设定上限和下限。关于如何选择上限也有很多不同。

维修AKA看门狗定时器复位

定期重置看门狗计数器称为“维护”计时器。不同的看门狗定时器有不同的维修要求。所有服务需求使用的操作在失控软件的执行过程中不太可能发生。

我目前使用的看门狗需要对“服务寄存器”进行两次写操作,值为0x55,后面跟着0xAA。如果写入服务寄存器的值不是0x55或0xAA,随时,微控制器立即复位。

另一个看门狗需要对值为0xAAAA的服务寄存器进行一次写操作。人们似乎对数字0xA和0x5及其1010和0101的交替位模式很感兴趣。一个定时器违背了这一趋势,它使用一个幻数0x5743的单个写入。

睡眠模式

睡眠和其他低功耗模式复杂化。看门狗如果处理器睡觉并停止执行,看门狗应该做些什么?看门狗时间仍然存在吗?

当处理器进入和退出深度睡眠时,我目前使用的看门狗在初始计数时暂停和重启。这个话题很复杂,你需要研究当微控制器使用低功耗模式时看门狗的运行情况。

进步的响应

微控制器的完全复位可能过于苛刻。有些监管机构有允许渐进反应的功能。

例如,看门狗可能在复位之前有一个中断请求的选项。此功能允许中断服务程序在看门狗继续计数时修复或记录问题。如果中断程序不能使事情回到正轨,就会发生重置。

WDT策略

我用“策略”这个词来决定在哪里设置看门狗的时间限制。最简单的策略是使用一个非窗口看门狗,它的超时时间比服务看门狗之间程序的任何可能的执行时间都长。我称它为“重启按钮”策略,因为它代替了一个人按下重启按钮。对于医疗设备或制造机器人等关键系统的策略需要更快的反应。

许多考虑因素可以进入看门狗策略:

  • 系统使用可预测的主循环还是基于可预测的复杂多任务结构实时操作系统
  • 看门狗重置是否开始启动一系列自动系统检查?
  • 看门狗是一系列尝试诊断和解决问题的最后阶段吗?
  • 您想在系统启动时测试看门狗以及其他检查吗?

看门狗策略是一个复杂的课题,具有很强的应用依赖性。

在重置微控制器之前,看门狗在状态寄存器中设置一位,该寄存器在复位体内生存。通常,该位与其他复位状态一起存储,例如布朗从重置一些。测试看门狗复位位应该是策略的一部分。

最小,在启动期间测试此位,并执行某些问题以表示问题。否则,失败可能会被忽视,特别是罕见的。例如,在显示器上输出消息或点亮LED。

奖金主题:死人计时器与看门狗定时器

一个死人计时器(DMT)是看门狗概念的变体。如果操作员释放机械开关,则该名称源于死人开关,该终止部门停止机器。而不是使用时间作为起搏变量,一个死人定时器计算从程序存储器的CPU指令获取。如果在执行指定数量的指令之前,DMT计数器如果在执行指定数量的指令之前,存在微控制器。

看门狗和DMT之间的一个关键区别是,DMT可以在睡眠和其他节电模式中保持活跃,这些模式占用时间,但不会改变执行的CPU指令的数量。

结论

本文是本系列的最后一篇文章。还有其他有趣的定时器,如低功率定时器,三倍PWM定时器控制三色LED,以及我所说的混合计时器,它将硬件计时器与紧密耦合的软件相结合。如果你想了解更多关于微控制器计时器的内容,请留下评论。