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固件的设备;对于其他版本号固件的设备不能用它升级。差分升级一般适用于希望降低传输固件的流量,或者开发板内存不足,不依靠特定升级固件的场景中。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

I2CKD : INTRA- AND INTER-CLASS KNOWLEDGE DISTILLATION FOR SEMANTIC SEGMENTATION

摘要 本文提出了一种新的针对图像语义分割的知识蒸馏方法,称为类内和类间知识蒸馏(I2CKD)。该方法的重点是在教师(繁琐模型)和学生(紧凑模型)的中间层之间捕获和传递知识。对于知识提取&#x…

12个乒乓球,有一个次品,不知轻重,用一台无砝码天平称三次,找出次品,告知轻重?

前言 B站上看到个视频:为什么有人不认可清北的学生大多是智商高的? 然后试了下,发现我真菜 自己的思路(失败) 三次称重要获取到12个乒乓球中那个是次品,我想着将12个小球编号,分为四组,每组…

yo!这里是socket网络编程相关介绍

目录 前言 基本概念 源ip&&目的ip 源端口号&&目的端口号 udp&&tcp初识 socket编程 网络字节序 socket常见接口 socket bind listen accept connect 地址转换函数 字符串转in_addr in_addr转字符串 套接字读写函数 recvfrom&&a…

Java入门基础学习笔记2——JDK的选择下载安装

搭建Java的开发环境: Java的产品叫JDK(Java Development Kit: Java开发者工具包),必须安装JDK才能使用Java。 JDK的发展史: LTS:Long-term Support:长期支持版。指的Java会对这些版…

pycharm报错Process finished with exit code -1073740791 (0xC0000409)

pycharm报错Process finished with exit code -1073740791 (0xC0000409) 各种垃圾文章(包括chatgpt产生的垃圾文章),没有给出具体的解决办法。 解决办法就是把具体报错信息显示出来,然后再去查。 勾选 然后再运行就能把错误显示…

MetaRTC-play拉流客户端代码分析

渲染使用opengl,音频播放使用alsa。 当点击播放按钮后,以此调用的类如下,开始建立rtc连接,AV解码,音频渲染,视频渲染。 如果想去除QT,改为cmake工程管理,去掉渲染部分即可。 下方是…

Linux---vim编辑器(续写)

5. vim正常模式命令集 插入模式 按「i」切换进入插入模式「insert mode」, 按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; 按「o」进入插入模式…

从头开始学Spring—01Spring介绍和IOC容器思想

目录 1.Spring介绍 1.1Spring概述 1.2特性 1.3五大功能模块 2.IOC容器 2.1IOC思想 ①获取资源的传统方式 ②反转控制方式获取资源 ③DI 2.2IOC容器在Spring中的实现 ①BeanFactory ②ApplicationContext ③ApplicationContext的主要实现类 1.Spring介绍 1.1Sprin…

Linux系统一步一脚印式学习

Linux操作系统具有许多特点和优势。首先,它是开放源代码的,也就意味着任何人都可以对源代码进行查看和修改。其次,可以同时支持多个用户且可以同时执行多个任务,此外,Linux操作系统也非常稳定和安全。相对于其他操作系…

安全测试|常见SQL注入攻击方式、影响及预防

SQL注入 什么是SQL注入? SQL注入是比较常见的网络攻击方式之一,主要攻击对象是数据库,针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,篡改数据库。 SQL注入简单来说就是通过在表单中填写包含SQL关键…

SSD-60S施耐德电机保护器EOCR-SSD

EOCR主要产品有电子式电动机保护继电器,电子式过电流继电器,电子式欠电流继电器,电子式欠电压继电器,其它保护装置,电流互感器。EOCR-SSD 10-60A电机保护器 系列型号: EOCRSSD-05SEOCRssD-30s EOCRSSD-60SEOCRSSD-0…

开源即时通讯IM框架 MobileIMSDK v6.5 发布

一、更新内容简介 本次更新为次要版本更新,进行了bug修复和优化升级(更新历史详见:码云 Release Notes、Github Release Notes)。 MobileIMSDK 可能是市面上唯一同时支持 UDPTCPWebSocket 三种协议的同类开源IM框架。轻量级、高…

8种常见的CMD命令

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

基于微信小程序+JAVA Springboot 实现的【网上商城小程序】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称: 基于微信小程序的网上商城 项目技术栈 该项目采用了以下核心技术栈: 后端框架/库: Java, SSM框架数据库: MySQL前端技术: 微信开发者工具,微信小程序框架 项目展示 5.1 管理员服务…

Mat: Unknown HPROF Version

问题:Mat 加载 android studio 导出的 hprof 文件失败 原因:android hprof 文件不是标准的 java hprof 文件 解决办法: 使用 android sdk 自带的命令将 hprof 转换成标准的 java hprof

瞬息全宇宙——穿越之旅终极教程,手把手教你做出百万点赞视频

最近一种叫“瞬息全宇宙”的视频火了,抖音一期视频百万赞,各个博主视频都在带瞬息全宇宙这个标签,于是就有很多朋友催我出教程了,在琢磨了几天之后,终于整出来了 教程包含了插件的安装,界面的讲解&#xff…

生产制造行业推拉式生产的复合应用

一、案例分析(汽配行业) 重点: 1. MTO/MTS 与 PUSH/PULL 有关系但是不是充分关系 2. MTO/MTS 是公司经营策略,更多是对市场需求的经营策略,体现在生产时机上的不同,一个是等客户需求,一个是填…

HTML4(三):表单

文章目录 表单1. 基本结构2. 常用表单控件2.1 文本输入框2.2 密码输入框2.3 单选框2.4 复选框2.5 隐藏域2.6 提交按钮2.7 重置按钮2.8 普通按钮2.9 文本域2.10 下拉框2.11 示例 3. 禁用表单控件4. lable标签5. fieldset与legend标签6. 总结 表单 概念:一种包含交互…

Raft论文阅读笔记+翻译:In Search of Understandable Consensus Algorithm

In Search of Understandable Consensus Algorithm 摘要 Raft是一种管理复制日志的共识算法。它产生与(多)Paxos等效的结果,并且与Paxos一样高效,但其结构与Paxos不同。这使得Raft比Paxos更易理解,也为构建实际系统提供…

近屿OJAC带你解读:什么是大模型幻觉?

忠实性幻觉也可以细分,分为指令不一致(输出偏离用户指令)、上下文不一致(输出与上下文信息不符)、逻辑不一致三类(推理步骤以及与最终答案之间的不一致)。 具体解析 大模型产生幻觉的原因可能…