英飞凌SMU模块介绍

1 概述

       英飞凌Tc3xx有上百种安全机制,当有出现安全机制的违背时,硬件会自动触发一个alarm到SMU单元。然后SMU单元可以根据用户对于安全机制违背的严重度进行响应配置,一般是reset或者中断。例如当内部看门狗超时,会触发一个alarm,SMU可以将这个alarm配置为reset 。

      TC3xx系列的产品有core域有11个group,standby域有2个group,每个group有32位,即代表着有32个alarm,当然有些位是reserve区域。

2 SMU模块架构

SMU架构图:

2.1 SMU_Core

       核心域SMU,也称为SMU_core,从硬件监视器、安全机制中收集大部分警报信号,由安全概念定义。报警映射部分指定了报警接口,并将其分类为报警组。报警组定义一个逻辑映射,用于将报警信号映射到内部状态寄存器。

2.2 SMU_stdby

        备用域SMU,也称为SMU_stdby,收集从检测时钟(无时钟)、电源(低/过电压)和温度故障(低/过温度)的模块中发出的警报。SMU_stdby还收集SMU_alive报警信号,在发出警报后,当SMU_core没有触发反应时发出通知。此外,SMU_stdby还实现了一个内置的自检功能,允许用户测试SMU_stdby对报警信号的反应,以及从二次电压监视器到SMU_stdby的完整报警路径。有关辅助显示器和SMU_stdby内置自测试的详细信息。

3 SMU接口

SMU接口图

3.1 Alarm Mapping

     Core域Alarm :ALM0[32]-ALM11[32];  standby域Alarm:ALM20[32]-ALM21[32]

Alarm定义可查询《Infineon-AURIX_TC39x-UserManua》手册.

3.2 Alarm 处理机制

        在接收到警报事件时,SMU_core将解码要执行的操作。这个动作可以分为内部行为和外部行为。可以为每个报警配置内部和外部行为。

1)外部行为与故障信令协议相关(故障信令协议FSP)。

    外部行为通过以下寄存器配置:AGiFSP(i=0-11)

2)SMU的内部行为通过以下寄存器控制:

    AGiCFj(i=0-11;j=0-2)内部行为由3位代码指定如下:

   SMU_AG<n>CF2。SMU_AG<n>CF1。SMU_AG<n>CF0,n=0……11

3.2.1 内部行为响应机制

通过SMU_AG_CF0,SMU_AG_CF1,SMU_AG_CF2。三个寄存器的同一bit位组成0x0-0x7值。

SMU core中的alarm可以配置为以下响应:

       .SMU_NA: 不响应

       .SMU_RSVD:预留,不响应

       .SMU_IGCSx:发送中断请求到IGCSx

       .SMU_NMI:SMU配置一个NMI中断发送到SCU单元

        .SMU_RESET:配置一个reset请求发送到SCU单元

        .SMU_CPU_RESET:配置某个CPU的reset 请求

3.2.2 外部行为响应机制

3.2.2.1 FSP协议

        当报警配置为激活FSP时,SMU_core会自动切换到故障状态。在此期间,与安全相关的软件也有可能尝试分析根本原因(当微控制器仍在运行时),并确定错误的严重程度。

       FSP进入Fault Free State后会发送PWM波,故障时会拉低FSP管脚,此管脚一般外接到电源芯片TLF35584的ErrPin管脚上,35584监控到此管脚拉低后,复位MCU。

3.2.2.2 ErrorPin管脚

          FSP可通过寄存器连接到MCU的Port33.8,Port33.10上输出信号。

