本文探讨一个奇怪的 MCU NRST 管脚异常复位现象。
这个问题是客户对开发的平台做EMS 浪涌测试的时候发生的,平台上使用了一个STM32G474 RCT6 MCU 。在某个等级的EMS 测试中, 客户发现MCU有时候会异常复位而影响平台的稳定工作。
MCU 异常复位问题的通常解决思路:
我们知道, 导致MCU异常复位的原因有很多, 比如外部复位电路被干扰, MCU 电源的异常跌落, 看门狗不能正常喂狗导致的复位等等。
STM32 MCU 的复位标志位寄存器可以帮助我们发现导致异常复位的线索。
复位标志位的相关信息可以在STM32 MCU 的Reference Manual 中找到。在RCC 节的RCC_CSR 寄存器中,我们可以看到:
图中红色围住的部分就是复位标志相关的寄存器。LPWRRSTF:低功耗模式复位标志位, 被置1 表示发生了非法的STOP, SLEEP 或SHUTDOWN 等低功耗模式进入。WWDGRSTF: 窗口看门狗复位标志。IWDGRSTF: 独立看门狗复位标志。SFTRWTF: 软件复位标志位。BORRSTF: 欠压复位标志位。PINRSTF: 从NRST引脚输入产生的复位的标志位。OBLRSTF: 加载选项字节产生的复位的标志位。 以上的标志位被置1 表示发生了相关的复位。 这些被置1的标志位可以通过向RMVF 位写1清除。 在一次正常的MCU上电过程中, 电压的上升和 PDR 电路的工作必然会导致BORRSTF 和PINRSTF 被置位1, 因此在做EMS实验前, 需要先通过向RMVF 写1将所有复位标志位清除, 然后观察在EMS 测试导致的复位后, 哪些复位标志位被置位了。 例如,当观察到BORRSTF 被置1表示发生了欠压复位, 需要重点检查MCU供电电路包括滤波/退耦电容的设计和布局等等。 PINRSTF 位被置1表示MCU 的NRST 管脚接收到了能够触发复位的异常低电平, 需要检查NRST 的外围电路是如何被干扰的, 或设法增加滤波电路滤除干扰。 WWDGRSTF 或 IWDGRSTF 被置1表示喂狗不正常导致了复位,一般是由程序在 EMS测试中运行不正常进入死循环导致,MCU 被EMS干扰影响的途径相对难以判断,可能是地或某个/些GPIO管脚被EMS 干扰侵入而影响了MCU 的正常运行。 通过观察异常复位发生后的复位标志位,可以使我们避免解决问题时在不相关的电路上浪费时间, 比如如果只有BORRSTF 被置位, 我们需要重点关注供电电路, 而不需要在复位管脚相关电路做无用的调整。在客户开发平台上的排查: 根据上面描述的思路,我们在客户的平台上排查发生异常复位的原因, 通过检查STM32G4 的复位标志位,发现复位发生后PINRSTF 被置 1 了。 这似乎是个简单的NRST 复位管脚被干扰的问题。 但是观察客户的设计, NRST 管脚并没有外接比较长走线的外部电路, 只是在管脚放置了一颗0.1UF 的电容。按常理这样的电路一般不会将干扰引入NRST 管脚
|