当前位置:首页 > 消费电子 > 消费电子
[导读]在物联网终端中,OTA(Over-The-Air)固件升级是产品生命周期管理的核心能力。一个健壮的OTA方案必须解决两个问题:Flash分区规划避免擦写冲突,以及升级失败后自动回滚(Rollback)防止设备变砖。本文以STM32(Cortex‑M4/M7)外接SPI Flash或内置Dual-Bank Flash为例,阐述典型设计与代码框架。



在物联网终端中,OTA(Over-The-Air)固件升级是产品生命周期管理的核心能力。一个健壮的OTA方案必须解决两个问题:Flash分区规划避免擦写冲突,以及升级失败后自动回滚(Rollback)防止设备变砖。本文以STM32(Cortex‑M4/M7)外接SPI Flash或内置Dual-Bank Flash为例,阐述典型设计与代码框架。


一、Flash分区规划(以内置双Bank或外置Flash为例)


1.1 内置Dual-Bank情形(STM32F4/F7/H7部分型号)


Bank 起始地址 用途


Bank1 (Active A) 0x08000000 当前运行固件(Slot A)


Bank2 (Slot B) 0x08100000 待接收新固件(Slot B)


Option Bytes — 指示启动Bank + 回滚标记

1.2 外置SPI Flash + 片内单Bank情形

区域 说明


Bootloader (32KB) 固定,不OTA,校验Slot并跳转


App Slot A (≥128KB) 主运行区


App Slot B (≥128KB) 下载缓冲/备用区


OTA Meta (1扇区) 存 active_slot, update_pending, crc32, rollback_cnt


Bootloader每次启动读Meta决定跳A还是B。


二、OTA流程与状态机



[Running App]

  │ 收到OTA包(分片)

  ▼

[写Slot B + SHA256/CRC校验]

  │ 校验OK

  ▼

置 Meta.update_pending=1, Meta.next_slot=B

  │ 软复位 → Bootloader

  ▼

Bootloader:

  if(update_pending && crc_ok){

      跳Slot(B);

      清update_pending;

      置active_slot=B;

      启动看门狗监测App心跳;

  } else {

      回滚跳原Slot(A);

  }



三、回滚(Rollback)实现要点


3.1 App心跳与超时检测(Bootloader侧)


// Bootloader简短主循环(或WDT ISR中计)

#define APP_ALIVE_TIMEOUT_MS 3000

static uint32_t last_alive_ms = 0;


void SysTick_Handler(void){

   if (millis() - last_alive_ms > APP_ALIVE_TIMEOUT_MS) {

       // App未置活 → 认为启动失败

       if (meta.active_slot != meta.orig_slot) {

           meta.active_slot = meta.orig_slot;  // 回滚

           meta.fail_cnt++;

           write_meta(&meta);

       }

       NVIC_SystemReset();  // 重启进Bootloader再跳原Slot

   }

}



App中周期性置位:

// 在App定时任务调

extern uint32_t last_alive_ms;

last_alive_ms = HAL_GetTick();



3.2 防无限回滚


限制连续失败次数(如 ≤3),超过则停留在原Slot并上报错误,不再尝试新Slot。


四、Bootloader最小跳转代码(伪码)


void boot_jump(uint32_t addr)

{

   uint32_t sp = *(volatile uint32_t*)addr;

   uint32_t reset = *(volatile uint32_t*)(addr + 4);


   __set_MSP(sp);

   SCB->VTOR = addr;               // 重定位向量表

   ((void(*)(void))reset)();       // 跳Reset_Handler

}


int main(void)

{

   read_meta(&meta);

   if (meta.update_pending && meta.crc_ok) {

       meta.orig_slot = meta.active_slot;

       meta.active_slot = meta.next_slot;

       meta.update_pending = 0;

       write_meta(&meta);

       boot_jump(meta.active_slot);

   } else if (meta.update_pending && !meta.crc_ok) {

       // 校验失败直接回滚

       meta.update_pending = 0;

       write_meta(&meta);

       boot_jump(meta.active_slot);  // 仍跳原Slot

   } else {

       boot_jump(meta.active_slot);

   }

   while(1);

}



