目录

1. TC3xx WDT速览

2. TC3xx SMU Watchdog Alarm

2.1 Watchdog Alarm处理流程

2.2 Recovery Timer详解

2.3 NMI里可以做什么?

3. End-of-Initialization(ENDINIT)保护

         3.1  ENDINIT 类型

3.2 Watchdog Timer 工作概述

3.3 WDTxCON0的访问

        3.3.1 WDTxCON0 的密码访问(Password Access to WDTxCON0)

3.3.2 WDTxCON0的检查访问(Check Access to WDTxCON0)

3.3.3 WDTxCON0的修改访问(Modify Access to WDTxCON0)

3. 4  WDTxCON1 ( WDT Control Register 1) 访问

3.5  WDT 模式状态切换

3.6. 访问受Endinit保护的寄存器 

        3.6.1 通过WDT访问Endinit保护的寄存器

3.6.2 不通过WDT访问Endinit保护的寄存器

3.6.3  解除Endint保护流程

3.6.4 设置EndInit 保护并且是能WDT 服务


1. TC3xx WDT速览

SCU(system control unit) 是控制不同系统功能模块的集合,这些子模块共享一个公共总线接口,子模块包含了下图这些,具体结构见图。后续文章会详细解读各个部分

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

  • Safety WatchdogSafety Watchdog Timer
  • CPU Watchdog (Watchdog Timer per CPU),每一个CPU 核都有自己的CPU Watchdog

TC397 会有 7 个WatchDog。

每个Watchdog有三个Register,WDTxCon0,WDTxCon1,WDTxSR

除了标准的"看门狗"功能外,每个看门狗定时器还集成了End-of-Initialization(ENDINIT)保护机制,该功能可防止关键寄存器被意外写入。在看门狗服务和修改ENDINIT位是关键操作,必须确保在系统故障时不被执行。为保护这些功能,芯片采用了精密的安全机制:访问看门狗控制寄存器时需要同时验证密码和保护位。任何未提供正确密码或保护位的写操作都会被判定为系统故障,并触发看门狗报警。

此外,即使通过有效访问清除了ENDINIT位以开放关键寄存器的写入权限,看门狗也会为该访问窗口设置时间限制。若未在时限届满前重新正确设置ENDINIT位,系统将被判定为运行异常。这些严格的要求虽不能提供绝对保证,但能显著增强系统运行的鲁棒性。

看门狗定时器的主要特性总结如下:

​基本配置​

  • 采用16位计数器结构
  • 可选的输入时钟频率:fSPB/64、fSPB/256 或 fSPB/16384
  • 支持16位用户可定义的重载值(正常看门狗模式),超时模式采用固定重载值​安全保护机制​
  • 集成对应的ENDINIT位控制及修改监控功能
  • 采用密码访问机制,支持用户自定义密码字段
  • 访问错误检测:首次访问密码无效或二次访问保护位无效时,将向SMU触发报警​监控能力​
  • 时序与逻辑监控功能:
  • 可选的代码序列校验:错误的代码序列签名将触发SMU报警
  • 可选的代码执行时间校验:执行时间超出预设范围将触发SMU报警
  • 溢出错误检测:计数器溢出时立即向SMU发出报警请求​特殊工作模式​
  • 看门狗功能可单独禁用(访问保护和ENDINIT监控功能保持有效)
  • 可配置安全预警机制:未处理的安全预警事件将禁止看门狗重载,确保SMU硬件及时响应
  • (注:fSPB表示系统外设总线时钟频率,SMU为系统管理单元,ENDINIT为初始化结束保护位)

2. TC3xx SMU Watchdog Alarm

2.1 Watchdog Alarm处理流程

根据文档描述,当出现没有及时喂狗的情况,虽然触发了alarm,但仍需要一段特殊流程来保证MCU行为,特别是在重启前给与软件一小段时间用于保存现场,这是非常关键的。

因此,SMU 看门狗alarm处理流程可用下图进行总结:
 

