MCU端 Boot+App设计方案

本文探讨了MCU的多种升级方案,包括芯片A/B Swap、单Boot+A/B分区、双Boot+A/B分区及单Boot+单App等。各方案优缺点并举,如A/B Swap支持硬件切换和回滚,但需烧录两个Boot;单Boot+A/B分区简化设计,但需管理多个hex文件。选择最佳方案需考虑客户需求和硬件资源。

概述

本文结合当前主流主机厂的升级规范来介绍不用MCU升级方案及其优缺点,除了本文提及的方案外还有很多其他的升级方案,升级方案的设定要考虑到客户需求以及硬件资源等因素。

目前主流的客户需求,要求存储区划分要有Boot段、Config段、App A分区和App B分区。其中Boot端需要满足客户的Bootloader升级要求,Config端用于存储Boot和App版本以及一些刷写后需要保存的一些系统状态和flags。App A/B分区主要用于升级切换、回滚等操作。

不同设计方案及其优缺点

利用芯片 A/B Swap方案
芯片 A/B Swap介绍

比如英飞凌TC397就提供A/B Swap机制,通过对硬件的操作完成相关分区的切换。当我们使能Swap功能后,通过寄存器的切换,不改变写入pflash时的地址,但能够使读取pflash时的地址做相应的变动。

利用芯片A/B Swap的升级方案

首先将MCU分为A/B分区,用来支持升级回滚,最大限度地保留系统功能。

其次由于客户规范对升级流程做了严格的规定,因此每个分区必须保留Boot部分。

因此整个存储区划分结构如下:

### MCU Bootloader 升级方法 #### 一、Bootloader概述 Bootloader是在MCU启动时最先运行的一段代码,负责初始化硬件并加载应用程序到内存中执行。对于支持远程固件更新的应用场景而言,bootloader还承担着接收新版本固件并通过特定接口将其写入内部存储器的任务。 #### 二、基于ISP方式实现Bootloader升级 当采用ISP(In-System Programming)方式进行bootloader升级时,通常会利用串口或其他通信口连接至PC机上的工具软件完成操作。具体过程如下: 1. **进入Boot模式** 配置指定引脚状态使能boot功能,从而让MCU跳转至内置或自定义的bootloader区域开始工作[^2]。 2. **建立通讯链路** 使用UART/SPI/I2C等协议构建主机与目标板之间的稳定数据通道,确保后续指令及文件传输无误。 3. **发送命令序列** 向设备发出一系列预设好的控制字节组合告知其即将开展的操作类型——如擦除旧版镜像、准备接受新版映射表项等等。 4. **传送新的固件包** 将待安装的新版程序按照一定格式打包成适合当前平台解析的形式经由前述路径上传给单片机处理单元。 5. **验证校验码** 完整接收到全部分块之后计算整体CRC/MD5值并与预期相符则表明此次刷机动作成功结束;反之需重新尝试直至满足条件为止。 ```c // 示例:简单的ISP编程流程伪代码 void isp_program(void){ enter_boot_mode(); // 设置BOOT引脚以激活引导装载程序 open_com_port(BAUD_RATE); // 打开用于通信的COM口 send_command(ERASE_CMD); // 发送擦除现有固件的命令 wait_for_acknowledge(); // 等待确认信号 while (firmware_data_left()){ send_packet(get_next_chunk()); // 分批发送固件数据 verify_checksum(); // 对每一批次做完整性检验 } close_com_port(); } ``` #### 三、基于ICP方式实现Bootloader升级 不同于依赖外部辅助手段介入才能生效的传统做法,在线芯片编程(ICP, In-Circuit Programming)允许开发者借助于专门设计的支持电路直接作用于CPU核心层面实施在线调试和修改行为而无需额外占用任何资源。比如ST-LINK/V2适配器就属于此类产品之一,它能够兼容多种型号ARM Cortex-M系列处理器,并提供图形界面友好型管理套件方便用户快速定位问题所在位置以及高效地部署最新补丁内容。 #### 四、基于IAP方式实现Bootloader升级 内嵌式应用编程(IAP, In Application Programming),指的是不中断正常业务逻辑的前提下动态调整正在使用的那部分ROM空间内的机器指令集构成情况的技术方案。为了达成这一目的,往往需要预先划分好两个独立却又相互关联的功能模块:一个是用来判断是否有必要切换至维护态下的监控守护进程;另一个则是真正意义上承载实际业务运算职责的工作域。每当检测到来自信赖源处的有效触发事件后便立即暂停前者继续前进的步伐进而调用后者所提供的API函数接口来着手安排接下来要做的事情。 ```assembly ; 假定已知地址范围内存在合法有效的bootloader入口点 ldr r0, =NEW_APP_START_ADDR ; 加载新应用程序起始地址到寄存器r0 mov lr, pc ; 把返回地址设置为下一条指令的位置 bx r0 ; 跳转至新应用程序起点执行 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钢琴上的汽车软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值