Reset基础学习看这篇就够了

本文框架

  • 1.Reset是什么?
  • 2.Reset分类
  • 3.Reset的处理
    • 3.1 RCU处理流程
    • 3.2 SMU处理流程
  • 4.Reset排查
    • 4.1 确定是否为供电影响
    • 4.2 借助OS ErrorHook或ProtectionHook
    • 4.3借助芯片寄存器

1.Reset是什么?

Reset是软件正常运行过程中发生的PC指针跳回软件起始位置的行为,即软件跳回Boot中并重新开始的行为。在复位过程中,MCU中内核与外设也会有相应的动作,如内核复位,寄存器复位等。

复位的原因也有很多,可能来自MCU供电异常、软件异常或者本身的功能需求如刷新完成后可能需要Reset一次等。不同的复位源也可能会产生不同的影响,其影响范围也一般由MCU芯片厂商来决定。本文将以Reset总体介绍为目的,以IFX TC3xx系列为载体进行叙述。

2.Reset分类

不同的MCU厂商对Reset分类不同,以英飞凌Tricore系列来讲可以划分为如下几类:
Poweron Reset:该类Reset是系统电源关闭后初次上电后发生的,Poweron Reset会将整个系统初始化为预先设置的状态。PoweronReset还会引发一系列如Debug Reset、System Reset及Application Reset。

System Reset:是MCU在运行起来后发生的Reset,System Reset同样会将整个系统初始化为预先设置的状态。PoweronReset过程中会再触发一个Application Reset。

Debug Reset:该类型Reset实际应用中较少遇到。

Application Reset:同样是MCU在运行起来后发生的Reset,会将所有外设、CPU及SCU初始化。

Module Reset:模块Reset,是小范围内发生的Reset类型,如单核复位,CAN模块复位,这种复位不会对系统其余部分产生影响。

此外,也可以按系统已运行起来与否将Reset划分为WarmReset与Cold Reset:
WarmReset:指系统已经运行起来,且电源保持稳定时触发的复位。

ColdReset:指系统在上电过程中或者在响应临时断电时首次触发的复位。
对于MCU上硬件复位Pin-PORST类型触发的Reset按触发的时机可将其划分为WarmReset或者ColdReset。

另外,还有MCU厂商将Reset整体划分为SoftwareReset及HardwareReaet,再对不同类型的Reset请求进行相应的处理。

3.Reset的处理

3.1 RCU处理流程

在IFX芯片中有个专门处理Reset的模块-RCU(Reset Control Unit),RCU会检测不同的Reset请求,然后调度系统进行Shutdown,对于Warm Reset,在进入内部Reset前系统会自动进入稳定状态,这样保证在Reset发生后的Ram内容的可靠性,可用于后续的Reset排查。

RCU模块Reset处理的的整体逻辑如下图:
Reset基础学习看这篇就够了_第1张图片

3.2 SMU处理流程

对于Reset来源,还有另一个重要模块-SMU,需要介绍下。SMU是负责在MCU运行过程中收集外设发出的Alarm,在Alarm处理时,会根据不同Alarm寄存器的配置进行相应的处理,SMU的
处理逻辑如下图:
Reset基础学习看这篇就够了_第2张图片

4.Reset排查

不管在项目处于什么阶段,Reset都是一个非常困扰开发人员的问题,其来源广,出现工况复杂及可利用信息又不足,下面我们大概介绍几种Reset的排查方法,仅供参考。

4.1 确定是否为供电影响

上电后是否直接就会Reset?这种类型的Reset现象比较直观,直接就跑不起来。此时,可以用示波器测量MCU供电电压是否不足或波动太大?
或者看是否为PORST请求导致的复位?

4.2 借助OS ErrorHook或ProtectionHook

在MCU运行起来后,如果OS发生错误如任务超时,堆栈溢出等会先调用OS ErrorHook或ProtectionHook这两个钩子函数,在这两个函数前打断点再跟踪堆栈的调用关系即可快速定位。

4.3借助芯片寄存器

一般MCU中会提供很多寄存器以记录复位类型,复位发生的地址信息,如在IFX芯片中可用的寄存器有:
RSTST/DATR/DSTR等

你可能感兴趣的:(Autosar扫盲系列,单片机,嵌入式,mcu)