Watchdog一般情况下如果Watchdog time溢出了就会产生一个watch dog reset,在TC3xx中Watchdog的Timeout并不会直接触发Reset,而是经过配置SMU后会触发SMU里面的一个Recovery Timer启动,Recovery Timer的Timeout时间可以配置,单Recovery Timerout后就会产生一个Alarm,如果这个Alarm配置为Reset信号的话,就会触发Reset。

当WDT timeout发生时,如果采用默认配置,则直接触发NMI;同时有一个名叫Recovery Timer的计时器用于监控WDT Alarm处理的超时,一旦超过预配置的阈值(RTD)后,就会产生一个Recovery timeout的alam(对应ALM10[16-17])。

这个alam的默认配置为Reset(b110:RESET):

这个路径就很清楚了,那么我们来看看比较关键的Recovery Timer该如何配置

2.2 Recovery Timer详解

在SMU里,Recovery Timer共有两个实例,每个实例均可配置服务不同的WDT timeout alarm。

与Recovery Timer相关的寄存器包括:

RTC (Recovery Timer Configuration)用于配置超时阈值、使能RT0  RT1,如下:

阈值常见使用默认值0x3FF,RT均打开。

  • RTAC00  (Recovery Timer0  Alarm Configuration 0)
  • RTAC01  (Recovery Timer0  Alarm Configuration 1)

   用于配置RT0的服务对象,包括CPU Watchdog Timeout、Safety Watchdog Timeout等;

   RT0主要服务 Safety WDT, CPU0\1\2 WDT

RTAC00(Recovery Timer0  Alarm Configuration 0)为例,

默认值为0xA80108,即对应ALM Group GID0 = d8 ,Alarm ID ALID0 = d10 ,对应ALM8[10]CPU0 看门狗超时,RT0主要服务 Safety WDT, CPU0\1\2 WDT

每个寄存器可以配置2个Alarm,因此RTAC00 ,RTAC01共计可以配置服务4个Alarm,在默认配置中。

  • RTAC10  (Recovery Timer1  Alarm Configuration 0)
    RTAC11  (Recovery Timer1  Alarm Configuration 1)

RTAC10\11用于配置RT1的服务对象,包括CPU Watchdog Timeout、Safety Watchdog Timeout等,与上述配置类似,RT1默认服务CPU3\4\5 WDT

2.3 NMI里可以做什么?

配置好RT后,我们继续来看看看门狗超时的行为--NMI,全称Non-Maskable Interrupt。

它是Tricore内核Trap系统中的一个具体实现。

SMU通过内部行为配置NMI触发一个Trap事件给到SCU,再有SCU仲裁生成Trap给到对应CPU,如下:

trap发生时,会由硬件自动生成一个Trap ID,该ID由两部组成,

TCN:Trap Class Number,作为Trap table的索引,由硬件根据BTV生成
TIN:Trap Identification Number,硬件自动加载到的数据寄存器D[15]

3. End-of-Initialization(ENDINIT)保护

为了提供系统的安全性能,TC3xx上一些重要的寄存器都受Endinit保护,不能直接修改。如果想要修改这些重要寄存器,就需要先按特定步骤解锁Endinit,然后才能修改这些重要的寄存器的值,最后还要上锁Endinit。 

Endinit 是一种写保护方案,它只允许在特定时间进行写入,并使受此功能保护的寄存器的意外修改几乎不可能实现。

3.1  ENDINIT 类型

