CAN-ISP例程增加下载缓冲防【突然停电】变砖功能,AB分区切换
相较于官网【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工程,代码地址映射及中断映射。
2.用户ISP升级下载过程擦除只擦B区,确保升级流程中断也可重启正常开机进入A区
3.升级下载流程结束后,将固件校验和及长度写入OTA参数区,
重启后用户ISP检测该参数,合法则搬运B区代码到A区,搬运完成则清除参数。
4.原有示例工具及TOOL工程删除,替换为更通用的CDC2CAN工具。上位机使用 Python代码示例。
硬件连接示意:
操作说明:
1.工具板下载USB-CDC_to_CAN工程
2.准备APP固件,使用py/appHex2bin.py,将hex转为bin文件,会自动裁剪LDR_SIZE,并把前三字节拷贝至APP起始处
3.下载用户ISP工程,下载时EEPROM选择128K
4.打开py/main.py,更改工具板CDC串口号及bin文件路径,保存执行。
升级过程日志示例:
相关链接:
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交流社区
基于STC32G144K246型号带用户系统区和用户程序区版本:
先来观察下EEPROM操作差异:
在用户系统区的IAP操作使用绝对地址。
相较于Ai8051U,在用户系统区无法使用IAP操作读取系统区空间了,
可以用ecode指针读取,指针地址是从0xFF0000开始,注意和存储器的物理地址0xFF0000不同,只是用户系统区的逻辑地址。
ROM划分:
基于实验箱测试,硬件连接示意:
注意下载时的ISP选项:
带用户系统区,则不再需要用户区代码地址映射以及中断映射。
在2L基础上增加C区,支持激活A或B区。
激活B区逻辑:
搬运A区到C区备份,并锁定C区。搬运B区到A区执行。
下次升级前需要切回A区再开始擦写C区。
ROM分配变化:
ISP下载选项变化:
python命令变化:
整体流程:
{:4_174:}楼主超赞 你好, 那么PC端必须安装Python哈。 MikeXue 发表于 2026-2-27 13:17
你好, 那么PC端必须安装Python哈。
非必须只是示例,PC端用你自己熟悉的语言就行
ercircle 发表于 2026-2-27 14:08
非必须只是示例,PC端用你自己熟悉的语言就行
好的, 裁剪是必须的么? MikeXue 发表于 2026-2-28 11:09
好的, 裁剪是必须的么?
这个也是看你上位机和用户ISP怎么配合,只要把代码写到正确的ROM位置就行
ercircle 发表于 2026-2-28 15:40
这个也是看你上位机和用户ISP怎么配合,只要把代码写到正确的ROM位置就行
...
好的, 感谢了。 4.打开py/main.py,更改工具板CDC串口号及bin文件路径,保存执行。 这个用哪个软件打开?具体如何操作?
页:
[1]
2