4 Watchdog Alarm

       看门狗(WDT)超时警报需要进行特殊处理,以便进行处理,以确保正确的微控制器行为。应确保微控制器在一个预警阶段后复位,此时软件仍可执行一些关键操作。
     .每次超时报警应激活NMI
     .恢复定时器0应配置为服务WDT安全超时警报WDT,CPU0 WDT,CPU1 WDT和CPU2 WDT        .恢复定时器1应配置为服务WDT超时警报CPU3 WDT、CPU4 WDT和CPU5 WDT
     .恢复定时器RT0和恢复定时器RT1超时警报应配置为发出重置请求并激活故障信号协议。
      上述属性被实现为看门狗超时报警器和恢复定时器0和1的重置值。
      图中只显示了RTAC 0和相关的四个WDT的示例。以同样的方式设置了RTAC 1和相关的WDT3、WDT4和WDT5。由于从CPU执行的第一个指令开始也需要进行看门狗超时检测,因此SMU应在启动状态下处理任何看门狗超时告警。

4.1 查询watchdog AlarmGroup ID

     CPU看门狗Alram定义为Alarm[10]-Alarm[15]:

4.2 使能Watchdog Alarm

4.3 配置RecoverTime

       RT0配置CPU0 WDT,CPU1 WDT和CPU2.可配置4个Alarm。

      RT1配置CPU3 WDT,CPU4 WDT和CPU5..可配置4个Alarm。

4.4 配置SMU Reset类型

     配置Reset 类型为SMU_Reset,喂狗超时将触发一个复位信号到SCU模块RCU复位单元。

4.5 配置SCU模块RCU单元Reset类型

4.5 使能FSP输出

        是使能FSP输出后,watchdog异常会拉低ErrorPin.

4.6 查看Alarm状态

       通过Alarm Status Register 寄存器可以观察watchdog模块释放触发Alarm。

### 关于 `free` 函数导致 Segmentation Fault 11 错误的原因及解决方法 #### 原因分析 Segmentation Fault 11 是指程序尝试访问未分配给它的内存区域,这通常发生在不当使用动态内存管理函数时。对于 `free` 函数而言,常见的引发此错误的情况有: - **重复释放同一块内存**:当试图多次调用 `free` 来释放已经释放过的指针所指向的空间时会发生这种情况[^1]。 - **非法地址传递给 `free`**:如果传入的是从未通过 `malloc`, `calloc`, 或者 `realloc` 分配得到的指针,则会触发异常。 - **越界写操作破坏堆结构**:在数组或其他数据结构上执行超出其边界范围的操作可能会覆盖相邻对象的数据甚至控制信息(如大小记录),进而影响到后续对该部分内存空间的正常回收过程。 - **悬空指针问题**:即使某段内存被成功释放之后,原先持有的那个指针仍然保持原样不变;如果不小心继续利用它来读取或修改对应位置的内容就会造成不可预测的行为。 ```c char *ptr = NULL; if ((ptr = (char *)malloc(sizeof(char))) != NULL){ strcpy(ptr,"hello"); } // 正确做法是在这里设置 ptr=NULL 防止后面误用已释放资源 free(ptr); strcpy(ptr, "world"); // 这里会产生 segmentation fault ``` #### 解决方案 为了防止上述情况的发生并有效处理由 `free` 导致的 Segmentation Fault 11 错误,可以采取如下措施: - **确保每次只释放一次**:一旦完成对某个指针代表的存储区间的清理工作后立即将该变量置零 (`NULL`) ,从而避免意外地对其进行二次清除。 - **验证输入参数合法性**:在实际应用之前先确认待解绑的对象确实是由标准库提供的相应接口创建出来的实例而非其他途径获取来的随机数值。 - **遵循良好的编程习惯**:比如采用 RAII (Resource Acquisition Is Initialization)模式,在类构造器内初始化成员属性而在析构器里面负责销毁它们;或者借助智能指针自动追踪生命周期变化以减少手动干预带来的风险。 - **调试工具辅助排查**:Valgrind 和 AddressSanitizer 等静态分析软件可以帮助定位潜在隐患所在之处,并给出改进建议。 ```bash valgrind --leak-check=yes ./your_program_name gcc -fsanitize=address your_code_file.c -o output_executable ./output_executable ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值