想請問 Cortex-M4 NUC442 IAP功能的实现(OTA下載)

snfr067 |浏览2132次
收藏|2018/03/28 12:37

目前功能需要透过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升级呢?


因为我才刚接触这块板子,

上面的流程或观念如果有错还请各位指教,

谢谢!

(图一)

(图二)




满意回答

2022/09/06 18:02

是的,一定要有一个boot程序,不然复位之后,系统vector table默认又变成0x0的位置。远程升级有好几步流程,要注意的点比较多,可以参考下面文件

AN_0000_IAP Application Note_SC_V1.24.pdf

Angus

其他回答(0)
1人关注该问题
+1
 加载中...