找回密码
 立即注册
查看: 336|回复: 9

CAN-ISP例程增加下载缓冲防【突然停电】变砖功能,AB分区切换

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2026-03-05 08:52:40
已绑定手机

102

主题

4131

回帖

9087

积分

荣誉版主

无情的代码机器

积分
9087
发表于 2026-1-26 11:08:23 | 显示全部楼层 |阅读模式
相较于官网【STC-official-user-CAN-ISP-bootloader-demo-STC32G12K128-series】例程修改点:
1.ROM布局:ISP+A+B+EEPROM区,用户ISP扩容至8K,A\B皆是56K,EEPROM区8K末尾扇区存放OTA参数
这里B区主要用于下载缓存新固件
A区用于实际运行用户APP
PS:为什么不在B区直接激活运行?需要维护两套APP工程,代码地址映射及中断映射。

截图202601261115385029.jpg
2.用户ISP升级下载过程擦除只擦B区,确保升级流程中断也可重启正常开机进入A区
3.升级下载流程结束后,将固件校验和及长度写入OTA参数区,
   重启后用户ISP检测该参数,合法则搬运B区代码到A区,搬运完成则清除参数。
4.原有示例工具及TOOL工程删除,替换为更通用的CDC2CAN工具。上位机使用 Python代码示例。



硬件连接示意:
截图202601261422419506.jpg
操作说明:
1.工具板下载USB-CDC_to_CAN工程
2.准备APP固件,使用py/appHex2bin.py,将hex转为bin文件,会自动裁剪LDR_SIZE,并把前三字节拷贝至APP起始处
3.下载用户ISP工程,下载时EEPROM选择128K
截图202601261424453602.jpg
4.打开py/main.py,更改工具板CDC串口号及bin文件路径,保存执行。

升级过程日志示例:
截图202601261427307820.jpg

STC-official-user-CAN-ISP-bootloader-demo-STC32G12K128-series_V2026012603.zip (546.67 KB, 下载次数: 6)

相关链接:
CAN总线在线升级例程发布,视频演示,车规 - CAN/Lin/最便宜的车规MCU, AEC-Q100 Grade1(-40 ~ +125度) 国芯人工智能技术交流网站 - AI32位8051交流社区
CAN视频教学, USB 转 2组CAN, AiCube-ISP, 【CAN助手】收发测试 - CAN/Lin/最便宜的车规MCU, AEC-Q100 Grade1(-40 ~ +125度) 国芯人工智能技术交流网站 - AI32位8051交流社区
一种简单合并ISP和APP程序文件的方法 - ISP下载/做自己的ISP 国芯人工智能技术交流网站 - AI32位8051交流社区
一种USER_ISP和USER_APP共用中断方法 - ISP下载/做自己的ISP 国芯人工智能技术交流网站 - AI32位8051交流社区



1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2026-03-05 08:52:40
已绑定手机

102

主题

4131

回帖

9087

积分

荣誉版主

无情的代码机器

积分
9087
发表于 2026-1-26 20:51:31 | 显示全部楼层
基于STC32G144K246型号带用户系统区和用户程序区版本:

先来观察下EEPROM操作差异:
在用户系统区的IAP操作使用绝对地址。
相较于Ai8051U,在用户系统区无法使用IAP操作读取系统区空间了,
可以用ecode指针读取,指针地址是从0xFF0000开始,注意和存储器的物理地址0xFF0000不同,只是用户系统区的逻辑地址。

截图202601262050075083.jpg
ROM划分:
截图202601262107484034.jpg
基于实验箱测试,硬件连接示意:
截图202601262103068536.jpg


注意下载时的ISP选项:
截图202601262103501591.jpg

带用户系统区,则不再需要用户区代码地址映射以及中断映射。



三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2026-03-05 08:52:40
已绑定手机

102

主题

4131

回帖

9087

积分

荣誉版主

无情的代码机器

积分
9087
发表于 2026-1-30 14:54:50 | 显示全部楼层
在2L基础上增加C区,支持激活A或B区。
激活B区逻辑:
搬运A区到C区备份,并锁定C区。搬运B区到A区执行。
下次升级前需要切回A区再开始擦写C区。


ROM分配变化:
截图202601301451347877.jpg

ISP下载选项变化:
截图202601311610338131.jpg

python命令变化:
截图202601301452409468.jpg

整体流程:
截图202601301452088445.jpg


STC-official-usys-CAN-ISP-bootloader-demo-STC32G144K246-series_V2026013001.zip (843.9 KB, 下载次数: 3)





三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:823
  • 最近打卡:2026-03-05 08:20:20
已绑定手机

58

主题

2004

回帖

3568

积分

论坛元老

积分
3568
发表于 2026-1-31 16:48:24 | 显示全部楼层
楼主超赞

点评

基操勿六~ {:4_164:}  发表于 2026-1-31 20:34
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-03-04 13:43:02

14

主题

53

回帖

925

积分

高级会员

积分
925
发表于 6 天前 | 显示全部楼层
你好, 那么PC端必须安装  Python哈。

点评

非必须只是示例,PC端用你自己熟悉的语言就行  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2026-03-05 08:52:40
已绑定手机

102

主题

4131

回帖

9087

积分

荣誉版主

无情的代码机器

积分
9087
发表于 6 天前 | 显示全部楼层
Mike*** 发表于 2026-2-27 13:17
你好, 那么PC端必须安装  Python哈。

非必须只是示例,PC端用你自己熟悉的语言就行
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-03-04 13:43:02

14

主题

53

回帖

925

积分

高级会员

积分
925
发表于 5 天前 | 显示全部楼层
erci*** 发表于 2026-2-27 14:08
非必须只是示例,PC端用你自己熟悉的语言就行

好的, 裁剪是必须的么?

点评

这个也是看你上位机和用户ISP怎么配合,只要把代码写到正确的ROM位置就行  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2026-03-05 08:52:40
已绑定手机

102

主题

4131

回帖

9087

积分

荣誉版主

无情的代码机器

积分
9087
发表于 5 天前 | 显示全部楼层
Mike*** 发表于 2026-2-28 11:09
好的, 裁剪是必须的么?

这个也是看你上位机和用户ISP怎么配合,只要把代码写到正确的ROM位置就行
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-03-04 13:43:02

14

主题

53

回帖

925

积分

高级会员

积分
925
发表于 5 天前 | 显示全部楼层
erci*** 发表于 2026-2-28 15:40
这个也是看你上位机和用户ISP怎么配合,只要把代码写到正确的ROM位置就行
...

好的, 感谢了。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-5 22:42 , Processed in 0.117066 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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