MPC5604B/C MC_RGM 复位模块全解

一、前言

本文章主要说明芯片被谁复位了?复位后是什么状态?哪些复位会影响数据?软件如何识别复位原因?

MC_RGM 是整个芯片的 **"复位总指挥"**:

  • 管理所有复位来源
  • 决定复位是 "破坏性" 还是 "功能性"
  • 记录复位状态(你能读到上一次为什么重启)
  • 与 MC_ME / MC_PCU / CMU 联动实现安全机制

二、MPC5604B/C 所有复位来源

芯片支持 两大类复位:破坏性复位 + 功能性复位。

1)破坏性复位(Destructive Resets)

⚠️ 一旦发生:寄存器、内存状态全部丢失!

包括:

  • POR(上电复位)
  • 外部复位 RESET 引脚拉低
  • LVD 低压检测复位

2)功能性复位(Functional Resets)

⚠️ 内核与外设重启,但内存、配置保持适合软件异常恢复、看门狗、时钟失效。

包括:

  • SWT 软件看门狗复位
  • CMU 时钟失效复位
  • 软件触发复位(软复位)
  • lockup 内核锁死复位
  • MPU 访问非法地址复位

三、复位触发优先级(重要)

破坏性复位 > 功能性复位

只要出现 POR / LVD / 外部复位,无论什么功能复位都无效,直接全芯片重启。

四、复位状态机(FSM)

MC_RGM 内部有一个状态机:

RESET

POWER_ON → 等待稳压稳定

DESTructive → 清除所有逻辑

FUNCTIONal → 仅复位CPU/外设

NORMAL → 正常运行

软件可以通过 状态寄存器 判断当前处于哪个阶段。

五、复位状态寄存器

这是量产定位死机最重要的寄存器,没有之一!

通过读取 RGM status,你可以知道:

  • 上次是上电重启
  • 还是外部复位
  • 还是看门狗复位
  • 还是低压复位
  • 还是时钟挂了

车载 ECU 必须存储复位原因到 Flash,用于售后诊断。

六、外部复位引脚 RESET

  • 双向引脚
  • 内部弱上拉
  • 施密特触发 + 噪声滤波
  • 低电平有效

⚠️ 硬件注意:外部复位脚不能浮空,必须上拉或由调试器 / MCU 管理。

七、复位与启动模式的关系

复位时会锁存:

  • PA8 ABS
  • PA9 FAB

决定启动模式:

  • Flash 启动
  • CAN 启动
  • LIN 启动

也就是说:每次复位都会重新决定从哪里启动。

八、低功耗模式与复位

  • STANDBY 模式下,大部分复位仍有效
  • 唤醒事件也会通过 RGM 触发重启流程
  • 确保低功耗下依然能安全唤醒 / 复位

九、总结

  • 复位分两类:破坏性(全丢)、功能性(内存保留)
  • 破坏性复位:POR / 外部引脚 / LVD
  • 功能性复位:看门狗、时钟失效、软件复位、MPU 错误
  • 复位状态寄存器 = 定位死机原因的神器
  • 外部复位 RESET 引脚低电平有效、带滤波
  • 每次复位都会重新采样 PA8/PA9 → 重新决定启动模式
  • 优先级:破坏性复位 > 功能性复位
  • 复位后默认时钟 = FIRC 16MHz
  • 功能安全必须依赖 RGM 做故障恢复
相关推荐
努力的lpp4 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob2334 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
泡海椒5 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb5 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
T1mzhou6 小时前
ARM64 Linux 6.10内核启动流程7-ioremap和readl writel
linux·服务器·c语言
芯片人0076 小时前
纯硬件一键开关机ASIC芯片,为什么比 MCU 方案更适合更可靠
人工智能·单片机·嵌入式硬件·物联网·芯片
Keven_116 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
脉动数据行情17 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕7 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2337 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab