英飞凌TC3XX芯片执行软件复位后初始化失败的问题
在使用TC3xx芯片开发过程中,调用Mcu_PerformReset()接口函数进行软件复位,发现复位后restart,卡死在初始化过程中。调用call stack发现,core0压栈情况如下
core1压栈情况为
2、问题定位
查询memory地址发现,core1的地址为非法地址。在core0的det中打断点,查看local如下图
查询手册AUTOSAR_TR_BSWModuleList.pdf
找到ModuleId为101的对应模块Mcu。在Mcu.h中查询到ApiId为0对应Api为Mcu_Init()
ErrorId为17对应错误为Mcu初始化失败
3、猜想及验证
由于调用的接口为软件复位,查询手册可知软件复位不会清ram,猜测可能是mcu初始化时校验ram,发现其中初始值不为0导致的错误。
修改定段信息,将原本定段为NOINIT的变量改为定段到ZERO_INIT中,即初始化为0。
重新编译验证发现可以正常restart,证实了猜想。
4、问题解决
方案一 通过修改定段,修改MemMap_Common.h文件,将定段为NOINIT的变量改为定段到ZERO_INIT中。
方案二 调用autosar下电流程
调用Vector SIP包中ECUM模块的接口执行复位,在EcuM_AL_Reset函数中将ram清0。
复位函数接口如下
EcuM_AL_Reset中清零ram代码如下
在软件复位后,某些复位源可能未被正确清除,导致初始化失败。解决方法:检查复位源寄存器(如RSTSTAT),确保所有复位源已被正确清除 复位后,时钟配置可能未正确初始化,导致系统无法正常运行。请检查时钟配置寄存器(如SCU_CLK),确保时钟源和分频器配置正确。 某些外设可能需要在特定顺序下初始化,否则可能导致初始化失败。一般解决可以检查外设初始化顺序,确保按照正确的顺序进行初始化。 复位后,内存(如SRAM、Flash)可能未正确初始化,导致程序无法正常运行。其实你可以检查内存初始化代码,确保内存配置正确。 中断配置问题,复位后,中断配置可能未正确初始化,导致系统无法响应中断。如果是这样,可以检查中断配置寄存器(如SCU_IR),确保中断配置正确。 电源管理模块可能未正确初始化,导致系统无法正常供电,可能也这样,检查电源管理寄存器(如SCU_PM),确保电源配置正确 软件复位代码可能存在问题,导致复位后系统无法正常初始化。一般可以检查软件复位代码,确保复位操作正确执行。 硬件可能存在故障,导致复位后初始化失败。解决方法如下检查硬件连接和电源供应,确保硬件正常工作 使用调试工具(如JTAG、Trace32)可以帮助定位问题。使用调试工具逐步检查复位后的系统状态,定位问题所在。 你这个现象没遇到过,其实可以参考英飞凌提供的技术手册和示例代码可以帮助解决问题。
页:
[1]