TC3xx中有三类ENDINIT机制,分别是E、CE、SE,我们可以从模块寄存器Overview获取当前寄存器受什么保护,如下:

  •  “ CEy ” - CPU 关键寄存器。 仅当 CPUy WDT ENDINIT=0 (y=CPU number) 时可写。也就是,只有把要要访问这个寄存器的CPU的ENDINIT设为0后,这个寄存器才能被这个CPU写访问(也就是解锁WDTCPUyCON0.ENDINIT)。
  • E ” - 系统关键寄存器 - 任何 (一个或多个) CPUy WDT ENDINIT=0 EICON0.ENDINIT=0 时可写。也就是,任意一个CPU的ENDINIT设为0后,所有CPU都可以对这个寄存器进行写访问。
  •  “ SE ” - 安全关键寄存器 - 仅当Safty WDT ENDINIT=0 或 SEICON0.ENDINIT=0 时才可写入。也就是,Safety Watchdog的ENDINIT设为0后,Safety EndInit的保护就解除了,所有CPU都可以对这个寄存器进行写访问(也就是解锁WDTSCON0.ENDINIT)。
  • .以上都不是 - 随时都可以访问

  当软件清除 ENDINIT 位以允许修改时,实际的硬件清除操作并非瞬时完成。

  • 当软件清除 ENDINIT 位以允许修改时,实际的硬件清除操作并非瞬时完成。
  • 如果在清除 ENDINIT 位后,软件立即尝试访问受保护的寄存器,访问操作可能会在硬件实际解除保护之前发生,从而导致问题。

Note:

  • ENDINIT 位的清除需要一些时间。 在清除 ENDINIT 位后访问受 Endinit 保护的寄存器必须仅在 ENDINIT 位真正被清除时进行。 作为一种解决方案, ENDINIT 位应在 ENDINIT位 清除后第一次访问受 Endinit 保护的寄存器之前被读回一次。

EICON0SEICON0是两个Global的ENDINIT保护寄存器,如果不想改变Watchdog CPUx或者Safety Watchdog的ENDINIT值,但是又想解除保护,就可以使用Global的EICON0和SEICON0(前提是EndInit的保护等级是“E”或者“SE”)。

不过根据芯片手册描述,如果我们使用EDT来访问受Endinit保护的寄存器时,会带来一个负作用,那就是一旦WDTyCON1.ENDINIT置0,该WDT就会自动切换timeout模式(目的是为了避免该bit长期置0),因此需要及时将ENDIINIT复位。

3.2 Watchdog Timer 工作概述

2950b318-b1a6-11ed-bfe3-dac502259ad0.png

298973ba-b1a6-11ed-bfe3-dac502259ad0.png

复位以后CPU的Watchdog默认是处在Time-Out Mode下的,WDT在Time-Out Mode下就会从0xFFFC开始往上计数。

如果计数到0xFFFF就会溢出,如果在计数到0xFFFF之前对WDT_CON0进行了password access后对WDT_CON0进行了Modify access,重新对WDT进了reload value到REL_1值(写寄存器前ENDINIT值改为1了,也就是先要介绍ENDINIT保护),这样WDT从Time-Out模式切换到了Normal Mode,这个时候WDT开始从REL_1值晚上计数。

Note: 后面会介绍password access和Modify access

29a9d02e-b1a6-11ed-bfe3-dac502259ad0.png

在上图中的3)的地方对WDT_CON0进行了password access,WDT就会切换到Time-Out Mode,WDT又从0xFFFC开始计数,

如果在4)这个点,又对WDT_CON0做了password access就会切换WDT到Normal Mode,同时对WDT_CON0做了一次Modify access后,WDT从REL_2开始计数。

29ebcc40-b1a6-11ed-bfe3-dac502259ad0.png

计数到0xFFFF后WDT就溢出了,触发SMU的Timeout的Alarm,这个Alarm会触发SMU里面的一个Recovery time进行计数,Recovery time也timeout后就会产生一个SMU的reset。

3.3 WDTxCON0的访问

WDTxCON0 

该寄存器在"检查访问"和"密码访问"操作中用于写入检查数据。在"修改访问"期间,它还会存储定时器重载值、密码更新以及相应的初始化结束控制位。

29fc2496-b1a6-11ed-bfe3-dac502259ad0.png

寄存器描述:

3.3.1 WDTxCON0 的密码访问(Password Access to WDTxCON0)

