问题描述:
用Simplicity Studio的调试功能下载程序到芯片,CPU不停在main入口处,而是直接跑飞。用Debug界面上的复位按钮把芯片复位,可以看到CPU停在地址0x0FE10000处,但是反汇编窗口显示该处全是0xFF。
如下图表,此处是bootloader。
用Simplicity Studio或Simplicity Commander是不会擦除这个区域的。但是如果用Segger J-Flash的整片擦除功能,那么就会把这个区域擦掉,如下消息所示:
Connecting …
- Connecting via USB to J-Link device 0
- Target interface speed: 2000 kHz (Auto)
- VTarget = 2.997V
- Executing init sequence …
- Initialized successfully
- Target interface speed: 2000 kHz (Auto)
- J-Link found 1 JTAG device. Core ID: 0x2BA01477 (None)
- Connected successfully
Erasing chip … - 266 sectors, 4 ranges, 0x0 - 0x7FFFF, 0xFE00000 - 0xFE007FF, 0xFE04000 - 0xFE047FF, 0xFE10000 - 0xFE13FFF
解决方法:
(1) 用Segger J-Flash把Lock Bits(LB)page中的CLW0中的Bootloader enable位(Bit 1)写成0。(*(0x0FE041E8) = 0xFC)
(2) 用Segger J-Flash把正常芯片的bootloader读出来(0x0FE10000 - 0x0FE13FFF),存成HEX文件,然后烧写到故障芯片中。