Bootloader+升级方案

随着设备的功能越来越强大,系统也越来越复杂,产品升级也成为了开发过程不可或缺的一道程序。在工程应用中,如何在不更改硬件的前提下通过软件的方式实现产品升级。通过Bootloader来实现固件的升级是一种极好的方式,Bootloader是单片机上电后运行的第一段程序,该程序主要负责固件的更新。

图1 固件升级

对于产品固件的升级,用户可采用AMetal提供的Bootloader单区、双区、差分升级算法及升级示例来进行产品开发。关于Bootloader升级算法的介绍如下:

Bootloader单区升级

单区bootloader通常是将芯片内部的Flash主要划分为bootloader区、APP区和参数区。bootloader用于引导程序,APP扇区是为了存放升级后的应用程序,参数区是用于存储特殊的参数,具体的扇区大小可以根据实际使用情况,进行合理划分。单区升级的典型模型如下:

图2 单区升级模型

【原理说明】

芯片上电后首先从首地址即bootloader开始执行,参数校验无误,跳转到APP扇区。若有升级的请求,程序跳转到首地址,在bootloader中接收新的固件,然后将APP区擦除。在新固件参数校验成功后,程序将从bootloader跳转到APP区执行应用程序,进而完成固件的升级。

【应用场景】

在擦除APP区的过程中,若设备突然断电,会造成APP区的应用程序无法启动。在这种情况下,虽然会重新跳转到bootloader接收新的固件,进而完成固件的升级;但也存在一些不必要的麻烦,即设备需要多次写入固件。因此该种升级算法只适用于本地升级,不能在程序正常运行的过程中升级,常适用于Flash容量较小的场景下。

Bootloader双区升级

【双区升级模型】

以ZLG116芯片为例,该芯片内部主Flash大小为64K(0x0800_0000 - 0x0800_FFFF),主要将Flash划分了四个部分:bootloader段扇区,应用段扇区,升级扇区(备份区),升级标志扇区。其中bootloader用于引导程序;应用扇区是为了存放升级后的应用程序;升级扇区是为了存储新的固件,用于备份固件;升级标志扇区是用于存储特定的标志等。用户可以根据自身的实际应用情况合理划分各区的大小,双区升级的典型模型如下所示:

图3 双区升级模型

【原理说明】

按照上述的ZLG116 Flash划分,程序首先从地址为0x08000000,即bootloader开始执行,参数校验通过后,跳转到应用区。在接收到升级需求后,先将新的固件写入起始地址为0x0800FC00的备份区,并擦除APP扇区。接着将update(备份区)存储的新固件写入到bootloader中,从而完成新固件的写入。若在擦除APP区的过程中受到其他因素的干扰,用户可以再次将备份区的固件写入bootloader。新固件的参数校验通过后,程序从bootloader跳转到起始地址为0x08003C00的APP区执行应用代码。

【应用场景】

相比于单区升级,双区升级的模型增加了一块备份扇区,用于存放新的固件。因此即使在擦除APP的时候,设备发生断电,双区升级也无需再次在bootloader中接收新固件,只需将备份区存储的固件传入到bootloader即可。该升级方式虽然可以避免单区升级只能在本地升级的苦恼,但无法降低传输固件的流量,不适用于开发板内存空间较小的场景下。并且双区升级不得不需要整个APP进行升级,这给产品升级带来了一些不便。

Bootloader差分升级

【差分包原理】

差分升级是将新老固件具有差异的部分剥离出来,例如固件从V1.1.0升级到V1.1.1,两个固件相比只修改了1K的内容,如下图红色部分为不同部分,将该部分剥离出来生成差分包Diff_V1.1.0~V1.11,通过云端将差分包推送到设备端,设备端接收完成之后,先解压差分包,再通过差分恢复算法,根据差分包中的数据标志,将新老固件进行融合,变成新的固件,从而完成升级。

图4 差分包原理

【差分升级模型】

以基于华大HC32L196芯片设计差分升级为例,该芯片Flash为256K(0x000_0000~0x0003_FFFF),首先需要对Flash进行划分,主要划分为4个部分:BootLoader区、应用区、download区、参数区。BootLoader区用于引导升级,应用区为升级后的应用程序,download区为下载差分包存储区间,参数区用于存储特定参数。各区大小按照实际使用情况,进行合理划分。差分升级的典型模型如下所示:

图5 差分升级模型

【原理说明】

按照图5所示的升级模型,设备上电后首先从bootloader开始执行,参数无误后跳转到应用区。当有升级的需求时,先擦除APP区,并将新老固件进行分包,然后按顺序对分包后的新老固件对应的每个小块进行差分压缩,最后将所有的压缩包合并成一个文件,形成了升级的固件。将新的升级固件存放在download扇区,然后将该固件写入bootloader中,若固件参数校验无误,则跳到应用区执行后续的程序,进而完成产品的升级。

【应用场景】

差分升级的优点是升级固件更小、下载速度也更快,也更加节省内存空间。相对于整包升级方式(单区升级/双区升级),其缺点是依赖特定固件。例如:某一差分包为V1.0固件升级到V1.1固件的差分包Diff_V1.0~V1.1,则该差分包只能用于升级版本号是V1.0固件的设备;对于其他版本号固件的设备不能用它升级。差分升级一般适用于希望降低传输固件的流量,或者开发板内存不足,不依靠特定升级固件的场景中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/621280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

巴奴火锅翻车,杜中兵后悔暗讽海底捞

曾经喊出“服务不过度,样样都讲究”、内涵海底捞的巴奴火锅,又改回了2012年的广告语,试图重回“产品主义”。 巴奴火锅于2001年创立于河南安阳,彼时被视作火锅界的黑马。巴奴火锅创始人的杜中兵,坚信“产品主义”一定…

周进院长受邀出席2024第四届屈光手术国际论坛获多项荣誉称号!

