单片机的几种ota内存分区表介绍

news2024/9/9 1:36:23

前言

在做项目时,现在越来越多被要求单片机要支持升级功能。需求变化快,固件要不断支持新的功能,手动人工去烧固件越来越显得麻烦,已经操作成本高。

典型的方式是通过单片机外接的蓝牙、wifi等无线模块,或者通过单片机的上位机通过网络接收升级固件等方式来实现单片机升级的硬件通路。

单片机升级,就涉及到了单片机的内存分区。这里介绍下,常用的几种典型的分区方式。

1、BootLoader+APP方式

这种方式是将单片机的flash划分为3个分区。如下图。
在这里插入图片描述
涉及到升级,BootLoader分区都是必需的。参数区用于保存app需要用到的一些参数,已经升级相关参数。

开机启动过程

BootLoader 启动,跳转到APP分区的main函数运行。

升级过程
1、APP程序收到升级命令,将要升级的标志位存入parameter分区,然后跳转到BootLoader的main函数执行。
2、BootLoader运行后检测到parameter分区的升级标志位后,就将APP分区擦除。
3、BootLoader一帧一帧接收升级数据,然后写入APP分区
4、所有升级数据写入完成后,清除升级标志位,再跳转到App分区
5、固件升级完成。

这种方式的缺点很明显,APP分区容易挂掉,如果升级过程中掉电,或者通信异常了,单片机将不能正常运行到app分区。

应用场景
只适用于flash非常小的单片机,且如果升级过程有bug,还是需要人工刷BootLoader。除非万不得已,不要采用这种分区方式,可以直接更换flash更大的单片机。

2、BootLoader+APP+OTA分区方式

在这里插入图片描述
OTA分区存放最新的固件。其升级过程如下:
1、APP中收到升级命令,然后擦除OTA分区。
2、APP中接收升级固件,并一帧一帧写入OTA分区。
3、写入完毕后,将升级标志位写入Parameter分区。
4、APP只直接调用系统重启函数,通过触发复位来重启。
5、BootLoader读取到升级标志位,然后擦除APP分区。
6、擦除完毕后,将OTA分区固件搬运到APP分区
7、搬运完毕后,清除升级标志位,然后跳转到APP分区

这种方式是APP来接收固件,更为方便,修复升级bug,只需要升级一个版本即可,不需要人工刷BootLoader

如果要实现实时版本回滚,可以再增加一个OTA1分区用于存储升级前的固件。

3、BootLoader+APP+Backup分区方式

在这里插入图片描述

Backup分区存放升级前的固件。其升级过程如下:
1、1、APP程序收到升级命令,将要升级的标志位存入parameter分区,然后跳转到BootLoader的main函数执行。
2、BootLoader运行后检测到parameter分区的升级标志位后,就将Backup分区擦除。
3、擦除完毕后,将APP分区搬运到Backup分区。
4、搬运完毕后,擦除APP分区。
5、BootLoader读取到升级标志位,然后擦除APP分区。
3、BootLoader一帧一帧接收升级数据,然后写入APP分区
4、所有升级数据写入完成后,清除升级标志位,再跳转到App分区。

该方式的优势是,可以实现回滚功能。如果升级失败,重启会把backup分区再次搬运到APP分区。

3、BootLoader+APP+APP1分区方式

在这里插入图片描述
这种方式采用的双APP的方式。升级的过程如下:
1、当前运行在APP分区,收到升级命令后,就把APP1分区擦除掉
2、APP中将收到的固件写入APP1分区
3、写入完毕后跳转到APP1分区。
同理如果当前是在APP1,就会把固件写入APP然后跳转到APP运行。

这种方式比较复杂,每次编译都需要编译两个固件,固件版本一致,唯一的区别是中断向量表的首地址不一样,分别对应APP和APP1分区,且APP分区的固件不能放入APP1,否会会因为中断向量表与实际位置不符,造成运行出错。

