安全微控制器系列(DS5000FP、DS5001FP、DS5002FP和相关模块)集成了内部看门狗定时器,以防止代码执行错误。看门狗定时器使用微控制器也使用的高精度晶体振荡器。这消除了对RC振荡器的需求,同时提供了更高的精度。
概述
微控制器通常用于电源瞬变、电磁干扰 (EMI) 和静电放电 (ESD) 丰富的恶劣环境中。总线损坏和电磁放电引起的程序损坏可能导致微处理器执行错误的指令。在这些环境中,看门狗定时器是一种有用的外设,可以帮助捕获和重置已“失控”的微控制器。
看门狗定时器是一个简单的倒数定时器,用于在特定时间间隔后重置微处理器。在正常运行的系统中,软件将定期“宠爱”或重新启动看门狗定时器。重新启动后,看门狗将开始计时另一个预定间隔。当软件或设备无法正常运行时,软件不会在超时之前重新启动看门狗计时器。当看门狗定时器超时时,将导致微控制器复位。如果系统软件设计正确且没有硬件故障,则重置将导致系统再次正常运行。重置条件必须是“安全”状态。例如,让磁条读卡器的复位状态启用写入磁头是不明智的。
许多系统都是使用外部看门狗定时器设计的。安全微控制器系列通过集成内部看门狗定时器,无需外部元件。通过在微控制器内移动看门狗定时器,可以减少系统中的器件数量,从而提高整体系统可靠性。看门狗定时器可以利用微控制器使用的高精度晶体振荡器,而不是大多数独立看门狗定时器使用的不精确的RC振荡器。看门狗定时器的操作与微控制器无关,除非通过定时访问程序专门解决。失控的微控制器意外禁用看门狗定时器的可能性小于 1/7.2 ×1016.本应用笔记介绍了安全微控制器看门狗定时器的特性和用途。
看门狗定时器的一般用途
看门狗定时器的主要应用是作为系统监视器来检测和复位“失控”微处理器。当程序执行出错时,它将无法正确执行重新启动看门狗的代码。在这种情况下,看门狗定时器将超时并导致微控制器复位。在正确设计的系统中,复位将纠正错误。
无论看门狗定时器的功能如何,都存在无法通过复位来纠正的某些故障。例如,看门狗定时器无法防止或检测数据存储器的损坏。除非数据损坏影响程序流,或者采取了一些额外的措施,否则数据损坏不会导致监视器超时。当然,自诊断软件可以编写成这样一种方式,即重新启动看门狗取决于数据存储器的验证。虽然许多应用程序实现了此类数据验证方案,但它超出了本文档的范围。
应该记住,看门狗定时器无法立即检测到故障。根据定义,监视程序计时器必须达到其超时间隔的末尾,然后才能重置处理器。系统设计人员应注意执行错误指令和看门狗定时器复位之间可能发生的最大时间间隔。
放置重新启动说明
在安全微控制器系列中,看门狗定时器由主系统时钟驱动。超时间隔固定为 122,800 个计算机周期(1,473,600 个外部时钟周期)。当达到超时时,将进行重置。表1显示了与不同晶体频率相关的复位时间间隔。
时钟频率 | 超时间隔 |
16.0000兆赫 | 92 毫秒 |
14.7456兆赫 | 100 毫秒 |
11.0592兆赫 | 133 毫秒 |
7.73280兆赫 | 191 毫秒 |
5.52960兆赫 | 266 毫秒 |
1.84320兆赫 | 800 毫秒 |
主要问题是看门狗定时器复位命令(设置 RWT 位)在软件中的位置。最理想的方法是在系统软件的主回路中有一个位置,定期重新启动看门狗计时器。通过主程序循环所需的时间必须小于超时间隔,否则设备将在正常运行期间自行复位。然而,在某些系统中,程序流不够线性,无法放置单个看门狗定时器复位功能。代码中应放置多个复位功能,对应于最长的软件路径。
通常,系统需要知道是否发生了看门狗定时器复位。WTR 位 (PCON.4) 将在发生这种情况时进行设置,如果发生系统故障,软件可以在复位序列的早期对此进行测试。如果是这样,系统可能会决定进入“安全”模式并提醒用户注意错误情况。
看门狗复位示例
下面显示了一个简短的程序,说明了看门狗定时器的初始化和基本功能。它说明了定时访问功能,该功能可防止意外修改看门狗控制位。定时访问操作是必须按顺序一起执行的一系列步骤;否则,访问将失败。示例程序显示了用于重新启动监视器并启用其重置的定时访问。有关定时访问操作的更多详细信息,请参阅安全微控制器用户指南。受定时访问过程保护的看门狗定时器位是使能看门狗定时器复位 (EWT;PCON.2) 并重新启动看门狗定时器 (RWT;IP.7) 位。
; WD_RST.ASM Program ; ; This program demonstrates the use of the watchdog timer. ; When running, the program counts on port 1 to indicate the device is ; running and periodically resetting the watchdog timer. After counting ; to 16, it stops resetting the watchdog timer, simulating a system fault. ; ; The program begins by checking to see if the WTR bit is set. If so, the ; reset was caused by the watchdog timer, and the program will execute ; the FAULT subroutine. Port 1 is set to F0h to indicate this condition. ; If the WTR bit is not set, the reset was caused by another source and ; execution should continue normally. ;************************************ RWT EQU 0BFh ;Reset Watchdog Timer bit TA EQU 0C7h ;Timed Access Register PCON EQU 87h ;Power Control Register ACC EQU 0E0h ;Accumulator P1 EQU 090h ;Port 1 ORG 00h ;Reset Vector SJMP START ;************************************ ORG 080h ;Program starts at 80h in this example. START: MOV A, PCON ;If reset was caused by watchdog timeout, JB ACC.4, FAULT ; (WTR bit =1) execute fault subroutine. ;********************************** ;A normal power-on reset has occurred. Start initialization sequence. MOV P1, #00h ;Clear P1 to signal start of program. ;Watchdog timer initialization sequence MOV TA, #0AAh ;First restart the Watchdog timer MOV TA, #055h ; using timed SETB RWT ; access. MOV TA, #0AAh ;Next enable the Watchdog timer reset MOV TA, #055h ; function using timed ORL PCON, #04h ; access. ;********************************** ;Main program loop. This simulates a program that is operating ; correctly and then goes awry. After the program has counted to 16 ; on Port 1 it will skip over the watchdog timer reset function. This ; will simulate a fault and allow the watchdog timer reset to be asserted. ;********************************** MAIN: MOV R1, #0FFh ;Create a delay loop. This simulates LOOP1: MOV R2, #0FFh ; a device actually "doing something." LOOP2: JB P1.4, SKIP_WD_RST ;Have we been through loop 16 times? MOV TA, #0AAh ;Watchdog timer reset. In a user application it MOV TA, #055h ; should be placed at strategic locations SETB RWT ; where it will be executed periodically. SKIP_WD_RST: DJNZ R2, LOOP2 JNZ R1, LOOP1 INC P1 ;Increment counter. SJMP MAIN ;Go back to main program loop. ;************************************ ;Watchdog timeout fault. This subroutine would normally have special ; routines to be executed in the event of a system fault. In this example, ; it disables the watchdog reset and sets Port 1 to F0h to indicate a fault. ; In a real application, this routine could either clear the fault and ; restart the software, or signal a fault and halt further operation. ;************************************ FAULT: MOV P1, #0F0h ;Signal a fault MOV TA, #0AAh ;Disable watchdog timer reset MOV TA, #55h ; using timed ANL PCON, #0FBh ; access. SJMP $ ;Halt further operation.
总结
任何使用看门狗作为监视器的设计都必须考虑许多因素。确定超时期限后,必须分析系统软件以确定看门狗重新启动指令的位置。为了进行有效的设计,应将监视程序重新启动的次数保持在最低限度,并应考虑错误执行重新启动的可能性。如前所述,某些系统软件过于复杂或依赖于数据,无法确保看门狗重新启动涵盖所有软件流路径。这可能要求可能需要自诊断软件方法。如果存在预期的故障机制,例如周期性EMI突发或电源毛刺,则看门狗超时应考虑此时间段。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !