各位前辈好,
目前功能需要透过NB-IoT通信来远距升级MCU软件,
MCU用的是Cortex-M4 NUC442,
如图一原本的代码是放在0x00000000~0x00030000的APROM中(Old Application),
开始升级MCU软件时,
用NB-IoT通讯接收Data,
并用UART传到MCU中,
接着从0x00030000开始烧写新的代码(New Application)
最后使用NUC442内建的Function FMC_SetVectorPageAddr(0x00030000)来改变程式起始位址
但是在下面这两行代码却会当机无法运行,
__set_SP(*(uint32_t *)USER_AP_NEW);
func();
1. 想请问各位这是为什么呢?
还希望有前辈能帮我解释下iap.c的代码
2. 另外还有个问题,
想知道我将新代码写烧写入0x00030000的方式是否有误,
以下是烧写完后,我从0x00030000读取出来的值
0x00030000 = 0x0C
0x00030001 = 0x51
0x00030002 = 0x00
0x00030003 = 0x01
0x00030004 = 0x93
0x00030005 = 0xC0
...
3. 我看到网上有前辈用的是如下图二的方式,
他的代码分为Boot、App1、App2三段,
想问是某一定得有个"BooT"代码才能使用IAP升级呢?
因为我才刚接触这块板子,
上面的流程或观念如果有错还请各位指教,
谢谢!
(图一)
(图二)
|