一文弄懂stm32ota及具体方案

前置知识

flash

flash是如何工作的

  • Flash 单元以电荷存储表示 0/1,编程只能把位从 1 写为 0,擦除把整页/扇区统一恢复为 1。
  • 擦除粒度通常为 Page/Sector(几 KB 到几十 KB),编程粒度为 半字/字/双字(依芯片而异,STM32F1/F4 常见为半字/字,STM32G4/H7 常见为双字)。
  • 由于擦写次数有限(10k~100k 次/页),需避免频繁在同一页更新小量数据;对“升级信息/设备信息”等高频写区域应做磨损均衡或冗余备份。
  • 一些系列支持 Dual-Bank,可在运行一侧时擦写另一侧,利于在线升级;部分系列带 ECC,写入时需按对齐和双字写入以避免 ECC 错误。

常见的flash

  • 片内 Flash(NOR):启动代码存储,随机读取快、可靠;容量相对有限。
  • 片外 SPI NOR Flash:容量大、成本低、顺序读写快;擦写需页对齐,写前要擦除;通过 QSPI/OSPI 可做 XIP(部分系列)。
  • 片外 NAND:大容量,坏块管理复杂,MCU 端较少用于固件存储;如果使用,建议在外部处理器或文件系统层处理。

flash的读写操作

  • 典型流程(STM32 HAL):
    1. HAL_FLASH_Unlock();2) 擦除 HAL_FLASHEx_Erase(...);3) 按对齐写入 HAL_FLASH_Program(...);4) HAL_FLASH_Lock()
  • 写前确保:关中断临界区(至少屏蔽影响时序的中断)、设置合适的 Flash Latency、关闭数据/指令 Cache(视系列而定)。
  • 断电保护:写入分块+页校验+幂等策略;Bootloader 应确保任意掉电后都能从“最后一次一致状态”恢复。

什么是ota,ota的作用是什么

OTA(Over-The-Air/Over-The-Any-link)是设备在不拆机、不中断服务或最小中断的前提下,通过通信链路远程更新固件的能力。作用:

  • 降低维护成本:远程修复缺陷、发布新功能。
  • 提升安全:及时修补漏洞、轮换证书/密钥。
  • 提升可靠性:引入回滚与试运行机制,降低升级失败风险。

在单片机端有哪些ota方案,优缺点是什么

  • 单区原地升级(In-place):
    • 思路:Bootloader 在同一分区内边擦边写覆盖旧固件。
    • 优点:占用 Flash 空间最小。
    • 缺点:掉电风险高、实现复杂,需要小心搬移和断点续传;通常需额外“备份页”或外设辅助。
  • 片内双区(A/B):
    • 思路:两套固件分区,当前运行 A,下载到 B,切换启动标志后从 B 启动,失败可回退到 A。
    • 优点:最稳妥,掉电可恢复,支持试运行与确认。
    • 缺点:占用两倍固件空间;对小容量芯片可能不现实。
  • 片外缓存升级:
    • 思路:固件先存片外 Flash,验证通过后拷贝/交换到片内运行区。
    • 优点:适配小容量片内 Flash;可存多版本或差分包。
    • 缺点:依赖外设稳定性,增加 BOM 和驱动复杂度。
  • 差分升级(Patch):
    • 思路:只下发旧版到新版的差分数据,在设备端重建新固件。
    • 优点:大幅减少下载体积。
    • 缺点:设备端计算/IO 复杂度高;需强校验和回退;对压缩/链接方式敏感,易产生大差分。

单片机是如何启动的,bootloader又是什么

  • 复位后 CPU 从固定地址取栈顶与复位向量(向量表),跳入启动代码;用户可通过 SCB->VTOR 变更向量表基址。
  • Bootloader 是最先运行的用户程序,负责:
    • 验证与选择要启动的固件镜像
    • 处理升级数据的接收与写入
    • 管理升级状态(试运行/确认/回退)与断点续传
    • 安全校验(签名验证、版本反回滚)
  • 关键:Bootloader 自身要尽量小且稳定,放在写保护区域,最好配合读保护/代码保护(RDP/WRP/PCROP)。

System Bootloader

  • STM32 内置的系统 Bootloader(ROM)支持通过 UART/I2C/SPI/USB DFU 等协议下载固件,不占用用户 Flash。
  • 适用场景:产线烧录、救援刷机、无用户 Bootloader 的简化升级路径。
  • 局限:协议固定、可定制性弱、难以做安全验签/回滚等策略,一般作为兜底或引导方式。

加密与签名

  • 签名用于完整性和身份认证,推荐“哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值