这种方式优势也很明显,回滚,不需要操作flash,只需要跳转分区即可。同时这种可靠性最高,不存在挂掉的可能性,因为任何一个时候都有一个分区是可以正常运行的。只有升级完成后,才会跳转到新分区,否则就继续在当前分区运行。并且升级完成后,直接跳转,不需要重启单片机。

这种方式一般用于可靠性要求非常高的场合。

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

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

相关文章

如何创建UE5插件?

UE5 插件开发指南 前言1.0.打开插件窗口1.1.打开新建插件窗口1.2.填写新插件信息1.3.查看引擎自动生成的插件内容前言 首先,笔者默认读者已经知道如何安装UE5虚幻引擎了,并且也会编辑器的一些基本操作,那么这里省略了:如何注册Epic Games账号?如何安装UE5引擎?如何安装C++相…

基于SpringBoot的完成SSM整合项目开发

整合第三方技术 1. 整合JUnit问题导入1.1 Spring整合JUnit(复习)1.2 SpringBoot整合JUnit 2. 基于SpringBoot实现SSM整合问题导入2.1 Spring整合MyBatis(复习)2.2 SpringBoot整合MyBatis2.3 案例-SpringBoot实现ssm整合 1. 整合JU…

Maven多环境配置与使用、跳过测试的三种方法

文章目录 1 多环境开发步骤1:父工程配置多个环境,并指定默认激活环境步骤2:执行安装查看env_dep环境是否生效步骤3:切换默认环境为生产环境步骤4:执行安装并查看env_pro环境是否生效步骤5:命令行实现环境切换步骤6:执行安装并查看env_test环境是否生效 2 跳过测试方式1:IDEA工具…

机器学习之滤波入门

滤波的基本概念: 滤波是一种信号处理技术。在机器学习中,滤波通常指的是对输入信号进行加工,以消除噪声、平滑信号或突出特定频率范围的信号 简言之:加工输入,达到理想信号。 用生活的例子来解释: 假设你正在听一首音乐,但是在你的…

UML中的assembly关系

UML中的assembly关系 1.什么是Assembly关系 在UML(统一建模语言)中,"assembly"(组装)是一种表示组件之间关系的关联关系。组件是系统中可替换和独立的模块,可以通过组装来构建更大的系统。 当一…

零基础入门网络安全必看书单(附电子书籍+配套资料)

学习的方法有很多种,看书就是一种不错的方法,但为什么总有人说:“看书是学不会技术的”。 其实就是书籍没选对,看的书不好,你学不下去是很正常的。 一本好书其实不亚于一套好的视频教程,尤其是经典的好书…

中间件(一)

