目录
2. WDTxCON0 的密码访问(Password Access to WDTxCON0)
2.2 Automatic Password Sequencing
3. WDTxCON0的检查访问(Check Access to WDTxCON0)
4. WDTxCON0的修改访问(Modify Access to WDTxCON0)
前言
为了提供系统的安全性能,TC3xx上一些重要的寄存器都受Endinit保护,不能直接修改。如果想要修改这些重要寄存器,就需要先按特定步骤解锁Endinit,然后才能修改这些重要的寄存器的值,最后还要上锁Endinit。那什么是Endinit功能了? -- 本文就来详细解锁TC3xx芯片的Endinit机制。
Note: 第1到5章节都是关于Endinit的概念介绍,如果感觉比较枯燥可以先从第6章节的实际应用开始阅读。
缩略词
简写 |
全称 |
Endinit |
End of initialization |
WDTCPUyCON0 |
CPUy WDT Control Register 0 |
WDTSSR |
Safety WDT Status Register |
正文
1.功能概述
在系统或应用程序的初始化过程中,通常只对一些寄存器进行一次编程(programmed only once)。 在正常应用程序运行期间修改此类寄存器可能会严重影响模块或整个系统的整体运行。
虽然 Supervisor Mode 和 Access Protection 方案提供了一定级别的保护,防止意外修改,但它们可能不足以防止对系统关键注册器的所有意外访问。
为这类寄存器提供了额外的保护,称为 Endinit (“End off initialization”)。 Endinit 是一种写保护方案,它只允许在特定时间进行写入,并使受此功能保护的寄存器的意外修改几乎不可能实现。
Endinit 功能由每个 WDT 控制寄存器中包含的 ENDINIT 位组成。 通过 Endinit 保护的寄存器决定是否启用写入。 只有当相应的 ENDINIT =0 且主管模式处于活动状态时,才会启用写入。 如果这种情况不正确,则写入尝试将被放弃,在这种情况下,寄存器内容将不会被修改。
为了获得最高的稳定性,写入 ENDINIT 位将受到 WDT 中实施的高度安全的访问保护方案的保护。 这是一个复杂的过程,几乎不可能无意中修改 ENDINIT bits。 此外,每次软件通过清除相应的 ENDINIT 位来打开对关键寄存器的访问时,每个 WDT 都会启动超时序列来监视 ENDINIT 位的修改。 如果超时时间在相应的 ENDINIT 位再次设置之前结束,则假定软件出现故障,并生成看门狗故障响应。
以下各节介绍了 WDT 的访问保护方案和 Endinit 超时操作。 在每个模块 (包括 SCU 本身) 的寄存器概览表中,通过每个 Endinit 类型保护的寄存器在描述写入访问的列中标识,如下所示:
. “ CEy ” - CPU 关键寄存器。 仅当 CPUy WDT ENDINIT=0 (y=CPU number) 时可写。也就是,只有把要要访问这个寄存器的CPU的ENDINIT设为0后,这个寄存器才能被这个CPU写访问(也就是解锁WDTCPUyCON0.ENDINIT)。
. “ E ” - 系统关键寄存器 - 任何 (一个或多个) CPUy 看门狗计时器 ENDINIT=0 或 EICON0.ENDINIT=0 时可写。也就是,任意一个CPU的ENDINIT设为0后,所有CPU都可以对这个寄存器进行写访问。
. “ SE ” - 安全关键寄存器 - 仅当安全监控计时器 ENDINIT=0 或 SEICON0.ENDINIT=0 时才可写入。也就是,Safety Watchdog的ENDINIT设为0后,Safety EndInit的保护就解除了,所有CPU都可以对这个寄存器进行写访问(也就是解锁WDTSCON0.ENDINIT)。
. 以上都不是 - 随时都可以访问
图 1 显示了解锁各种 ENDINIT 写保护模式的选项。
Figure 1: ENDINIT Control Registers
Note: ENDINIT 位的清除需要一些时间。 在清除 ENDINIT 位后访问受 Endinit 保护的寄存器必须仅在 ENDINIT 位真正被清除时进行。 作为一种解决方案, ENDINIT 位应在 ENDINIT位 清除后第一次访问受 Endinit 保护的寄存器之前被读回一次。