文章目录
前言
本篇本专栏为个人实习学习总结材料,深刻感觉作为刚入行的汽电小白,道阻且长,如果对你有帮助欢迎留言评论收藏,加油汽电人!!!
一 SCU概述
声明:此部分为英飞凌TC397芯片手册翻译整理内容,可帮助理解TC397-SCU原理
系统控制单元(SCU)是一组控制各种系统功能的子模块,包括:
复位控制(RCU)
陷阱生成(TR)
杂项功能的系统寄存器(SRU)
看门狗计时器(WDT)
外部请求处理(ERU)
紧急停止(ES)
电源管理控制(PMC)
这些子模块共享一个共同的总线接口,下面是SCU模块框图:
本文结合看门狗复位主要介绍WDT和RCU模块
(一)RCU复位控制单元( Reset Control Unit)
本节介绍了AURIX™ TC3xx平台将被复位的条件以及复位操作的配置和控制。
补充:冷复位和热复位概念:
冷复位是指在系统上电过程中首次触发的复位,或对临时断电的反应。在上电过程中,EVR初级欠压监测器将触发系统的完全复位,使系统进入一个已知的状态。PORST引脚可以用来延长这个复位阶段并控制其释放的时间。当触发器被断言时,引脚和内部状态将立即进入复位状态。
热复位是在系统已经运行并且电源保持稳定的情况下触发的重置。它被用来将系统返回到相同的已知状态。在热复位请求中,任何引脚状态的重置都将立即发生,但内部电路只有在系统进入内存内容和调试跟踪数据不会被破坏的状态,并且电流消耗已经降低后才会被重置。(在TC397中PORST可以作为一个热复位"开机复位 "的寄存器也应在温热的PORST下复位,而不需要开机事件)
下列复位请求触发器可用:
- 电源监视器(SWD)触发开机复位(冷复位)
- 核心电压EVR(EVRC)监视器触发开机复位(冷复位)
- 3.3V EVR监视器触发开机复位(冷复位)(如果产品有EVR33)
- 待机EVR(STBYR)监视器触发开机复位(冷复位)
- 外部有源低电平硬件 "开机 "复位请求触发器;PORST(可以是温复位或延长冷复位)
- 外部系统请求复位触发针脚;ESR0和ESR1(温复位)
- 安全管理单元(SMU)报警复位请求触发,(温复位)
- 软件复位(SW),(温复位)
- 系统定时器(STMX)触发(温复位)
- 通过JTAG接口复位 ï通过片上调试系统(OCDS)
- 启动复位 软件触发的模块复位
还可根据复位类型如下分类:
上电复位:
这种复位会使整个系统初始化为一个确定的状态。开机复位也会产生调试复位和系统复位,因此也会产生应用复位。(参见 "热重置 "和 "冷重置 "一节)
系统复位: 这种重置导致整个系统初始化到一个确定的状态,但没有重置电源子系统、调试子系统或重置配置寄存器。 系统重置也产生一个应用重置。
调试复位: 这种重置导致整个调试系统初始化到一个确定的状态。
应用复位: 这种复位导致整个应用系统的初始化进入一个确定的状态,包括以下部分:所有外设、CPU和SCU的部分。
模块复位: 模块复位导致单个模块被初始化进入一个确定的状态,而对系统的其他部分没有任何影响。
复位源和激活的复位信号/域的连接情况见下表。
RCU检测不同的复位请求,安排关闭系统,然后产生适当的内部复位脉冲。
- 复位请求触发器
- 唤醒触发器
- 复位指示输出
- 陷阱请求触发器
因便于理解看门狗复位原理这里简单讲解一下外部服务请求复位
ESR引脚可以有多种使用方式:
ESR输入可以触发复位
ESR输出可以提供复位指示
ESR输入可以触发陷阱请求
ESR引脚可以作为一般数据I/O引脚使用
ESR输入可以触发从待机模式唤醒
(二)看门狗定时器(WDT)
(1)系统概述
WDTs为检测和恢复软件或硬件故障提供了一种高度可靠和安全的方法。WDTs有助于在用户指定的时间段内中止CPU或系统的意外故障。
(2)访问控制
除了这个标准的 "看门狗 "功能外,每个WDT都集成了一个初始化结束(ENDINIT)功能,可以保护关键寄存器不被意外写入。
- 在访问WDT控制寄存器时需要一个密码和保护位。任何没有提供正确密码或保护位正确值的写操作都被认为是系统的故障,并导致看门狗报警。
- 即使在进行了有效的访问并清除了ENDINIT位以提供对关键寄存器的访问后,看门狗对这个访问窗口施加了一个时间限制。如果ENDINIT位在这个时间限制结束前没有被正确设置,系统就会被认为发生了故障。
- 配置选项可以使看门狗服务额外检查代码执行顺序和中间代码执行时间。如果这些检查被启用,那么任何不正确的顺序或超限的执行时间也会导致SMU报警请求。
- 任何一个WDT的到期都会导致SMU报警。可以对SMU进行编程,以提供一个中断或陷阱,在采取进一步行动(如重置设备或CPU)之前,提供一些时间来恢复或记录状态。
(3)看门狗密码
1.静态密码:
在静态密码模式下(WDTxSR.PAS=0),密码只能通过一个有效的修改访问来改变。密码访问被设计成不可能简单地读取寄存器并重新写入。一些密码读取位在被重新写入之前必须被反转(切换)。这可以防止简单的故障通过简单的读/写序列意外地解锁WDT
2.动态密码:
如果自动密码排序被启用(WDTxSR.PAS=1),那么每次密码检查(即密码访问或检查访问)后,密码会自动改变。预期下一个密码遵循一个基于14位斐波那契LFSR(线性反馈移位寄存器)的伪随机序列,特征多项式为x14+x13+x12+x2+1。初始密码(或随后的手动密码更新)也可以由修改访问提供。
二 案例分析
(一)示例代码
以下代码根据weifeng大佬文章修改,附原文链接:
AURIX TC397 SCU 之 Watchdog 看门狗
改动:
因为英飞凌ILLD库修改根据现有定时器函数添加了void delayTime()
函数,用以处理延时服务。
#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"
#include "IfxStm.h"
#include "IfxPort.h"
#include "IfxCpu_Irq.h"
#include "Bsp.h"
#define LED &MODULE_P13, 0
#define WAIT_TIME 500
#define REL_VAL 0xE000
IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;
void delayTime(void)
{
waitTime(IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, WAIT_TIME));
}
void core0_main(void)
{
IfxCpu_enableInterrupts();
IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
IfxScuWdt_changeCpuWatchdogReload(IfxScuWdt_getCpuWatchdogPassword(), REL_VAL);
IfxScuWdt_serviceCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
IfxCpu_emitEvent(&g_cpuSyncEvent);
IfxCpu_waitEvent(&g_cpuSyncEvent, 1);
IfxPort_setPinModeOutput(LED, IfxPort_OutputMode_pushPull, IfxPort_OutputIdx_general);
IfxPort_setPinHigh(LED);
while(1)
{
IfxPort_togglePin(LED);
delayTime();
IfxScuWdt_serviceCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
}
}
(二)运行效果
1.按上面代码执行并烧录可以看见D107LED 间隔0.5秒闪烁。
2.若增大延时函数的值,大于看门狗定时器设置的阈值,没有进行密码喂狗,则线程进入阻塞状态,D106看门狗报警功能指示灯亮起,D107常亮。
细节补充:
- 可以观察到D106经历短暂闪烁后常亮,原因是SMU特殊保护机制造成的,如果SCU引起应用复位发生两次,就会认为是严重的系统故障,TC3xx会被永久保持在应用复位状态,直到开机或系统复位,这可以防止在应用程序为正确服务看门狗,看门狗反复超时的情况下,设备周期性复位。
- 当第一次请求SMU复位时,一个内部标志位会被设置值,如果当内部标志位已经被设置后又收到复位请求,则应用复位被封锁