Password access的条件是LCK为0,ENDINIT为1。WDTxCON0.PW[7:2]写入当前WDTxCON0.PW[7:2]值的反转值,WDTxCON0.PW[15:8]写入当前WDTxCON0.PW[15:8]值,这样Password access就解锁了。

必须向 ​WDTxCON0​(x = CPUy,y 为 CPU 编号,或 S)寄存器写入正确的密码,才能解锁并修改该寄存器。

软件必须事先知道正确的密码,或者在运行时计算密码。 每个监视程序计时器(Watch)的密码 (x=CPUy 和 y=CPU 编号,或 S) 可以不同,以便提供独立的监视程序功能程序流,以具有独立的监视程序功能。

​安全看门狗(Safety Watchdog)安全监视器密码寄存器(Safety Watchdog password register) WDTSCON0 受通用 SCU 保护,仅允许配置的主控(Master)写入(参见 ACCEN10 寄存器)

​CPU 专用看门狗(CPU-specific Watchdog password register)密码寄存器访问 WDTCPUyCON0 单独受到保护,因此它们只能由相应的 CPUy 写入。

Safety Watchdog WDTSCON0
CPU 专用看门狗 WDTCPUyCON0

在安全应用程序中可以使用看门狗来提供恢复时间,在此期间软件可能会尝试从安全警报警告中恢复。 为确保 CPU 故障不允许忽略故障,提供了一个选项,用于在安全管理单元 (SMU) 处于故障状态时防止看门狗解锁。 此选项可由位 WDTxCON1.UR 启用。

如果密码有效且 SMU 状态满足 WDTxSR.US 位的要求,则一旦密码访问完成, WDTxCON0 将被解锁。 解锁条件将由 WDTxCON0.LCK = 0 指示。 为了确保正确的服务顺序(servicing sequence),只有在访问之前设置了 WDTxCON0.LCK 位时才允许密码访问。

如果在密码访问期间向 WDTxCON0 写入了不正确的密码值,则存在看门狗访问错误情况。 位 WDTxSR.AE 已设置,并向安全管理单元 (SMU) 发送警报请求。 14 位用户可定义密码 WDTxCON0.PW 提供了其他选项,用于根据应用程序的需要调整密码要求。 例如,它可用于检测意外的软件循环,或监视例程的执行顺序。

下表 汇总了密码的要求。 有多种选择,下文将更详细地介绍这些选择

3.3.1.1 Static Password

在静态密码模式 (WDTxSR.PAL=0) 中,密码只能通过有效的“修改访问”进行更改。 密码访问(Password Access)的设计使其不可能简单的读取寄存器并重写寄存器。 在重新写入之前,某些密码读取位必须反向 (切换)。 这可以防止简单的故障通过简单的读 / 写序列意外解锁 WDT。

3.3.1.2 Automatic Password Sequencing

如果启用了自动密码排序 (WDTxSR.PA=1) ,则每次检查密码后,密码会自动更改 (即 Password Access or Check Access)。 预期的下一个密码遵循基于具有特征多项式 x14+X13+x12+x2+1 的 14 位斐波那契(Fibonacci) LFSR (Linear Feedback Shift Register) 的pseudorandom sequence。 修改访问权限还可以提供初始密码 (或后续手动密码更新)。

3.3.2 WDTxCON0的检查访问(Check Access to WDTxCON0)

Check Access 与 Password Access 相同,只不过锁位(lock bit)未被清除,因此不允许后续的“修改访问”。 如果满足写入数据要求,“检查访问”不会触发 SMU 警报请求。 只有在设置了 LCK 位时才能执行检查访问。

此类访问用于 WDT 服务之间的中间检查点。 这可以用于任务序列或执行时间监控 (例如,与时间戳计数检查功能或序列密码结合使用)。

Table 2: Check Access Bit Pattern Requirements

如果在检查访问期间向 WDTxCON0 写入了不正确的值 (x=CPUy and y=CPU number, or S) ,则存在看门狗访问错误情况。 位 WDTxSR.AE 已设置,并向安全管理单元 (SMU) 发送警报请求。

3.3.3 WDTxCON0的修改访问(Modify Access to WDTxCON0)

如果密码访问(Password Access)成功解锁 WDTxCON0 (x=CPUy and y=CPU number, or S) ,则以接下来的WDTxCON0 的写入访问可以对其进行修改。当完成Modify access后,这个寄存器就又被lock住了,如果要改它就需要再来一次password access。

Table 3: Modify Access Bit Pattern Requirements

但是,这种访问也必须满足某些要求才能被接受并被视为有效。 表 3列出了所需的位模式(bit patterns)。 如果访问不遵循这些规则,则会检测到监视程序访问错误情况,设置位 WDTxSR.AE ,并向安全管理单元 (SMU) 发送警报请求。 修改访问完成后,将再次设置 WDTxCON0.LCK ,自动重新锁定 WDTxCON0。 在重新修改寄存器之前,必须再次执行有效的密码访问。

3. 4  WDTxCON1 ( WDT Control Register 1) 访问

每个看门狗定时器实例 x(x=CPUy,其中 y=CPU 编号;对于安全看门狗则为 x=S)均配备一个 WDTxCON1 寄存器。对于安全看门狗定时器,x 取值为 S。

WDTxCON1 寄存器用于管理安全看门狗的操作,包含以下功能位:

  • ​禁用请求位​
  • ​密码配置位​
  • ​频率选择位​

​写保护机制​
      每个 WDTxCON1 寄存器均受 ​安全ENDINIT (SE)​​ 写保护机制控制。

3.5  WDT 模式状态切换

3.6. 访问受Endinit保护的寄存器 


如果在运行期间需要对受 Endinit 保护的寄存器进行写入访问,则可以在有限的时间内临时重新启用写入访问。 提供了两种选择:

  •  通过 WDT 刷新重新启用对受 ENDINIT 保护的寄存器的访问
  •  无需 WDT 刷新即可重新启用对 ENDINIT 保护的寄存器的访问

为了获得调试支持, Cerberus 模块可以覆盖所有 WDT 的所有 ENDINIT 控件,以简化调试流程。 如果设置了 CBS_OSTATE.ENIDIS位 ,则所有 ENDINIT 保护都将被禁用,而不管 WDT 配置的当前状态如何。 如果清除了 CBS_OSTATE.ENIDIS ,则完整的ENDINIT控制位于 WDT 内。

3.6.1 通过WDT访问Endinit保护的寄存器

要重新启用访问(修改受Endinit保护的寄存器),必须先使用有效的密码访问解锁 WDTxCON0。 在随后的有效修改访问中,可以清除 ENDINIT。解锁WDTxCON0且清除ENDINT后, 就能再次打开对受 Endinit 保护的寄存器的访问。 注意,当 WDTxCON0 解锁时, WDT 会自动切换到超时模式。 因此,访问窗口有时间限制。 超时模式仅在重新设置 ENDINIT 后终止,需要另一个有效密码和有效的 WDTxCON0 修改访问权限。

3.6.2 不通过WDT访问Endinit保护的寄存器

在某些应用中,可能不使用 WDT ,并将被禁用 (WDTxSR.DS =1) ,尽管不建议这样做。

在其他应用程序中,可能会使用 WDT 时间戳功能,刷新之间的 WDT 访问将是不可取的。

在这种情况下,仍然可以使用 ENDINIT 全球控制寄存器 (EICONx) 来临时访问受 Endinit 保护的寄存器。

3.6.3  解除Endint保护流程

3.6.4 设置EndInit 保护并且是能WDT 服务

Set EndInit的Modify Access动作会设置WDT_CON0.INIT为1,WDT的Reload timer会重新Reload一次,也就是和Watchdog的喂狗操作是一样的。

参考原文:

  1.  https://blog.csdn.net/qq_36056498/article/details/134617065
  2. 一文简析TC3xx Rest/Clock/Watch模块-电子发烧友网
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