一、前言
本文章主要说明芯片被谁复位了?复位后是什么状态?哪些复位会影响数据?软件如何识别复位原因?
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 管理。
七、复位与启动模式的关系
复位时会锁存:
- PA[8] ABS
- PA[9] FAB
决定启动模式:
- Flash 启动
- CAN 启动
- LIN 启动
也就是说:每次复位都会重新决定从哪里启动。
八、低功耗模式与复位
- STANDBY 模式下,大部分复位仍有效
- 唤醒事件也会通过 RGM 触发重启流程
- 确保低功耗下依然能安全唤醒 / 复位
九、总结
- 复位分两类:破坏性(全丢)、功能性(内存保留)
- 破坏性复位:POR / 外部引脚 / LVD
- 功能性复位:看门狗、时钟失效、软件复位、MPU 错误
- 复位状态寄存器 = 定位死机原因的神器
- 外部复位 RESET 引脚低电平有效、带滤波
- 每次复位都会重新采样 PA8/PA9 → 重新决定启动模式
- 优先级:破坏性复位 > 功能性复位
- 复位后默认时钟 = FIRC 16MHz
- 功能安全必须依赖 RGM 做故障恢复