找回密码
 立即注册
查看: 128|回复: 14

4G模块OTA升级

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

1

主题

9

回帖

33

积分

新手上路

积分
33
发表于 前天 16:28 | 显示全部楼层 |阅读模式
  这次刚好有个项目是用STC12G12K128,要求通过4g模块支持远程升级功能。之前arm的32位单片机远程升级应用过,51单片机还没试过,因此根据32单片机经验尝试设计51单片机OTA;

方案如下:
一.   flash分配
   1.由于flash足够大,因此下载的固件不使用外挂flash,整个flash分成boot,app,app_update,epprom四部分,地址分配如下:
     boot地址范围FE:0000H~FE:27FFH,10k空间作为引导判断,
     app地址范围FE:2800H~FE:FFFFH,54k空间是用户正常运行程序,
     app_update地址范围FF:1000H~FF:FBFF,63K空间是最新升级固件包
     epprom地址范围FF:FC00~FF:FFFF,1k1k空间用于保存参数(比如升级标志位)
二.运行流程
   1.设备上电先运行boot程序读取参数,如果升级标记位未设置则跳转到app运行,否则进入刷新固件,将app_update位置固件数据写入到app中。
   2.app程序,通过cat1模块与平台通信,将升级固件下载并放置在app_update区域,,数据下载结束后进行数据包检验,校验通过修改升级标记位并重启设备;

app程序,在mdk设置的rom地址偏移以及中断向量偏移,用最新的V6.95U版本ISp软件下载固件,初步测试结果,很遗憾宣告失败。事情完全不是我想象的这样,51内核做ota,现在有几个疑问请教下大家
三.疑问篇
  1.boot和app两个程序,mdk软件应该分别如何设置,尤其是程序偏移地址和中断向量偏移
  2.app程序,软件上是都需要特殊处理,比如mian函数之后先进行特殊设置然后再初始化
  3.设备上电后,内存以及ram启动流程是什么顺序
  4.手册上说“,用户ISP代码会占据FF:0000H~FF:0FFFH的4K字节”,这个isp内容我们可以修改吗,大小是否被限定在4k不能变化?
  5.我规划的4个区域,地址规划是否合理?(从手册上对比,用户ISP和我理解的boot有重大偏差,用户boot只能固定在FF:0000H起始的位置?)
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 前天 16:38 | 显示全部楼层
32G12K-UART在线升级:
https://www.stcaimcu.com/data/do ... 2G12K128-series.zip

上电复位,系统ISP检测是否需要下载(官方下载方式),如不需要,从FF0000H用户区入口点运行用户ISP,用户ISP判断是否需要下载(用户自定义下载方式),如不需要,运行用户APP
例程和上位机exe是串口在线通过用户ISP直接更新用户APP的,如需要先下载并校验再更新,需要用户自己实现(要么再分个EEPROM区用IAP读写,要么外挂SPI FLASH),用户ISP区也可由用户自定义
因为中断向量是固定在FF0003H~FF024BH的,硬件决定的,无法修改,无论如何设计,只要能保证中断的正常跳转就可以
例程设置:
截图202507291652056629.jpg
截图202507291652459842.jpg
截图202507291653024111.jpg
截图202507291653163424.jpg
截图202507291653343240.jpg



DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:144
  • 最近打卡:2025-07-31 10:37:58

760

主题

1万

回帖

1万

积分

管理员

积分
18139
发表于 前天 16:42 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-07-31 01:20:45
已绑定手机

1

主题

9

回帖

33

积分

新手上路

积分
33
发表于 前天 17:08 | 显示全部楼层
您给的相关链接看过了,并没有解决我的问题,示例中最开始的app程序是通过isp烧录进去的,而我这边是需要一开始两个程序就要烧录,其二。手册这边有这段“用户AP代码是用户的正常功能代码。由于用户ISP代码使用了FF:0000H~FF:0FFFH的4K空间,用户的AP代码必须从FF:1000H开始执行,用户AP代码原本位于FF:0000H~FF:0002H的复位跳转指令被重映射到FF:1000H~FF:1002H的地址(重映射的工作上位机应用程序会自动处理,用户在编写AP代码时无需关心)。另外单片机的中断入口地址也在用户ISP代码的4K空间以内,也需要重映射到FF:1000H开始的地方”  ,按照这边意思,isp只能4k并且在FF:0000H~FF:0FFFH,boot难道不可以扩大空间?,此外“”用户AP代码原本位于FF:0000H~FF:0002H“,是否意思就是app程序是放在FF:1000H之后,那么FE:0000开始的flash不能用于代码段?如果可以,程序在flash中是什么组织的

点评

