文章目录
- 1. 介绍
- 2. Feature List
- 3. 概述
- 3.1. Safety Watchdog
- 3.2. CPU Watchdog
- 4. 看门狗定时器功能
- 5. Endinit Functions
- 5.1 Password Access to WDTxCON0
- 5.1.1 Static Password
- 5.1.2 Automatic Password Sequencing
- 5.2 Check Access to WDTxCON0
- 5.3 Modify Access to WDTxCON0
- 5.4 总结
- 5.4.1 清除ENDINIT流程
- 5.4.2 设置ENDINIT流程
- 6. Timer
- 6.1. Timer Modes
- 6.1.1 Time-Out Mode
- 6.1.2 Normal Mode
- 6.1.3 Disable Mode
- 6.1.4 WDT状态机
- 6.1.5 总结
- 6.2 WDT Alarm Request
- 6.3 Servicing the Watchdog Timer
- 7. Demo
- 7.1 Watchdog_1_KIT_TC375_LK
1. 介绍
Watchdog Timers (WDT)是Ifx System Control Units (SCU)六大模块之一。详细信息可以参考Infineon-AURIX_TC3xx_Part1-UserManual-v01_00-EN.pdf 文档“9.4Watchdog Timers (WDT)”章节。
2. Feature List
TC37x支持一个Safety Watchdog和三个CPU Watchdog(每个核一个)
每个看门狗定时器具有以下基本功能:
- 可编程时基和重新加载值(Watchdog基本功能,超时复位)
- 可编程密码保护与可配置的自动密码排序(访问一次后,下次访问密码支持特点规则变化)
- 可编程时间戳检查与可编程窗口
- 无效或缺失定时器刷新顺序导致安全警报
- 可以在调试期间挂起看门狗操作
- 关键寄存器写保护,只能在短时间内解除锁定(ENDINIT保护)
第一个和最后一个为主要功能。
3. 概述
WDT提供了一种高度可靠和安全的方式来检测和恢复软件或硬件故障。WDT有助于在用户指定的时间段内中止CPU或系统的意外故障。
除了这个标准的“看门狗”功能之外,每个WDTs都包含一个结束初始化(ENDINIT)特性,可以保护临界寄存器免受意外写操作的影响。为了保护这些功能,实现了一个复杂的方案,在访问WDT控制寄存器期间需要密码和保护位。
- 任何写访问如果没有提供正确的密码或保护位的正确值,都被认为是系统故障,并导致看门狗报警。
- 即使执行有效的访问和清除ENDINIT位(用于提供对关键寄存器的访问),Watchdog也会对该访问窗口施加时间限制。如果ENDINIT位在时间窗口内没有被正确设置,则假定系统出现故障。
这些严格的要求,虽然不能保证,但是为系统操作的健壮性提供了高度的保证。
3.1. Safety Watchdog
安全看门狗定时器提供了一个整体的系统级看门狗,它独立于CPU看门狗定时器,还提供了另一种防止意外写入安全关键系统寄存器的保护。当启用安全WDT时,如果在用户可编程的时间段内没有提供喂狗服务,则会引起SMU报警请求。CPU必须在此时间间隔内进行喂狗,以防止这种情况发生。对安全WDT超时的响应可以在SMU中配置。因此,定期对安全WDT进行喂狗可以确认系统运行正常。
在模块寄存器表中标记为“SE”的寄存器被认为是安全关键系统的静态属性,并且在初始化后都是开启写保护的。如果Safety ENDINIT位被清除,这个写保护可能会被暂时移除。
3.2. CPU Watchdog
单独的CPU看门狗计时器提供了监视单独的CPU执行线程的能力,而不需要软件来协调公共看门狗的共享使用。当CPU WDT使能时,如果在用户可编程的时间段内没有提供喂狗服务,则会引起SMU告警请求。SMU可以配置对每个cpu看门狗超时的响应。因此,对CPU WDT的定期维护可以确认相应的CPU正在按预期执行软件序列。复位后,CPU0运行,CPU0 Watchdog Timer自动启动。其他cpu最初处于HALT状态,因此它们对应的看门狗定时器被禁用。其他CPU Watchdog Timers默认不配置为生成超时重置,但可以启用。CPU看门狗只能由相应的CPU配置、启用或禁用。
在模块寄存器表中
- 标记为“CEy”(y= CPU编号)的寄存器是与CPU相关的关键寄存器,它们在初始化后开启写保护的。如果清除对应的cpu (y-CPU号)Watchdog ENDINIT位,该写保护可能会暂时取消。
- 标记为“E”的寄存器是关键系统寄存器,它们在初始化后开启写保护的。如果任何CPU Watchdog ENDINIT位被清除,这个写保护可能会被暂时移除。
Eg:
具体含义可见“1.1.6 Register Access Modes”章节
4. 看门狗定时器功能
- 16位看门狗定时器
- 可选输入频率:fSPB/64, fSPB/ 256或fSPB/16384
- 16位用户自定义加载值正常看门狗定时器操作,固定加载值超时模式
- 结合相应的ENDINIT位并监控其修改复杂的密码访问机制与用户可定义的密码字段
- 访问错误检测:密码无效(第一次访问时)或保护位无效(第二次访问时)触发告警请求SMU
- 时间和逻辑监控功能:
- 可选的代码序列检查。码序签名识别错误会触发向SMU发送告警请求
- 可选的代码执行时间检查。代码执行时间超出预期限制将触发向SMU发出警报请求。
- 溢出错误检测:当WDT计数器溢出时,向SMU发出告警
- 可禁用看门狗功能;访问保护和ENDINIT位监控功能保持开启状态
5. Endinit Functions
部分寄存器(CLC\KRST0\KRST1等)通常情况下只会在程序运行时修改一次,为避免在正常运行期间寄存器值被篡改,导致系统崩溃,Ifx提供了ENDINT(“初始化结束”)保护,仅清除对应ENDINIT标志位后,才能修改对应寄存器值,修改完成后,重新设置ENDINIT,完成一次修改。
注意:清除到设置ENDINIT标志位的时间不能过长,否则会触发Alarm信号,上报错误到SMU(Safety Management Unit)模块。
根据寄存器类型不同,Ifx细分以下三种类型的ENDINIT。
- “CEy”-CPU临界寄存器。CPU WDT ENDINIT=0 (y=CPU编号)时可写
- “E”-系统关键寄存器,当任何(一个或多个)CPU看门狗定时器ENDINIT= 0或EICONO.ENDINIT =0(Global ENDINT,前者依赖硬件,后者可以理解为存软件控制)时可写
- “SE”-安全关键寄存器-只有当安全看门狗定时器ENDINIT=0或SEICON0.ENDINIT=0 (Global Safety ENDINT)时才可写
框图如下:
总结:
CEy:只能通过WDTCON0.ENDINIT清除
E:可以通过每个CPU的ENDINIT标志位位清除,也可以用全局的EICON0.ENDINIT清除
SE:可以通过WDTSCON0.ENDINIT标志位清除,也可以用全局的SEICON0.ENDINIT清除
注意:清除ENDINIT位需要一些时间。在清除ENDINIT位之后访问受ENDINIT保护的寄存器必须在真正清除ENDINIT位时才进行。所以,ENDINIT位应该在ENDINIT位被清除后第一次访问受ENDINIT保护的寄存器之前回读一次。
为保证整个系统的稳定,清除、设置ENDINIT等操作也有严格时序,对WDTxCON0寄存器的访问分为Password Access,Check Access,Modify Access三种操作。
5.1 Password Access to WDTxCON0
必须使用正确的密码写入WDTxCON0 (x=CPU, y=CPU number,或S),才能解锁并进行修改。软件必须事先知道正确的密码(上电后默认密码为0x3C)。为了提供独立的看门狗功能,每个看门狗定时器的密码可以不同,程序流具有独立的看门狗功能。
- Safety WDG的WDTSCON0由通用SCU保护方案保护,该方案只允许配置的Master具有写访问(参见ACCEN10)。
- CPU WDG的WDTCPUyCON0被单独保护,因此它们只能由相应的CPU写入。
密码有效且SMU状态满足WDTxSR的要求。那么一旦密码访问完成,WDTxCON0将被解锁
(WDTxCON0.LCK = 0)。为了确保正确的服务顺序,只有在访问之前设置了WDTxCON0.LCK位时才允许密码访问。如果在密码访问过程中,WDTxCON0写入了不正确的密码值,触发看门狗访问错误。设置WDTxSR.AE位,并向SMU 发送Alam请求。
14位用户自定义密码,WDTxCON0.PW提供了根据应用程序需要调整密码要求的额外选项。例如,它可以用来检测意外的软件循环,或者监视例程的执行顺序。密码要求如下表所示:PAS: Password Auto-sequence Status Flag, 用于控制下次访问秘钥时是否需要改变,具体见Automatic Password Sequencing章节。
5.1.1 Static Password
在静态密码模式下(WDTxSR.PAS=0),密码只能通过有效的修改权限进行修改。密码访问的设计使得不能简单地读取寄存器并重新写入它。某些密码读取位在被重写之前必须反转(切换)。这可以防止简单的故障通过简单的读/写序列意外解锁WDT。
5.1.2 Automatic Password Sequencing
启用了自动密码排序(WDTxSR.PAS=1),每次密码检查(Password Access or Check Access)后密码自动更改。下一个密码期望值遵循基于14位斐波那契LFSR(线性反馈移位寄存器)的伪随机序列,其特征多项式为x14+x13+x12+x2+1。
5.2 Check Access to WDTxCON0
Check Access与Password Access相同,只是锁位不被清除,因此不允许后续的修改访问。在满足写数据要求的情况下,Check Access不会触发SMU告警请求。Check Access只能在LCK位被设置的情况下执行。
这种类型的访问用于WDT服务之间的中间检查点。这可以用(例如在与时间戳计数检查特性(或序列密码)结合使用,用于任务序列或执行时间监视。
如果在Check Access过程中,WDTxCON0上写了不正确的值(秘钥错误),则触发Watchdog Access Error。设置WDTxSR.AE,并向SMU (Safety Management Unit)发送告警请求。
个人理解:启用PAS后,秘钥序列是固定的,例如秘钥序列为0x12->0x34->0x56,正常情况下依次使用三个秘钥发起Check Access,若正确访问,则访问序列正确,若在中断或其他任务中,使用其他秘钥发起Check Access,则WDT报错。
5.3 Modify Access to WDTxCON0
如果WDTxCON0 通过Password Access成功解锁,下面对WDTxCON0的写访问可以修改它。但是,这种访问还必须满足某些要求,才能被接受并被视为有效。表265列出了所需的位模式。如果访问不遵循这些规则,则检测到看门狗访问错误条件,设置位WDTxSR.AE,向SMU (Safety Management Unit)发送告警请求。修改访问完成后,再次设置WDTxCONO.LCK,自动重新锁定WDTxCON0。在可以再次修改寄存器之前,必须再次执行有效的Password Access。
只有bit1必须为1,其他32bit可以用户自定义。
对该寄存器执行写操作后,该寄存器重新被lock住,在次经过Check Access操作后,才可以重新写入。
5.4 总结
进行Password Access(解锁CON0寄存器)后,必须在较短的时间写进行Modify Access,否则会触发Alarm报警。
若Password Access时写入错误的密码,CON0寄存器值保持不变,看门口定时器进入预警模式,并最终触发复位。
5.4.1 清除ENDINIT流程
5.4.2 设置ENDINIT流程
喂狗流程也是这样,Modify Access时会重新写入REL(加载值)
6. Timer
Safety Watchdog 和CPU0的定时器在应用程序复位后自动激活。每个实现定时器功能的16位计数器由fspb/ 64、fspb/256或fspb/16384触发。三种配置通过位WDTxCON1.IRx 控制。如表266所示:
每个WDT前的时钟分频器提供三个WDT计数器频率,fSPB / 64,fSPB / 256和fSPB / 16384。看门狗超时时间的一般计算公式为:
参数startvalue表示计算超时时间的固定值FFFCH,用户可编程的重新加载值WDTxCON0.REL用于计算正常周期。
divider 参数表示IRx选择的用户可编程源时钟分频,可以是64、256或16384。
6.1. Timer Modes
每个看门狗定时器可以在三种不同的工作模式之一:
- 超时模式(time-out mode)
- 正常模式
- 禁用模式
下面概述了这些模式,以及WDT如何从一种模式切换到另一种模式。
6.1.1 Time-Out Mode
CPU0应用复位后进入WDT超时模式。“应用复位”后会禁用其他CPU。当对WDTxCON0执行有效的Password Access时,也会进入超时模式。Time-Out Mode用WDTxSR.TO = 1表示。计时器设置为0xFFFCH并开始向上计数。只有设置ENDINIT = 1并设置正确的访问顺序,“超时模式”才能正常退出。如果对WDT进行了错误的访问,或者在设置ENDINIT之前定时器溢出,则向SMU (Safety Management Unit)发送告警请求。
根据禁用请求位WDTxCON1.DR的状态,退出超时模式可以是正常模式,也可以是禁用模式。
6.1.2 Normal Mode
在正常模式下(DR = 0), WDT以标准看门狗方式工作。定时器设置为WDTxCON0.REL,并开始计数。必须在计数器溢出之前进行喂狗。喂狗是通过对控制寄存器WDTxCON0的适当访问顺序进行的。
如果WDT在计时器溢出之前没有得到喂狗,则假定系统发生故障。Normal Mode终止,并向安全管理单元(SMU)发送报警请求。
6.1.3 Disable Mode
应用复位后,除CPU0外,所有CPU WDT都处于禁用状态。为不需要WDT功能的应用程序提供了禁用模式。当设置了禁用请求位WDTxCON1.DR时,可以从“超时模式”中请求。当请求时进入禁用模式,并且设置了位WDTxCON0.ENDINIT。定时器在此模式下停止。但是,关闭WDT只会使其停止执行标准的看门狗功能,不需要对WDT进行喂狗服务。它不会禁用超时模式。如果以禁用模式访问WDTxCON0寄存器,如果访问有效,则进入超时模式,如果访问无效,则向SMU (Safety Management Unit)发送告警请求。因此,ENDINIT监视器功能以及(一部分)系统故障检测仍将处于活动状态。
6.1.4 WDT状态机
- 进入Time Out模式条件:复位后进入,在Normal、Disable模式下执行Password Access也会进入
- 进入Normal mode条件:执行Password Access(解锁写保护),写入新的密码和重载值,清除-ENINIT,设置DR=0(请求使能WDTx模块),设置ENINIT标志
- 进入Disable mode条件,执行Password Access(解锁写保护),写入新的密码和重载值,清除ENINIT,设置DR=1(请求禁用WDTx模块),设置ENINIT标志
- SMU Alarm:超时或者写入无效的访问都会进入
6.1.5 总结
1)上电复位后自动进入“Time out mode”,计数器按照最慢的时钟进行计数
2)超时模式中止后,进入“Normal mode”,进入方式如下
- 正确的密码访问WDT_CON0(对应上面的Check Access)
- 对WDT_CON0寄存器进行Modify Access访问,将重载值设置为REL_1, ENDINIT设置为1
3)正确的密码访问WDT_CON0。会终止Normal mode,进入Time out mode
4)重复2的过程,从新设置ENDINIT为1,设置重载值为REL_2,结束Time out mode,进入Normal Mode
5)定时器一直计数到0xFFFF,触发一个Alarm请求,启动SMU内部的Recovery Timer开始计数,Recovery Timer超时后,触发复位信号,复位WDT模块。
备注:
1、Time out mode永远都是从0xFFFC开始计数。
2、Clear ENDINIT会进入Time out mode, Set ENDINIT进入Normal mode
3、启动Watchdog后,WDG模块内部会定时喂狗,用户不用关心
6.2 WDT Alarm Request
SMU alarm 请求包含以下三种情况:
- 无效的数据写入 WDTxCON0 (x=CPUy and y=CPU number, or S) , SEICON0 or EICON0寄存器(例如密码错误)
- 在任何WDT、ENDINIT超时计数器或Safety ENDINIT超时计数器的超时模式中,定时器溢出之前不执行Password Access(喂狗操作)
- 在正常模式下定时器溢出之前不提供任何WDT喂狗操作
由此产生的报警响应(Trap, Reset等)可在安全管理单元(SMU)内编程。
注意:WDT本身通过Application Reset来重置。
6.3 Servicing the Watchdog Timer
如果在应用程序中使用WDT并且WDTxSR.DS = 0,则必须定期维护(喂狗),防止超时溢出。喂狗分两个步骤执行,一个是有效的Password Access,然后是有效的Modify Access。有效的密码访问WDTxCON0会自动将WDT切换为超时模式。因此,Modify Access必须在超时时间之前执行,否则会向SMU (Safety Management Unit)发送告警请求。
注意:为了执行正确的服务,必须将ENDINIT写入为1,即使它已经设置为1。
7. Demo
7.1 Watchdog_1_KIT_TC375_LK
使用CPU0看门狗,演示喂狗功能,正常情况下,1.3s内进行喂狗,CPU正常工作。可修改71行函数,延时周期时间乘2,修改为2s,MCPU会不断复位。
71行wait函数可参考STM模块,相关链接如下:
System Timer (STM)