S32K344复位操作方法

电子说

1.3w人已加入

描述

    移植 S32K144 软件复位代码到 S32K344 如下:

void SystemSoftwareReset(void)

{

uint32 regValue;

/* 读取中断和复位控制寄存器 */
regValue = S32_SCB->AIRCR;

/* 清除寄存器 */
regValue &= ~( SCB_AIRCR_VECTKEYSTAT_Msk);

/* 配置系统复位请求位 */
regValue |=(((uint32)(((uint32)(0x05FAU))< regValue |=(((uint32)(((uint32)(0x1U))<

/* 写寄存器数值 */
S32_SCB->AIRCR = regValue;

}

    但却工作不正常。检查 Contex M7 内核的 SCB寄存器和 Cortex M4 是一致的,为什么在 S32K144上可以工作,却在 S32K344上不能工作呢?因为这并没有在 S32K3上实现,S32K3 RM 参考手册中列出了所有的复位源。

Table 153. Destructive reset sources

Table 155. Functional reset sources

计数器

    通过读取 DCMROF20[DCF_DEST_RST_ESC]寄存器可以确定是否使能成功。

计数器

    使用RTD API 

“Power_Ip_MC_ME_SocTriggerResetEvent(Power_Ip_FUNC_RESET_MODE)”

    以触发软件中的功能复位。它基本上按预期工作。每次调用此函数后,可以看到S32K3被复位(MCU PC被设置为复位处理程序起始地址),复位计数器寄存器MC_RGM[FRIC]增加1(假设MC_RGM[DES]破坏性复位标志在第一次POR复位后被清除,软件中需要配置驱动初始化代码RTD MCU_Init )。可以看到,功能复位计数器阈值MC_RGM[FRET]是15。预计15次功能复位后将发生破坏性复位。但实际结果是,当功能复位计数器RGM[FRIC]达到8时,MCU PC被设置为RAM地址0x20427F2C,而不是像之前的7个复位事件那样被设置为复位处理器地址。在0x20427F2C,它是一个分支到自身的无限循环。为什么功能复位计数器达到8会导致这种情况 PCC被复位为“0x20427F2C”而不是reset_handler。

    根据 S32K3参考手册的 " 31.12 Recovery mode sequence"",在 8次功能复位后,安全 sBAF 将执行复位序列——也就是说,应用程序内核可能被在某个RAM地址中无限循环。

    根据参考手册 "31.15.2 DCM Register DCMRWP1", DCMRWP1 位23 应当能够控制这个表现。如果该位设置为 1, 禁止恢复模式。即便设置为1,恢复模式序列仍然被 sBAF执行。 

    当应用问题大于 8次功能复位的时候,设置 DCMRWP1[22] 位,这个位禁止应用恢复模式。当应用问题大于 8次破坏性复位的时候,设置 DCMRWP1[23] 位, 这个位禁止应用恢复模式。

    尝试过操作 DCMRWP1[22] ,但是没有效果。根据参考手册,DCMRWP1[16~20] 和 DCMRWP1[11~14] 也执行 sBAF控制的复位计数器,但是这些寄存器没有变化,可能是sBAF版本的问题,新版本应该没有这个问题。在 MCU应用初始化时,手动清除功能复位计数寄存器 RGM FRET。

    IP_MC_RGM->FRET= 0xFF; 

//写 1 来清除 FREC 寄存器

临时解决方案是:MCU_Init() 代码调用驱动函数Power_Ip_MC_RGM_ResetInit() 中添加如下判断条件即可。

计数器 ​ 注意:使用  Power_Ip_MC_ME_SocTriggerResetEvent(POWER_IP_FUNC_RESET_MODE) 复位 MCU, 该函数会复位 PTA5 (Reset_B 复位引脚)。在代码里面做一个100ms 周期性的代码复位操作,可以看到 PTA5有这个复位波形。在RTD里面配置关闭 Functional reset escalation 函数,设置如下。

计数器

    Mcu Reset Type 配置调用Mcu_PerformReset();接口时是执行Functional Reset还是Destructive Reset
Mcu Functional Reset Escalation Threshold (0 -> 15) 配置Functional Reset的阈值,0表示关闭此功能,若配置为n,则n次Functional Reset后会自动执行一次Destructive Reset
Mcu Destructive Reset Escalation Threshold (0 -> 15) 配置Destructive Reset的阈值,0表示关闭此功能,若配置为n,则n次Functional Reset后会保持在Reset状态,直到下一次power-on reset后重启。如下表中复位源,会导致 Reset脚发生复位。

计数器

计数器

    唯一不复位的操作选项是,在 DCF中,禁用复位引脚功能。设置 Reset pad dedicated为 0,使用GPIO口功能,而不是复位功能引脚。默认是1表示作为复位引脚功能。

计数器

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分