周进院长受邀出席2024第四届屈光手术国际论坛获“全国首批EVOICL(V5)新技术临床应用专家”等多项荣誉称号! 5月10-12日,由爱尔眼科医院集团主办、长沙爱尔眼科医院协办的2024第四届屈光手术国际论坛(IRSS 2024&#x…

攻防世界PHP2

1、打开靶机链接http://61.147.171.105:49513/,没有发现任何线索 2、尝试访问http://61.147.171.105:49513/index.php,页面没有发生跳转 3、尝试将访问 尝试访问http://61.147.171.105:49513/index.phps index.php 和 index.phps 文件之间的主要区别在于…

智能自助终端主板RK3288/RK3568在酒店前台自助机方案的应用,支持鸿蒙,支持免费定制

酒店前台自助机解决方案是一款基于自助服务终端,能够让客人通过简单的操作完成入住登记/退房的解决方案,大幅提高酒店的工作效率,提升客人体验,降低人力成本。 该方案解决了以下传统前台登记入住方式的痛点: 1、人流量…

智能仓储物流系统(WMS)系列-出库分配发货

好的应用系统应是细分简单,界面简洁易操作,程序代码简洁易懂的。

8种常见的CMD命令

1.怎么打开CMD窗口 步骤1:winr 步骤2:在弹出的窗口输入cmd,然后点击确认,就会出现一个cmd的窗口 2.CMD的8种常见命令 2.1盘符名称冒号 说明:切换盘的路径 打开CMD窗口这里默认的是C盘的Users的27823路径底下&#xf…

Star CCM+衍生零部件的创建

前言 在一个仿真计算项目中,分配零部件至区域、划分网格后。下一步可以先将需要监测的点、面建立出来,方便后续创建报告。Star中需要创建点、面是在衍生零部件下创建。衍生零部件→右键→新建(如下图1所示)。通过衍生零部件可以创…

visual studio2022 JNI极简开发流程

文章目录 1 创建java类2 生成JNI头文件3 使用visual studio2022创建DLL项目3.1 选择模板中(Windows桌面向导)3.2 为项目命名3.3 选择应用程序类型为动态链接库3.4 项目概览 4 导入需要的头文件4.1 导入需要的头文件4.2 修改头文件 5 编写C实现6 生成dll文…

五月采购节 | 全场板卡八七折起

淘宝搜索【北京迅为电子官方企业】 5月13日~5月15日 海量优惠券等你拿! 复制下方链接到淘宝 直接进入店铺! https://shop459378556.taobao.com

推荐非常方便的初始配置nginx的开源工具

官网 https://www.digitalocean.com/community/tools/nginx?global.app.langzhCN直接复制base64字符串在 /etc/nginx 目录执行,会自动生成配置文件,最后执行 使用tar解压新的压缩配置 tar -xzvf nginxconfig.io-xxx.com.tar.gz | xargs chmod 0644在…

基础ArkTS组件:导航栏组件(HarmonyOS学习第三课【3.8】)

Navigation 官方文献 Navigation 组件一般作为页面布局的根容器,它提供了一系列属性方法来设置页面的标题栏、工具栏以及菜单栏的各种展示样式。 Navigation 除了提供了默认的展示样式属性外,它还提供了 CustomBuilder 模式来自定义展示样式 说明 该…

docker安装clickhouse

docker安装clickhouse clickhouse什么是 OLAPOLAP场景的关键属性ClickHouse的特性ClickHouse性能docker安装clikehouse安装部署系统要求DEB安装包RMP安装包Tgz安装包Docker安装包1、下载安装包2、 创建挂在目录3、 创建临时容器4、复制临时容器内配置文件到宿主机5、停止并删除…

【重大故障】澳大利亚所有大学退休金数据被Google误删除,本地云服务总监被直接解雇

本周Google私有云发生重大故障,在维护UniSuper客户配置,误删除所有数据(包括异地备份数据), 客户最后通过其他供应商备份暂时已经恢复数据,但是系统还处于恢复中。 UniSuper 是一家澳大利亚退休金基金&…

【声呐仿真】学习记录3.5-docker中Gazebo是否使用GPU?解决声呐图像黑屏

【声呐仿真】学习记录3.5-docker中Gazebo是否使用GPU?解决声呐图像黑屏 🤡打包镜像,重装驱动(失败)Xorg重新配置DAVE环境(补充之前教程中的一些细节)解决声呐图像黑屏问题 在容器中运行 roslau…

公式识别软件免费的有哪些?简单好用的有三款

公式识别软件免费的有哪些?在数字化时代,公式识别软件已经成为科研、教育等领域不可或缺的工具。这些软件能够准确地将图像中的公式转化为可编辑的文本格式,极大地提高了工作效率。为了帮助大家轻松应对公式识别的挑战,今天本文就…

HarmonyOS开发案例:【Stage模型下Ability的创建和使用】

介绍 基于Stage模型,对Ability的创建和使用进行讲解。首先在课程中我们将带领大家使用DevEco Studio创建一个Stage模型Ability,并使用UIAbilityContext启动另一个Ability,然后借助Want,在Ability之间传递参数,最后我们…

【机器学习】人力资源管理的新篇章:AI驱动的高效与智能化

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

算法题解记录25+++验证二叉搜索树(百日筑基)

题目描述: 难度:中等 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必…

浅谈现代消息队列与云存储

一、前言 1970 年代末,消息系统用于管理多主机的打印作业,这种削峰解耦的能力逐渐被标准化为“点对点模型”和稍复杂的“发布订阅模型”,实现了数据处理的分布式协同。随着时代的发展,Kafka,Amazon SQS,Ro…

【主题广泛|稳定检索】2024年社会科学、公共服务与人文艺术国际会议(SPSHA 2024)

2024年社会科学、公共服务与人文艺术国际会议(SPSHA 2024) 2024 International Conference on Social Sciences, Public Services, and Humanities and Arts 【会议简介】 本次会议定于2024年在中国的繁华都市——广州召开,汇聚了全球在该领…