问题记录:华大 HC32F460 超频过猛导致 MCU 宕机

最近又把 MCU 给干废了,现象如下:

Load "main.axf"
* JLink Info: Device "CORTEX-M4" selected.
Set JLink Project File to "JLinkSettings.ini"
* JLink Info: Device "CORTEX-M4" selected.

JLink info:
------------
DLL: V7.22b, compiled Jun 17 2021 17:22:49
Firmware: J-Link V9 compiled May 7 2021 16:26:12
Hardware: V9.60
S/N : 69667602
Feature(s) : RDI, GDB, FlashDL, FlashBP, JFlash

* JLink Info: Found SW-DP with ID 0x2BA01477
* JLink Info: DPIDR: 0x2BA01477
* JLink Info: Scanning AP map to find all available APs
* JLink Info: AP[1]: Stopped AP scan as end of AP map has been reached
* JLink Info: AP[0]: AHB-AP (IDR: 0x24770011)
* JLink Info: Iterating through AP map to find AHB-AP to use
* JLink Info: AP[0]: Skipped. Invalid implementer code read from CPUIDVal[31:24] = 0x00
* JLink Info: Found SW-DP with ID 0x2BA01477
* JLink Info: DPIDR: 0x2BA01477
* JLink Info: Scanning AP map to find all available APs
* JLink Info: AP[1]: Stopped AP scan as end of AP map has been reached
* JLink Info: AP[0]: AHB-AP (IDR: 0x24770011)
* JLink Info: Iterating through AP map to find AHB-AP to use
* JLink Info: AP[0]: Skipped. Invalid implementer code read from CPUIDVal[31:24] = 0x00

***JLink Error: Could not find core in Coresight setup

Error: Flash Download failed - Target DLL has been cancelled
Flash Load finished at 10:35:22

事情经过是这样的,某款产品第一版硬件的时钟源选用的是 6MHz 的外部晶振,内部倍频至 128MHz 作为系统主频,而第二版则改成了 24MHz 的外部晶振,第二版硬件出来后,将第一版程序直接烧录进第二版硬件后 MCU 无法正常启动且无法被识别。

初步推测,应该是外部晶振频率提高,但是程序没有进行适当地分频,导致系统主频远远超过数据手册中规定的频率上限(200MHz)。

128MHz×(24MHz/6MHz)=512MHz   >   MAX(200MHz)

后面通过调试,证实程序的确是在 M4_SYSREG->CMU_CKSWR_f.CKSW = enTargetSysSrc; 处出现异常。

上述操作其实就是「超频」,只是超得有点猛,导致芯片直接宕机。这种情况借助华大的离线下载器重新烧录程序即可恢复正常。