找回密码
 立即注册
查看: 79|回复: 8

ai8h8k64u实现IAP升级AB分区/求助

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-07 09:17:09
已绑定手机

2

主题

2

回帖

56

积分

注册会员

积分
56
发表于 2025-4-6 22:13:07 | 显示全部楼层 |阅读模式
想要将ai8h8k64u的64kflash分区为bootloader(8k)+appA(28k)+appB(28k),实现AB分区,为了防止iap升级过程中断电变砖,能够回退到旧版本固件;
目前能实现BL+APP分区,但是多了一个APP分区就不会了......主要疑问是在中断向量偏移的问题上;

官网的demo版isp升级程序已经看过了,因为和我的需求有一些差异,我现在有些问题想请问大佬:
1.我是否需要准备两个APP项目;在每个APP项目IDE中都设置他们的Eprom范围和中断偏移;还是只需要一个APP项目?
2.bootloader的ism文件该怎么去做中断向量偏移,才能实现AB分区都能使用中断?


截图202504062209581835.jpg
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-6 22:18:00 | 显示全部楼层
在STC8H8K64U上实现IAP升级的AB分区方案,确实需要仔细处理中断向量偏移和内存分配问题。以下是对您提出的两个问题的详细解答:

1. 是否需要准备两个APP项目?
不需要准备两个独立的APP项目。您可以通过配置编译环境来生成两个不同地址范围的APP固件。具体步骤如下:
单项目配置:在同一个项目中,通过条件编译或不同的编译配置生成两个不同地址范围的固件。例如,使用#ifdef预处理器指令来区分APP A和APP B的地址范围。
IDE设置:在IDE中设置不同的链接脚本或内存映射文件,为APP A和APP B分别指定不同的Flash地址范围。例如,APP A的起始地址为0x2000(8KB Bootloader之后),APP B的起始地址为0x9000(28KB APP A之后)。
中断向量偏移:在每个APP的启动代码中设置中断向量表的偏移。例如,APP A的中断向量表偏移为0x2000,APP B的中断向量表偏移为0x9000。这可以通过修改启动文件或链接脚本来实现。

2. Bootloader的中断向量偏移设置
Bootloader需要能够处理APP A和APP B的中断请求,因此需要设置正确的中断向量偏移。具体步骤如下:
Bootloader中断向量表:Bootloader本身的中断向量表应位于Flash的起始位置(0x0000)。在Bootloader中,您需要实现一个机制来动态跳转到APP A或APP B的中断向量表。
中断向量重定向:在Bootloader中,通过修改中断向量表的地址寄存器(如VTOR),将中断向量表重定向到当前运行的APP的中断向量表。例如,如果当前运行的是APP A,则将VTOR设置为0x2000;如果运行的是APP B,则将VTOR设置为0x9000。
跳转机制:在Bootloader中,根据当前运行的APP,动态设置VTOR寄存器,并跳转到相应的APP入口地址。这可以通过读取Flash中的标志位或配置文件来确定当前运行的APP。

实现步骤总结
1. Bootloader设计:
实现基本的IAP功能,包括固件更新和回滚机制。
设置中断向量表重定向机制,动态跳转到APP A或APP B的中断向量表。

2. APP A和APP B设计:
在同一个项目中,通过条件编译或不同的编译配置生成两个不同地址范围的固件。
在每个APP的启动代码中设置正确的中断向量表偏移。

3. 中断处理:
在Bootloader中,根据当前运行的APP,动态设置VTOR寄存器,确保中断能够正确跳转到APP的中断处理函数。

通过上述步骤,您可以在STC8H8K64U上实现IAP升级的AB分区方案,确保在升级过程中断电时能够回退到旧版本固件,避免变砖。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-6 23:02:11 | 显示全部楼层
首先要明确需求,APP2只是备份还是需要两个APP可切换都可运行?
如果APP2只是备份,当APP1校验不通过时,将APP2复制到1的位置,那就只需要考虑APP在位置1的中断和EEPROM设置。

如果需要两个APP可以切换且都可以使用中断,那么需要一些技巧了。
我能想到的一个办法是中断交给BL处理,APP在一个公共xdata区域注册函数指针表(APPID,中断ID,函数指针),BL判断当前正在运行的APP和要跳转的中断函数指针跳转即可。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-7 08:06:30 | 显示全部楼层
两个分区也不会变砖,用户ISP区是正常的,下载失败重新下载即可,更新只对用户APP区操作,不会操作用户ISP区
更新用户ISP区还有系统ISP区
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2025-4-7 08:21:00 | 显示全部楼层
请教:STC8h8k64u系列型号都可以实现实现IAP升级吗?

点评

这个型号可以的,官网也有例程可以测试 [attachimg]91772[/attachimg]  详情 回复 发表于 2025-4-7 08:35
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-7 08:35:15 | 显示全部楼层
xxkj*** 发表于 2025-4-7 08:21
请教:STC8h8k64u系列型号都可以实现实现IAP升级吗?

这个型号可以的,官网也有例程可以测试
截图202504070835126962.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-07 09:17:09
已绑定手机

2

主题

2

回帖

56

积分

注册会员

积分
56
发表于 2025-4-7 09:17:09 | 显示全部楼层
erci*** 发表于 2025-4-6 23:02
首先要明确需求,APP2只是备份还是需要两个APP可切换都可运行?
如果APP2只是备份,当APP1校验不通过时,将 ...

APP2只是用于备份,这样实现会简单一些吗?

点评

是的会简单很多,当检测APP1校验通过,拷贝一份放到APP2位置备份下。这样APP1就是传统的IAP开发了。  详情 回复 发表于 2025-4-7 09:38
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-07 09:17:09
已绑定手机

2

主题

2

回帖

56

积分

注册会员

积分
56
发表于 2025-4-7 09:33:48 | 显示全部楼层
楚*** 发表于 2025-4-7 09:17
APP2只是用于备份,这样实现会简单一些吗?

我晚点试一下这种实现方法,感觉如果只是为了防止变砖,两个APP分区都去切换并执行中断有点绕远路了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-7 09:38:58 | 显示全部楼层
楚*** 发表于 2025-4-7 09:17
APP2只是用于备份,这样实现会简单一些吗?

是的会简单很多,当检测APP1校验通过,拷贝一份放到APP2位置备份下。这样APP1就是传统的IAP开发了。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:27 , Processed in 0.260086 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表