在线时间185 小时
UID3375312
注册时间2017-6-28
NXP金币12
TA的每日心情 | 开心 2020-12-17 09:04 |
---|
签到天数: 346 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 1363
- 最后登录
- 2025-5-7
|
发表于 2022-1-5 14:16:24
|
显示全部楼层
您好,针对这个问题建议您首先对该MCU的Flsha有一个比较详细的了解。下面附上一张Flash的地址空间。在执行IAP的upgrade之前确保你的APP程序code已经写入进去了。举个例子,例如user ram是从0x0000000开始的有效地址范围为64K,您可以分配0x00000000-0x00000400为16K为bootloader,后面44K为APP程序地址,最后的4预留下来不要写满,有些重要的OTP程序可能存储在其中。至于怎么跳转可以参照一下官方其他LPC系列的MCU,通用移植性很高。下面附上一个example:
当程序全部写入到Flash后,设置出发条件,跳转到应用程序,首先修改中断向量表然后进入应用程序
void Boot( void )
{
SCB->VTOR = IMG_START_SECTOR & 0x1FFFFF80; //修改中断向量表
JMP_Boot(IMG_START_SECTOR);
}
堆栈地址更新,PC地址更新
__asm void JMP_Boot( uint32_t address ){
LDR SP, [R0] ;堆栈地址更新
LDR PC, [R0, #4] ;进入应用程序
} |
|