找回密码
 立即注册
查看: 292|回复: 11

关于空中OTA的疑问

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-15 18:00:08
已绑定手机

10

主题

50

回帖

274

积分

中级会员

积分
274
发表于 2025-9-19 16:38:52 | 显示全部楼层 |阅读模式

现在用到一个4G模块,MCU用的是STC8H4K64TL,想通过,服务器-4G模块-串口,这种方式进行空中OTA

问题点:目前用户程序写了20K左右,剩下40K空间够不够通过以上方式来空中OAT呢?
image.png

HEX文件大小实际上是58KB,剩下的空间跟HEX文件大小有没有关系?
image.png

回复

使用道具 举报 送花

3

主题

1880

回帖

608

积分

等待验证会员

积分
608
发表于 2025-9-19 16:43:00 | 显示全部楼层
您好,关于您提到的空中OTA(Over-The-Air)升级问题,以下是针对您当前使用STC8H4K64TL MCU、4G模块实现串口OTA升级的详细分析与建议:

一、关于MCU Flash空间是否足够进行OTA升级

您提到MCU型号为 STC8H4K64TL,其Flash容量为 64KB,当前用户程序占用了约 20KB,剩余 40KB 空间。您计划通过 服务器→4G模块→串口→MCU 的方式实现OTA升级。

1. HEX文件大小与Flash占用的关系

您提到当前的HEX文件大小为 58KB,这通常包含了以下内容:
代码段(.text)
初始化数据段(.data)
配置信息(如启动代码、中断向量表等)
填充字节(可能为了对齐或保留空间)

但实际烧录到MCU Flash中的是 可执行代码和数据,并非整个HEX文件都必须一次性加载到内存中。因此,HEX文件大小 ≠ 实际运行时占用Flash空间的大小。

通常,实际占用Flash的大小应小于或等于HEX文件中代码段的实际长度。因此,建议您查看编译器生成的 map文件 或 列表文件(.lst/.map),确认实际代码与数据占用的Flash空间。若实际占用空间小于40KB,则剩余空间是足够的。

2. OTA升级机制对Flash空间的需求

OTA升级通常需要以下空间:
当前运行程序区(App)
OTA升级缓存区 / 新程序存储区
Bootloader(引导程序)

若采用 单Bank方案(无双Bank机制),则需要在Flash中预留一块空间用于暂存新固件。若采用 双Bank方案(Dual-Bank),则可以将新固件写入另一个Bank,重启后切换运行。

但STC8H系列MCU不支持硬件双Bank机制,因此需采用 单Bank + Bootloader + App 的方式:
Bootloader:负责接收OTA数据并写入Flash
App:当前运行的用户程序
OTA数据缓存区:用于暂存接收的固件数据

假设Bootloader占用2KB,OTA缓存区预留8KB,则用户程序最大可用空间约为64KB - 2KB - 8KB = 54KB,而您当前用户程序仅占用20KB,剩余空间为40KB,理论上是足够的。

二、关于OTA升级实现方式的可行性分析

您希望采用 服务器→4G模块→串口→MCU 的方式实现OTA升级,这种方式是可行的,但需要注意以下几个关键点:

1. 通信协议与数据完整性
数据传输方式:通过4G模块接收服务器下发的固件数据,经串口传输至MCU,需确保数据完整性和校验机制。
推荐方式:使用基于TCP/IP的可靠传输协议(如HTTP/FTP),并在MCU端对接收数据进行CRC32校验,确保固件完整无误后再写入Flash。

2. 固件分包与重组机制

由于串口通信速率和MCU内存限制,通常固件需分包传输。MCU需具备以下能力:
接收数据包并缓存
校验包头、包序号、数据长度、CRC
按地址写入Flash指定位置
支持断点续传或重传机制(可选)

3. Flash写入与擦除机制

Flash写入前需先擦除,且擦除单位通常为扇区(如1KB或2KB)。因此,OTA升级时需按扇区进行擦写,避免影响当前运行的Bootloader或正在运行的App。

建议将Flash划分为以下区域:

| 区域 | 地址范围 | 用途 |
|------|----------|------|
| Bootloader | 0x0000 - 0x0800(2KB) | 引导程序,负责OTA |
| App | 0x0800 - 0xF000(约58KB) | 用户程序 |
| OTA缓存区 | 0xF000 - 0xFFFF(4KB) | 存放接收的固件数据 |

4. 安全性与回滚机制
建议在升级完成后进行完整性校验(如CRC或SHA256),确认无误后再跳转运行。
若升级失败,应保留旧版本程序,支持回滚机制,避免设备“变砖”。

三、关于HEX文件大小与Flash剩余空间的关系总结

| 项目 | 内容 |
|------|------|
| MCU型号 | STC8H4K64TL |
| Flash总容量 | 64KB |
| 当前程序占用 | ~20KB |
| 剩余空间 | ~40KB |
| HEX文件大小 | 58KB |
| 实际Flash占用 | < 58KB(取决于代码段大小) |
| OTA所需空间 | Bootloader(2KB)+ OTA缓存(8KB) |
| 可用空间 | 64KB - 2KB - 8KB = 54KB |
| 结论 | 剩余40KB空间足够用于OTA升级 |