中间件 1. 概念1.1 为什么要使用中间件?1.2 中间件定义及分类 2. 主要分类2.1 事务式中间件2.2 过程式中间件2.3 面向消息的中间件2.4 面向对象中间件2.5 Web应用服务器2.6 数据库中间件2.7 其他 3. 常用的中间件 1. 概念 中间件(Middleware&#xff09…

BigDecimal 类型的使用

目录 一、前言 二、BigDecimal构造方法 二、BigDecimal参与运算 2.1定义初始值 2.2计算 2.3比较大小 2.4BigDecimal取其中最大、最小值、绝对值、相反数: 2.5补充 2.6、java中 BigDecimal类型的可以转换到double类型: 三、BigDecimal格式化、小…

小白白也能学会的 PyQt 教程 —— 图像类及图像相关基础类介绍

文章目录 〇、前言一、PyQt 中的图像类1、图像类简介2、图像类转换① 常用类转换(QPixmap、QImage、QIcon)② QBitmap、QBrush、QPen 转换为 QPixmap 或 QImage③ QByteArray 与 QPixmap、QImage 的互转④ numpy 与 QImage 互转 二、图像显示组件1、使用…

DNDC模型在土地利用变化、未来气候变化下的建模方法及温室气体时空动态模拟实践技术

DNDC模型讲解 1.1 碳循环模型简介 1.2 DNDC模型原理 1.3 DNDC下载与安装 1.4 DNDC注意事项 ​ DNDC初步操作 2.1 DNDC界面介绍 2.2 DNDC数据及格式 2.3 DNDC点尺度模拟 2.4 DNDC区域尺度模拟 2.5 DNDC结果分析 ​ DNDC气象数据制备 3.1 数据制备中的遥感和GIS技术 3…

微博官方API使用方法【从注册到实战】

第一步:微博开发者身份认证 访问微博开放平台,登录自己微博账号,登录之后首先需要完善开发者的基本信息。【使用个人】 填写完成之后【审核通过】如下: 第二步:创建自己的应用 【备注:如果只是为了测试…

Linux安装Redis6.0版本教程

前言:采用Redis源码压缩包解压编译的安装方式。因为centos7.x的gcc版本还是4.8.5,而GCC编译指定的版本是需要5.3以上。 1、下载Redis的tar.gz的安装包 百度云下载:Linux下载Redis6.0.8 提取码:dbbv 2、安装gcc新版本 #环境部署…

【IEEE CIM 2023】基于多目标进化算法的抗菌肽设计方法

Evolutionary Multi Objective Optimization in Searching for Various Antimicrobial Peptides 小生境共享(Niche Sharing)是生物进化算法中的一个重要概念。在传统的进化算法中,通常会假设每个个体都是独立且不同的,因此可能会导…

机器学习基础之单层感知机及线性可分

文章目录 线性可分和权重向量公式线性不可分 线性可分和权重向量 单层感知机是后续深度学习的基础模型,本身没什么用,因为只能解决线性可分问题。 如这张图,想识别照片是横向的还是竖向的,只需要在中间画一条线,白点…

【大数据学习篇9】各区域热门商品Top3分析

学习目标/Target 掌握各区域热门商品Top3分析实现思路 掌握如何创建Spark连接并读取数据集 掌握利用Spark获取业务数据 掌握利用Spark过滤商品的行为类型 掌握利用Spark转换数据格式 掌握利用Spark统计每个区域中的不同商品 掌握利用Spark根据区域进行分组 掌握利用Spark根据区…

Linux的tail,grep,sed命令总结,以使用上述三种命令获取日志信息为例

目录 tail命令语法说明基本参数命令举例 grep命令语法说明匹配模式选择杂项输入控制文件控制 sed命令语法格式举例 使用命令组合查询日志信息 业务需求需要对软件日志进行查询和呈现,查询的条件是时间区间和关键词,系统运行在linux环境下,为此…

阿里巴巴“高并发”核心笔记!《基础+实战+源码+面试+架构》

前言 作为一个普普通通的程序员,如何才能提升自己的能力,在职场上拥有一技之长,这也成为普通的你我,迫切的需求。 拥有什么样的能力才能不被淘汰?答案是:高并发,它几乎成为了每个程序员都想要…

ATTCK v13版本战术介绍——防御规避(六)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术,本期我们为大家介绍ATT&CK 14项战术中防御规避战术第31-36种子技术,后续会介绍防御规避其他子技术&#xf…

还只是停留在听过KMP算法?保姆式分析让你吃透KMP算法

💕成功不是将来才有的,而是从决定去做的那一刻起,持续积累而成。💕 🐼作者:不能再留遗憾了🐼 🎆专栏:Java学习🎆 🚗本文章主要内容:深…

腾讯云,物联网开发平台产品,动态注册步骤

1. 下载后解压,qcloud_iot_mqtt_sign-master.zip GitHub - tencentyun/qcloud_iot_mqtt_signContribute to tencentyun/qcloud_iot_mqtt_sign development by creating an account on GitHub.https://github.com/tencentyun/qcloud_iot_mqtt_sign 2. 按照readme文…