首次烧录无用户ISP时,必须使用系统ISP烧录(官方烧录方式) 例程是4K用户ISP,当然用户可自定义,例程仅供参考,协议和上位机用户都可以自定义 超过FFFFFFH的部分保存到FE0000H~FEFFFFH,由251编译器自动管理 [atta  详情 回复 发表于 前天 17:24
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 前天 17:24 | 显示全部楼层
yinshiy*** 发表于 2025-7-29 17:08
您给的相关链接看过了,并没有解决我的问题,示例中最开始的app程序是通过isp烧录进去的,而我这边是需要一 ...

首次烧录无用户ISP时,必须使用系统ISP烧录(官方烧录方式)
例程是4K用户ISP,当然用户可自定义,例程仅供参考,协议和上位机用户都可以自定义

超过FFFFFFH的部分保存到FE0000H~FEFFFFH,由251编译器自动管理,需要按照以下图片设置编译器
截图202507291723599635.jpg
截图202507291724375299.jpg
截图202507291726186755.jpg
截图202507291727507956.jpg
截图202507291728049225.jpg
截图202507291728163863.jpg
截图202507291728299468.jpg
截图202507291728445972.jpg
截图202507291728545853.jpg
截图202507291729064613.jpg
截图202507291729203075.jpg
截图202507291729344867.jpg
截图202507291729502094.jpg
截图202507291730055748.jpg
截图202507291730233932.jpg
截图202507291730363519.jpg
截图202507291730522342.jpg
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:195
  • 最近打卡:2025-07-31 08:57:46
已绑定手机

4

主题

10

回帖

510

积分

高级会员

积分
510
发表于 前天 17:41 | 显示全部楼层
STC复位或上电都是从FF0000开始的,所以我的理解是你要把BOOT的10K规划到FF0000-FF27FF, app放在FF2800-FFFFFF,然后app_update和epprom放在前64K,也就是FE0000-FEFFFF
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:253
  • 最近打卡:2025-07-31 08:55:10
已绑定手机

78

主题

2294

回帖

5226

积分

荣誉版主

无情的代码机器

积分
5226
发表于 前天 17:48 | 显示全部楼层

  1.boot里修改isr中断映射地址和跳转地址。app工程关注这几个选项:
截图202507291745063462.jpg 截图202507291745215849.jpg
  2.想问什么没看懂?正常编码就行
  3.永远是FF:0000H位置启动
  4.可以改
  5.不合理

     boot地址范围FF:0000H~FF:27FFH,10k空间作为引导判断,
     app地址范围FF:2800H~FF:FFFFH,54k空间是用户正常运行程序,
     app_update地址范围FE:1000H~FE:FFFF,60K空间是最新升级固件包
     epprom地址范围FE:0000~FE:1000,4k 空间用于保存参数(比如升级标志位)

(注意:无论 EEPROM 设置为多少,EEPROM 在 Flash 存储空间中始终从 FE:0000h 开始)




另外“最新升级固件包”这个区域只用于备份或升级缓冲?验证完成后拷贝至APP区,则和官网示例差别不大了。


其他坛友经验可参考:
ISP区设置为8K - ISP下载/做自己的ISP 国芯人工智能技术交流网站 - AI32位8051交流社区
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-07-31 01:20:45
已绑定手机

1

主题

9

回帖

33

积分

新手上路

积分
33
发表于 昨天 14:39 | 显示全部楼层
erci*** 发表于 2025-7-29 17:48
1.boot里修改isr中断映射地址和跳转地址。app工程关注这几个选项:

  2.想问什么没看懂?正常编码就行

第二点是想问:app程序,程序上是否需要特殊处理,比如mian函数之后先执行一段特殊代码然后再初始化外设

点评

参考官网例程正常开发即可。没什么特殊处理。  详情 回复 发表于 昨天 14:59
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:253
  • 最近打卡:2025-07-31 08:55:10
已绑定手机

78

主题

2294

回帖

5226

积分

荣誉版主

无情的代码机器

积分
5226
发表于 昨天 14:59 | 显示全部楼层
yinshiy*** 发表于 2025-7-30 14:39
第二点是想问:app程序,程序上是否需要特殊处理,比如mian函数之后先执行一段特殊代码然后再初始化外设 ...

参考官网例程正常开发即可。没什么特殊处理。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-07-31 01:20:45
已绑定手机

1

主题

9

回帖

33

积分

新手上路

积分
33
发表于 昨天 15:51 | 显示全部楼层
1.我用串口例程,分别设计了isp和ap,mdk和代码部分设置参考了“STC32G12K-UART在线升级”;
2.用STC_ISP最新版本,“打开程序文件“”那边加载isp,“用户自定义ISp模式的AP代码”加载了ap程序;
实际测试程序并不能正常运行,现在有几个疑问点
1.帮忙看下两个程序设置是否有错,boot部分跳转app是否有错;
2.boot部分,我这边编译会多出四个警告,我怀疑是这四个警告导致程序异常
3.STC_ISP下载软件,加载ap部分程序会提示“用户的AP代码文件格式不规范”
4.STC_ISP下载软件,其它部分设置是否有错
编译多出警告.png
22.png

Test_Boot.rar

31.08 KB, 下载次数: 1

TestApp.rar

30.92 KB, 下载次数: 2

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-31 23:04 , Processed in 0.146868 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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