四、建议与优化方向

1. 优化Bootloader大小:尽量精简Bootloader代码,减少占用空间。
2. 使用压缩算法:若固件较大,可考虑使用LZ77、RLE等压缩算法,减少传输量。
3. 使用差分升级(Delta Update):仅传输与旧版本差异部分,减少升级包体积。
4. 加入OTA状态指示:如LED闪烁、串口打印等,便于调试与用户反馈。
5. 增加OTA加密机制:防止固件被非法篡改或窃取。

五、结语

综上所述,您当前的Flash空间是足够的,只要合理划分Flash区域、实现OTA升级逻辑,并确保数据完整性与安全性,完全可以通过 4G模块 + 串口 + Bootloader 的方式实现OTA升级。

如需进一步技术支持,如Bootloader编写、OTA协议设计、Flash操作示例等,欢迎继续交流!

祝项目顺利!

国芯人工智能 敬上

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-10-13 11:16:33

34

主题

1308

回帖

3128

积分

超级版主

积分
3128
发表于 2025-9-19 16:46:45 | 显示全部楼层
如下,拿去简单改下通信协议就行了,STC 是ISP/IAP的全球领导者

截图202509191646209031.jpg
深圳国芯人工智能有限公司-在线升级  https://www.stcai.com/zxsj
STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:560
  • 最近打卡:2025-10-16 05:35:53
已绑定手机

17

主题

768

回帖

2322

积分

金牌会员

积分
2322
发表于 2025-9-19 17:00:30 | 显示全部楼层
程序大小跟HEX文件大小没有关系?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:584
  • 最近打卡:2025-10-15 08:26:15
已绑定手机

86

主题

6274

回帖

1万

积分

超级版主

积分
11734
发表于 2025-9-21 19:02:28 | 显示全部楼层
HEX文件大小无意义,要转换为BIN文件再看
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-15 18:00:08
已绑定手机

10

主题

50

回帖

274

积分

中级会员

积分
274
发表于 2025-9-22 09:13:09 | 显示全部楼层
Debu*** 发表于 2025-9-21 19:02
HEX文件大小无意义,要转换为BIN文件再看

如果转换出来的bin文件<剩下的程序空间,那就可以正常OTA是吗?

点评

还需要确定HEX是不包含空白区域的  详情 回复 发表于 2025-9-22 10:05
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:584
  • 最近打卡:2025-10-15 08:26:15
已绑定手机

86

主题

6274

回帖

1万

积分

超级版主

积分
11734
发表于 2025-9-22 10:05:51 | 显示全部楼层
ZARD*** 发表于 2025-9-22 09:13
如果转换出来的bin文件

还需要确定HEX是不包含空白区域的
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-15 18:00:08
已绑定手机

10

主题

50

回帖

274

积分

中级会员

积分
274
发表于 2025-9-22 11:09:03 | 显示全部楼层
Debu*** 发表于 2025-9-22 10:05
还需要确定HEX是不包含空白区域的

不理解,可以展开解释一下吗?

点评

可以用ISP软件打开HEX再保存为BIN HEX是地址不连续的 打开后可能出现这种情况 大面积的0xFF空白区域 这种情况下保存的BIN是很大的 [attachimg]115826[/attachimg] [attachimg]115827[/attachimg]  详情 回复 发表于 2025-9-22 13:03
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:584
  • 最近打卡:2025-10-15 08:26:15
已绑定手机

86

主题

6274

回帖

1万

积分

超级版主

积分
11734
发表于 2025-9-22 13:03:45 | 显示全部楼层
ZARD*** 发表于 2025-9-22 11:09
不理解,可以展开解释一下吗?


可以用ISP软件打开HEX再保存为BIN
HEX是地址不连续的
打开后可能出现这种情况
大面积的0xFF空白区域
这种情况下保存的BIN是很大的
截图202509221300564600.jpg

截图202509221303425476.jpg

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-15 18:00:08
已绑定手机

10

主题

50

回帖

274

积分

中级会员

积分
274
发表于 2025-9-22 13:49:37 | 显示全部楼层
Debu*** 发表于 2025-9-22 13:03
可以用ISP软件打开HEX再保存为BIN
HEX是地址不连续的
打开后可能出现这种情况

哦~理解了,不过了那个bin文件,我是直接从Keil5那里编译出来的,然后用ISP分别打开bin和hex,发现代码长度和校验和都一样的,所以就不用再通过ISP打开HEX重新保存数据为bin了。

点评

通过ISP打开HEX重新保存数据为bin是为了看文件大小的,BIN文件大小就是下载到单片机内的程序大小  详情 回复 发表于 2025-9-22 18:39
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 06:21 , Processed in 0.133612 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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