目录

  • 看门狗基础
  • TC397 Watchdog
  • 微信公众号

看门狗基础

文档参阅 TC3XX User Manual 的9.4节, 看门狗Watchdog Timers (WDT)是System Control Units (SCU)六大模块之一.

TC3xx包含以下看门狗定时器:

  • 1个安全看门狗定时器(Safety Watchdog Timer), 防止意外写入关键系统寄存器和存储器, 一定时间内未响应其计时器, 将引发SMU警报请求.
  • 每个CPU一个看门狗定时器(CPU Watchdogs Timer ), 为CPU寄存器以及特定的系统寄存器提供保护, 监视单独的CPU, 一定时间内未刷新, 将触发设备复位.

每个看门狗定时器具有以下基本功能:

  • 可编程的时基和重载值
  • 可编程的密码保护以及可配置的自动密码序列(automatic password sequencing)
  • 带有可编程窗口的可编程时间戳检查
  • 无效或缺少计时器刷新序列会导致安全警报(Safety Alarm)
  • 可在调试期间挂起看门狗操作
  • 关键寄存器写保护,只能在短超时时间内解锁

AURIX TC2xx SCU WDT和AURIX TM TC3xx SCU WDT之间最重要的变化是:

  • 寄存器地址更改
  • 增加的CPU响应增加相应的看门狗定时器
  • 可以通过新的ENDINIT(End-of-Initialization, 初始化终止)超时计数器(EICON寄存器)进行ENDINIT解锁,而不会影响任何CPU看门狗定时器
  • 可以通过新的安全ENDINIT超时计数器(SEICON寄存器)解锁安全ENDINIT,而不会影响安全看门狗定时器
  • 安全看门狗定时器的单独ACCEN保护范围
  • 外部WDT“活动心跳”指示功能已删除

WDT提供了一种高度可靠和安全的方法来检测软件或硬件故障并从中恢复。 WDT有助于在用户指定的时间段内中止CPU或系统的意外故障.

WDT框图:

除此标准的“看门狗”功能外,每个WDT都具有初始化终止(ENDINIT, End-of-Initialization)功能,可以保护关键寄存器免于意外写入.

维护看门狗和修改ENDINIT位是至关重要的功能,如果系统出现故障,则不允许这样做。 为了保护这些功能,实施了一种复杂的方案,该方案在访问WDT控制寄存器期间需要密码和保护位。 任何未提供正确密码或保护位正确值的写访问均被视为系统故障,并导致看门狗警报。 另外,即使在执行了有效的访问并且将ENDINIT位清零以提供对关键寄存器的访问之后,看门狗也对该访问窗口施加了时间限制。 如果在该限制到期之前未再次正确设置ENDINIT位,则认为系统发生了故障。 这些严格的要求尽管不能得到保证,但是仍然为系统操作的鲁棒性提供了高度的保证.

可用的配置选项使看门狗服务能够额外检查代码执行顺序和中间代码执行时间。 如果启用了这些检查,则任何不正确的顺序或超限的执行时间也将导致SMU警报请求.

任何WDT到期都会引发SMU警报。 可以对SMU进行编程以提供中断或陷阱,以便在采取进一步措施(例如重置设备或CPU)之前为恢复或状态记录提供一些时间.

Safety Watchdog Timer, 安全看门狗定时器:

  • 提供了独立于CPU看门狗定时器的整体系统级看门狗,并且还提供了另一种保护措施,以防止意外写入安全关键系统寄存器。 启用安全WDT时,如果在用户可编程的时间段内未对SMU发出警报,则可能引发SMU警报请求. CPU必须在此时间间隔内为安全WDT服务,以防止发生这种情况。 在SMU中可以配置对安全WDT超时的响应。 因此,定期对Safety WDT进行维护可确认系统正在按预期运行.
  • 通常,将配置SCU写保护(ACCEN),以便只有受限制的“安全” CPU(s)才能配置安全关键功能, 这包括服务安全看门狗的能力. 此外,安全监视程序计时器的禁用/启用/配置功能需要安全ENDINIT密码

