在物联网时代,智能家电的远程固件升级能力已从"加分项"变为"必选项"——产品上市后修复漏洞、迭代功能,都离不开OTA。OTA(Over-The-Air)技术允许设备在无需物理接触的情况下,通过无线网络修复漏洞、增添功能,极大地降低了产品的维护成本并提升了用户体验。
CB7816系列高性能32位智能家电控制器,基于ARM Cortex-M0+内核,内置灵活的Flash重映射(Remap)机制,无需独立Bootloader即可实现A/B双区备份升级,让设备"在线升级永不掉线"。
一、为什么选择CB7816进行OTA升级?
CB7816 系列 MCU 支持两种在线升级方案:Remap 升级方式 与 Bootloader 升级方式。两者的核心差异如下:
对比项 | Remap方式 | Boot loader方式 |
是否需要单独烧录 Bootloader | 否,只需烧录"用户程序.bin" | 是,需同时烧录Bootloader与用户程序 |
升级代码位置 | 集成在用户程序内,自定义编写 | 独立的BOOT区程序 |
支持的最大用户程序 | 128 KB | 256 KB |
升级失败的安全性 | 高(A/B 双区互为备份,可回滚) | 取决于BOOT实现 |
升级协议 / 上位机 | 可自定义,也可用官方协议与工具 | 可自定义,也可用官方协议与工具 |
Remap 方式最大的优势在于"双备份"带来的安全性。 它把 Flash 划分为 A、B 两个互为备份的代码区:旧程序运行在 A 区时,新固件被完整写入 B 区,写入并校验通过后才切换启动区。一旦升级中途断电或数据出错,芯片仍可回到原来的代码区正常运行,不会变砖。这对于通过 Wi-Fi 这类"链路可能抖动、可能掉线"的无线通道做升级而言,几乎是必选项。
二、OTA升级方案概述
在众多OTA方案中,A/B区备份以其高安全性脱颖而出。其核心思想是将Flash划分为两个区域:A区(当前运行区)和B区(备份升级区)。
CB7816芯片支持的Remap升级方式,这是一种基于A/B备份区、无需独立Bootloader的高效升级方案。
工作原理如下:
初始状态:芯片通过烧录器使能Remap功能。程序默认在A区(虚拟地址0x00000000对应的区域)运行。
固件下载:当WiFi模块接收到云端的新固件后,通过UART将固件数据发送给MCU。运行在A区的用户程序负责接收数据,并将其写入到B区(虚拟地址0x00020000开始)。
校验与标记:B区固件接收完毕后,进行完整性校验(如CRC校验)。校验通过后,修改一个特定的标志位,指示下次应从B区启动。
系统复位:用户程序执行软复位。
Remap切换:芯片复位后,硬件检测到Remap功能已使能,并根据标志位将B区的物理地址重映射到虚拟地址0x00000000。随后,CPU从0x00000000开始执行,实际运行的便是B区的新固件。A区则成为下次升级的备份区。
这种方式的优点在于:整个升级过程只有一个“用户程序”,无需编写和烧录独立的Bootloader,简化了开发和维护流程。
A/B区切换示意图:
三、硬件部分
1、芯片特性
特性:基于ARM Cortex-M0+内核,48MHz主频,内置256KB Flash。
Flash分区规划:
A区(当前运行区):存放当前正在运行的稳定固件。
B区(更新区):存放待更新的新固件。
Remap原理:CB7816支持将物理地址0x00000000映射到0x00020000(B区)。升级时,程序在A区运行,接收新固件写入B区;升级完成后,通过修改标志位后复位芯片,让芯片把B区的地址重新映射到0x00000000地址,把A区的地址映射到0x00020000地址。
控制字地址:通过写入0xFFF8600~0xFFF8603来控制运行在A区或B区(A区特征码:0xAA, 0x55, 0x33, 0x5A;B区特征码:0xAA, 0x55, 0x66, 0x5A)。
2、硬件连接
OTA升级的核心数据通道由MCU与WiFi模块之间的UART连接构成。以CB7816的UART1为例:
CB7816 MCU引脚 | WiFi模块引脚 | 说明 |
TX1(例如PA05) | RX | MCU通过此引脚向WiFi模块发送数据/命令 |
RX1(例如PA06) | TX | MCU通过此引脚接收来自WiFi模块的固件数据 |
VDD(3.3V/5V) | VCC | 电源 |
GND | GND | 公共地 |
四、软件实现关键步骤
1. 工程准备与初次烧录
首先,需要一次性完成芯片的Remap使能和固件烧录:
生成固件:将您的应用程序编译生成 .bin 文件。
使能Remap:使用CB78XX编程器上位机软件,加载您的 .bin 文件。
配置启动方式:在软件界面中,将“启动方式”选择为“Remap”。
烧录:通过烧录器(或J-Link)将固件烧录到芯片。此操作会设置芯片内部配置,使其后续始终工作在Remap模式下。
完成这一步后,芯片上电即会从A区运行程序。
2. 用户程序编写OTA逻辑
您的用户程序需要承担在线升级的核心逻辑,主要包含以下部分:
A. 定义关键参数
A区地址:虚拟地址0x00000000。
B区地址:虚拟地址0x00020000(128K偏移)。
启动标志地址:通过写入 0xFFF8600~0xFFF8603 来控制运行在A区或B区(A区特征码:0xAA, 0x55, 0x33, 0x5A;B区特征码:0xAA, 0x55, 0x66, 0x5A)。
B. 实现通信与解析协议
负责接收来自WiFi模块的数据,并解析上位机(如云端服务器)下发的命令。主要包括:
握手命令:MCU与上位机建立升级连接。
Flash擦除命令:擦除B区(0x00020000开始)。
编程命令:接收固件数据并写入B区。
校验命令:对写入B区的数据进行完整性校验(如CRC16)。
五、总结
CB7816系列MCU凭借其灵活的Flash重映射(Remap)机制,为实现安全、可靠的A/B区OTA升级提供了简洁高效的硬件支持。开发者无需编写复杂的Bootloader,只需在用户程序中集成升级逻辑,即可借助WiFi模块等通信手段,轻松完成设备的远程固件更新。
这种方案不仅降低了软件开发的复杂性,更重要的是,它通过双区备份确保了即使升级过程中出现异常断电等意外,设备仍能从原有区域正常启动,极大提升了产品的鲁棒性和用户体验。
来源:杭州晶华微
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。