五、安全与完整性校验


• CRC32 / SHA256:下载完Slot B后算摘要,与云端下发摘要比对


• 签名验证(可选):ECDSA P-256 验签防篡改(需安全元件或TrustZone-M)


- Anti-rollback版本号:新固件fw_ver必须 ≥ 当前fw_ver,否则拒刷


六、常见设计缺陷与规避


缺陷 后果 规避


Bootloader可OTA覆盖 变砖无救 Bootloader区域写保护(FLASH_OB_WRP)


无心跳检测 坏固件卡死不回滚 加WDT + App心跳超时判断


Meta区无备份 写Meta中途掉电→状态混乱 用双备份Meta扇区(A/B拷贝)或写-校验-提交


回滚无限循环 坏固件反复尝试 fail_cnt上限 + 停留原Slot报Error


七、结语


MCU OTA方案的健壮性建立在三点:合理的双Slot/Bank分区、Bootloader做唯一跳转与校验、失败自动回滚(带次数限制+心跳监测)。按此框架设计,即便新固件存在Bug也能安全退回上一版本,真正做到“升级不怕变砖”。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在嵌入式系统开发中,MCU(微控制器)异常复位是开发者最常遇到也最头疼的问题之一:产品在测试阶段运行正常,批量出货后却不定期出现自动复位;低温环境下运行没问题,高温环境下频繁复位;空载测试正常,带负载运行突然复位。这些偶...

关键字: MCU 嵌入式系统

全新业务布局突破原有自动驾驶系统供应商定位,与现有车企、移动出行合作项目形成互补 上海2026年6月17日 /美通社/ -- Mobileye今日宣布,计划进一步拓展自动驾驶出租车(Robotaxi)业务版图,从提供自...

关键字: OTA ROBOT MOBILEYE VI

当一个嵌入式项目进入方案设计阶段,工程师面临的第一个关键决策往往是:“该选什么芯片?” DSP、FPGA、MCU三者之间的边界在数据手册上看似清晰,但当面对中等算力场景——算力要求介于简单控制和超高性能计算之间的“灰色地...

关键字: DSP FPGA MCU

当我们今天谈论RISC-V在中国的发展,从服务器芯片到边缘MCU,从开源社区到工业量产,很难不提到一个名字——兆易创新GD32VF103。作为全球首款量产的基于RISC-V架构的通用32位微控制器,它在2019年发布时就...

关键字: MCU CPU

中国北京(2026年6月10日)—— 业界领先的半导体器件供应商兆易创新GigaDevice(股票代码:603986.SH;3986.HK)宣布推出全新GD32E512和GD32E252系列光模块专用MCU,精准覆盖从传...

关键字: MCU AI算力 光通信

珠海2026年6月9日 /美通社/ -- 近年来,随着护发消费需求升级,高速风筒凭借低温速干、护发效果优异等特点,成为个人护理电器领域的热门品类。该类产品依托每分钟超10万转的高速无刷电机,以强劲气流替代传统高...

关键字: 电机控制 KHZ MCU HP

电池供电的物联网设备中,MCU的功耗往往占据系统总功耗的相当比重。一个典型的传感器节点可能每秒采集一次数据,其余时间都在等待。如果让MCU在这段时间内全速运行,电池能量将很快耗尽。FreeRTOS提供了Tickless低...

关键字: FreeRTOS MCU

珠海2026年6月1日 /美通社/ -- 随着汽车电子电气架构向"中央计算+区域控制"加速演进,车身控制、照明系统、热管理、传感器节点等边缘执行单元对MCU的需求正在发生质变:不仅要满足功能安全与信息...

关键字: MCU 汽车 A10 供应链

MCU芯片集成AI能力,加速海量边缘AI产品落地

关键字: MCU 芯片 AI

在MCU裸机开发领域,分时片多任务处理是实现复杂功能的核心技术之一。这种模式通过将系统运行时间划分为多个时间片,让不同任务轮流执行,从而在单处理器上模拟出多任务并行的效果。然而,当系统中存在长耗时任务时,这种平衡很容易被...

关键字: MCU 算法
关闭