CPU Watchdogs Timer, CPU看门狗定时器:

  • 单独的CPU看门狗定时器提供了监视单独的CPU执行线程的能力,而无需软件来协调通用看门狗的共享使用.
  • 启用CPU WDT时,如果在用户可编程的时间段内未正确服务,则可能导致SMU警报请求。 CPU必须在此时间间隔内为其CPU WDT服务,以防止出现这种情况。 在SMU内可配置对每个CPUy看门狗超时的响应. 因此,对CPU WDT的定期服务确认相应的CPU正在按预期执行软件序列.
  • 复位后,CPU0运行,并且CPU0看门狗定时器自动启动. 其他CPU最初处于HALT状态,因此禁用了它们对应的看门狗定时器。 默认情况下,其他CPU看门狗定时器未配置为生成超时复位,但是可以启用它. CPU看门狗只能由其相应的CPU进行配置,启用或禁用.

WDT的主要功能总结如下:

  • 16位看门狗定时器
  • 可选输入频率:fSPB / 64,fSPB / 256或fSPB / 16384
  • 正常看门狗定时器操作的16位用户可定义重载值,超时模式为固定重载值
  • 合并相应的ENDINIT位并监视其修改
  • 具有用户可定义的密码字段的复杂密码访问机制
  • 访问错误检测:无效的密码(第一次访问期间)或无效的保护位(第二次访问期间)触发对SMU的警报请求
  • 时间和逻辑监视功能:可选的代码序列检查. 错误的代码序列签名标识将触发对SMU的警报请求; 可选的代码执行时间检查, 代码执行时间超出预期的限制将触发向SMU发出警报的请求
  • 溢出错误检测:WDT计数器的溢出触发向SMU发出警报请求
  • 看门狗功能可以禁用; 访问保护和ENDINIT位监视功能保持启用状态
  • 可配置的机制,以防止在未使用安全警告警报后重新加载看门狗,以确保未使用警告会导致SMU硬件响应

TC397 Watchdog

参考 Watchdog_1 for KIT_AURIX_TC397_TFT

以CPU0的看门狗定时器为例, 步骤如下:

  • 屏蔽默认的关闭CPU看门狗这一句: IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
  • 配置CPU0WDT, IfxScuWdt_changeCpuWatchdogReload, 重载值(REL, Reload Value)默认0xFFFC, 向上计数, 到0xFFFF就溢出了, 这个时间太短, 改为0xE000, 超时时间timeout ≈ (0xFFFF - REL) / (100MHz/16384) ≈ 1.342s, timeout别太小, 可能引起下载时候的麻烦. 值16384是一个常量,由寄存器WDTSCON1的IRx定义
  • 获取密码喂狗: IfxScuWdt_serviceCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());

Cpu0_Main.c代码如下:

#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"#include "Bsp.h"IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;#define LED         &MODULE_P13, 0#define REL_VAL     0xE000       /* Reload value for extended timeout window */void core0_main(void)
{IfxCpu_enableInterrupts();/* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!* Enable the watchdogs and service them periodically if it is required*///IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());IfxScuWdt_changeCpuWatchdogReload(IfxScuWdt_getCpuWatchdogPassword(), REL_VAL); /* Set CPU0WD timer to ~1.3 sec */IfxScuWdt_serviceCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());               /* Service the CPU0WDT          *//* Wait for CPU sync event */IfxCpu_emitEvent(&g_cpuSyncEvent);IfxCpu_waitEvent(&g_cpuSyncEvent, 1);IfxPort_setPinMode(LED,  IfxPort_Mode_outputPushPullGeneral);IfxPort_setPinHigh(LED);initTime();while(1){IfxScuWdt_serviceCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());           /* Continuously service CPU0WDT */wait(TimeConst_1s);                                                         /* Wait for one second          */IfxPort_togglePin(LED);}
}

编译运行, 由于1s<1.34s, 不会复位, LED正常翻转.

等待时间改为2s: wait(TimeConst_1s*2); 编译运行, CPU一直复位, LED不会正常翻转.

微信公众号

欢迎扫描关注我的微信公众号, 及时获取最新文章:

AURIX TC397 SCU 之 Watchdog 看门狗相关推荐

  1. Android system server之WatchDog看门狗分析

    android -- WatchDog看门狗分析 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系 ...

  2. 什么是看门狗(watchdog)?看门狗有什么作用?

    什么是看门狗(watchdog) 看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂 ...

  3. AURIX TC397 SCU 之 ERU 外部中断

    目录 ERU基础知识 ERU引脚 ERU Example 微信公众号 ERU基础知识 参考 AURIX™ TC3xx User Manual Part-1 ERU, Event Request Uni ...

  4. MSP430 5xx/6xx Watchdog看门狗编程实例

    看门狗定时器是一个32位定时器,可以用作看门狗或间隔定时器. 看门狗定时器模块的主要功能是在出现软件问题后执行受控的系统重启.如果超过选定的时间间隔,将生成系统复位.如果应用程序不需要看门狗功能,则模 ...

  5. Linux Watchdog/看门狗

    Watchdog timer(看门狗定时器)是一种电子计时器,其用于检测和恢复计算机故障.在正常操作期间,计算机定期重置看门狗定时器以防止它"超时".如果由于硬件故障或程序错误,计 ...

  6. NRF52832学习笔记(31)——Watchdog看门狗使用

    一.简介 看门狗定时器(WDT: Watchdog Timer)的作用是在发生软件故障时(如程序陷入死循环或者程序跑飞),强制复位单片机,让单片机重新运行程序. 看门狗定时器本质上是一个计数器,只不过 ...

  7. CC2640R2F学习笔记(8)——Watchdog看门狗使用

    一.背景 如果在一定的时间内没有通过"喂狗"来清除看门狗的 counter,则看门狗会产生一个复位,使程序重启. 看门狗一旦开启,就不能停下来. 二.移植文件 链接:https:/ ...

  8. linux服务器看门狗服务,服务器watchdog看门狗的理解

    1.什么是watchdog? watchdog,中文名称叫做"看门狗",全称watchdog timer,从字面上我们可以知道其实它属于一种定时器.然而它与我们平常所接触的定时器在 ...

  9. Linux内核4.14版本——watchdog看门狗框架分析

    目录 0 简介 1. 设备的注册 1.1 dw_wdt_drv_probe 1.2 watchdog_register_device 1.3 __watchdog_register_device 1. ...

最新文章

  1. TP id 对字符串的查找
  2. 也谈.Net中间语言——破解Delphi2CS行数和时间限制
  3. Mysql-4-数据库的基本操作
  4. 服务器上次文件命令,服务器上次文件命令
  5. chrome浏览器允许跨域
  6. 大白话讲解Promise(三)搞懂jquery中的Promise
  7. tomact配置好ssl证书后访问不到tomact_服务器上配置HTTPS的操作方法!
  8. 简单分析FFT坐标轴的生成方式和幅值大小
  9. 怎么向Xcode6 IOS8之后向项目中添加预编译文件
  10. SumatraPDF安装包
  11. VOC2007和VOC2012数据集下载地址
  12. 区块链入门导航-磨链社区
  13. android模拟器电视,Android TV开发之模拟器的设置
  14. 程序存储器与数据存储器
  15. python3下的webpy运行详解——webpy,session,cookie
  16. 动态规划问题 -- 求给定K个币种时N美元有几种组合方式 (例1,2,3美元存在,求10美元有几种组合方式)
  17. 微机原理(FPGA设计CPU理解)
  18. 【冬瓜哥画PPT】最完整的存储系统接口/协议/连接方式总结
  19. Mysql学习记录【Mysql字符集】
  20. 赵丽5500 第二节课

热门文章

  1. python计算椭球面积代码_使用ArcPy如何计算面图层的椭球面积?
  2. 艾司博讯:拼多多重复开店注意的事项
  3. cassandra 学习笔记
  4. 推荐一个还不错的医学网站
  5. 详解关于int a[2][3]={{1},{2,3}}二位数组运算的问题
  6. 刘磨叽恶狠狠地瞪了了张s
  7. Vim快捷键和:set命令大全
  8. From PHPBB用户手册(感觉很规范的,呵呵)
  9. 关于两个电源串并联的问题
  10. 深圳软件测试培训:Selenium断言与验证