wonderwhy 发表于 2024-3-23 14:20:29

32G12K128的IAP升级 | 已解决

我参考官方的IAP下载程序,写了自己的IAP升级程序,目前问题是下载后代码无法跳转,具体信息如下:
1.设置AP程序跳转地址为0XFF2000(已经将用户代码处的0xFF0000-0XFF0003的复位跳转指令映射至0XFF2000-0XFF2003处)

2.用户程序已经按照官方手册设置了keil
3.跳转函数采用官方的Demo


现象:函数运行至跳转函数后,没有运行至AP代码,仍然在IAP代码内卡死在跳转函数


附件图片为FLASH内部代码   










麻烦看一下问题在哪里,为什么无法跳转运行

wonderwhy 发表于 2024-3-23 14:56:57

由于一些原因,不能用STC官方DEMO的上位机,所以本次升级用的其他超级终端升级,麻烦大家看一下,小弟感激不尽
附件:AP串口测试代码(即上述AP代码)



社区闲人 发表于 2024-3-23 15:38:33

在0xFF:0000-0XFF:1999装入BOOTLOADER。

社区闲人 发表于 2024-3-23 15:42:03

然后在BOOTLOADER里设置好跳转。

wonderwhy 发表于 2024-3-23 15:46:00

你好,感谢回复。我的IAP程序是写在在0xFF0000-0XFF1FFF里面的,而且也设置了跳转,目前的问题是跳转失败

wonderwhy 发表于 2024-3-23 15:48:36

社区闲人 发表于 2024-3-23 15:42
然后在BOOTLOADER里设置好跳转。

你好,我设置了,但是跳转失败{:5_358:}

社区闲人 发表于 2024-3-23 16:05:22

用户代码规划到0x2000以后的空间,所以设置code range从0x2000开始
为了让bootloader能准确跳到用户程序入口,所以需要将C_C51STARTUP定位到0x2000位置。
C_STARTUP位于startup.a51里,它才是程序的真正入口,而不是main函数;

wonderwhy 发表于 2024-3-23 16:22:00

社区闲人 发表于 2024-3-23 16:05
用户代码规划到0x2000以后的空间,所以设置code range从0x2000开始
为了让bootloader能准确跳到用户程序入 ...



南海,如图,你说的这个在KEIL我也设置了啊,还是无法跳转

乘风飞扬 发表于 2024-3-25 10:01:23

wonderwhy 发表于 2024-3-23 16:22
南海,如图,你说的这个在KEIL我也设置了啊,还是无法跳转

这是设置中断偏移地址。
跳转方法可以参考官方提供的用户IAP例程包里面ISP目录下的例子:



wonderwhy 发表于 2024-3-25 10:10:03

乘风飞扬 发表于 2024-3-25 10:01
这是设置中断偏移地址。
跳转方法可以参考官方提供的用户IAP例程包里面ISP目录下的例子:



你好,我其实就是用这个官方的代码跳转的,并且我的跳转地址设置在0XFF2000
页: [1] 2 3
查看完整版本: 32G12K128的IAP升级 | 已解决