基于IAP的嵌入式系统在线编程设计(学习)

摘要:为了实现嵌入式系统程序的在线升级,提出一种基于IAP在线编程的程序更新方法。
以STM32L431控制器为例,该方法对控制器的片内FLASH进行区域划分,分别存放引导程序、执行程序及待更新程序。

系统通过运行引导程序将待更新程序更新到执行程序的FLASH区域,程序更新成功后跳转至新的执行程序运行。

该设计成功实现了FLASH程序的在线更新并进行了实验验证,其操作简单、速度快、正确率高。

引言

当今社会,嵌入式系统已经广泛应用于各行各业,人们对嵌入式产品的要求也越来越高。
由于嵌入式系统软件需要经常更新才能更加适应环境变化,满足日常功能所需,所以在线更新升级程序的技术就显得很重要。

传统的程序升级方法需要将调试工具通过线缆连接到电路板上的JTAG接口,对微处理器进行程序下载更新,这种方法需要重新拆卸组装设备,影响系统的可操作性。

IAP技术简介

传统的单片机在线编程方式有ICP、ISP和IAP三种。
ICP编程需要将单片机芯片外接在线仿真器才可进行编程。
ISP与IAP技术都只需要单片机内置Bootloader进行程序引导实现编程。
ISP编程通信方式较为简单,其系统内部自带Bootloader程序,只需在系统运行前由Bootloader通过通信端口进行程序更新和原有数据擦除。

IAP的Bootloader由用户设计,且是在系统运行过程中操作,主要通过对FLASH写入Bootloader程序之后运行系统,使用户程序在 Bootloader的引导下对 FLASH 烧写和擦除数据。

本设计将FLASH趋于分为两个主要部分:Boot-loader和FLASH_APP。
为了避免程序失败使当前运行程序停止,将FLASH_APP细化为FLASH_APP_A和FLASH_APP_B,用来存放执行程序和待更新程序。
当系统通电后,先执行Bootloader代码,该程序主要具备两个功能:

  1. 引导用户程序FLASH_APP的远程更新。
  2. 向用户程序FLASH_APP跳转。

若有程序更新指令下达,则将FLASH_APP_B区中的代码转移到FLASH_APP_A区进行更新,然后跳转至更新成功的FLASH_APP_A中执行用户程序;若没有更新指令或更新失败,则继续执行FLASH_APP_A区中的程序。

硬件设计

在这里插入图片描述
主要包括主控芯片、时钟电路、复位电路、电源电路、JTAG接口电路。

系统上电后,上位机借助JTAG调试器将Bootloader程序烧写至嵌入式系统,烧写成功后,上位机软件通过USB串口将生成的BIN文件写入,并下发程序更新等各种指令。

Bootloader只需烧写一次,后续程序更新将相关 BIN 文件通过串口引导至指定 FLASH 区域即可。

FLASH区域划分

FLASH 程序空间被分为3段空间用来实现程序更新,分 别 为 Bootloader 空 间、FLASH_ APP_ A 空 间 和FLASH_APP_B 空间。
在这里插入图片描述

Bootloader软件设计

嵌入式在线升级系统包含上位机控制系统和嵌入式设备终端两部分。
上位机主要是将编译完成的烧写文件打包处理,发送至嵌入式设备。
嵌入式设备接收时先寄存代码帧的帧个数和帧计数,然后判断数据帧的帧头和校验和。
若校验和正确,将该帧的源码写入FLASH_APP_B对应空间,将帧计数反馈给上位机计算更新进度。

例如,程序源码为20KB,每1KB为1帧,若当前反馈第12帧,则计算后的更新进度为60%,源码下发的帧间隔为300ms,当更新进度100%后显示更新完成。
更新成功后,将FLASH_APP_B程序完整地拷贝到FLASH_APP_A空间,同时将程序版本写入FLASH对应的空间,加锁FLASH,跳转至对应FLASH_APP空间的函数入口。

程序更新完成后,嵌入式设备给上位机发送反馈帧命令,并将写入FLASH的数据校验码返回给上位机,上位机收到校验码并校验无误后,结束与嵌入式设备的通信。

嵌入式系统在线升级的关键部分在于Bootloader引导程序的设计。
在本次提出的IAP在线编程中,将引导程序功能分为3个状态进行分析,分别为空闲态、跳转态以及升级态。
在这里插入图片描述
“空闲态”为系统上电时,Bootloader软件处于等待状态,当接收到上位机指令后,进入下一状态。
“升级态”时主要完成FLASH执行程序区域的擦除和烧写操作,重新读取执行程序区的数据并进行检验,将结果反馈给上位机。

状态转换只有空闲态转升级态、空闲态转跳转态、升级态转跳转态3种。

在这里插入图片描述

程序软件配置

打开Bootloader工程文件,在Keil中设置IROM1Start:0x08000000;Size:0x8800。
在这里插入图片描述
打开FLASH_APP工程文件,设 置 “IROM1Start:0x08009800;Size:0x1C000”。

同时,修改void SystemInit(void)函数,设置对应区域的中断向量表,程序如下:
在这里插入图片描述

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

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

相关文章

手把手教你使用stable diffusion生成自己的艺术二维码

艺术二维码制作指南 导读midjourneystable diffusion 环境准备安装stable diffusion webuisd-webui-qrcode-toolkit安装 草料二维码模型准备QR PatternQR Code MonsterIoC Lab Control Net 艺术二维码制作1. 二维码信息提取2. 使用QR Tookit生成二维码3. 下载二维码图片4. prom…

大数据Flink(五十):流式计算简介

文章目录 流式计算简介 一、数据的时效性 二、流式计算和批量计算

【手机】三星手机刷机解决SecSetupWizard已停止

三星手机恢复出厂设置之后,出现SecSetupWizard已停止的解决方案 零、问题 我手上有一部同学给的三星 GT-S6812I,这几天搞了张新卡,多余出的卡就放到这个手机上玩去了。因为是获取了root权限的(直接使用KingRoot就可以&#xff0…

数据安全:DataSecurity Plus

随着数字化时代的来临,数据成为了企业和个人生活中不可或缺的一部分。然而,数据的增长和广泛应用也带来了许多安全挑战。数据泄露、黑客攻击和恶意软件成为了威胁数据安全的主要因素。在这个充满风险的环境中,DataSecurity Plus作为一种强大的…

一起学算法(选择排序篇)

距离上次更新已经很久了,以前都是非常认真的写笔记进行知识分享,但是带来的情况并不是很好,一度认为发博客是没有意义的,但是这几天想了很多,已经失去了当时写博客的初心了,但是我觉得应该做点有意义的事&a…

测试常见前端bug

目录 协作 测试方法 标签:标签 内容/ref/ 判断 arr&&arr.length 交互 样式不生效:devtools查找,编译前的标签,运行时不一定存在 可交互的需要提示 hover样式 没有交互逻辑,就不要设置交互 无法交互…

为 Google Play 即将推出基于区块链的内容政策做好准备

作者 / Joseph Mills, Group Product Manager, Google Play 作为一个平台,Google Play 一直致力于帮助开发者将创新理念变为现实。Google Play 上托管了许多和区块链相关的应用,我们深知合作伙伴们希望扩展这些应用,并利用 NFT 等代币化数字资…

使用WGCLOUD监测安卓(Android)设备的运行状态

WGCLOUD是一款开源运维监控软件,除了能监控各种服务器、主机、进程应用、端口、接口、docker容器、日志、数据等资源 WGCLOUD还可以监测安卓设备,比如安卓手机、安卓设备等 我们只要下载对应的安卓客户端,部署运行即可,如下是下…

Vue3 Radio单选切换展示不同内容

Vue3 Radio单选框切换展示不同内容 环境&#xff1a;vue3tsviteelement plus 技巧&#xff1a;v-if&#xff0c;v-show的使用 实现功能&#xff1a;点击单选框展示不同的输入框 效果实现前的代码&#xff1a; <template><div class"home"><el-row …

优化 SQL 体验:五款 AI 驱动工具助力 SQL 查询

SQL AI 工具能够极大提高跟数据和数据库打交道人员&#xff08;e.g. 数据分析师、数据科学家、数据库管理员、开发者&#xff09;的效率和生产力&#xff0c;比如可以根据自然语言输入自动生成 SQL 查询&#xff08;非技术用户也能轻松访问和分析数据了&#xff01;&#xff09…

【分布式能源的选址与定容】基于多目标粒子群算法分布式电源选址定容规划研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.1 功率损耗 ​编辑1.2 电压质量 1.3 DG总容量 &#x1f4da;2 运行结果 &#x1f308;3 Matlab代码实现 &#x1f389;4 参考文献 &#x1f4a5;1 概述 参考文献&#xff1a; 本文采用的是换一个算法解决&#xff0c; 基于基于多目标粒子群算法分布…

AB 压力测试

服务器配置 阿里云Ubuntu 64位 CPU1 核 内存2 GB 公网带宽1 Mbps ab -c100 -n1000 http://127.0.0.1:9501/ -n&#xff1a;在测试会话中所执行的请求个数。默认时&#xff0c;仅执行一个请求。 -c&#xff1a;一次产生的请求个数。默认是一次一个。 ab -c 100 -n 200 ht…

Doris注意事项,Doris部署在阿里云,写不进去数据

1.Doris官网 Doris官网https://doris.apache.org/ 2.根本原因 本地idea访问FE&#xff0c;FE会返回BE的地址&#xff0c;但是在服务器上通过ip addr查看&#xff0c;发现只有局域网IP&#xff0c;所以FE返回了局域网的IP&#xff0c;导致idea连接不上BE 3.解决办法 重写Ba…

二十三章:抗对抗性操纵的弱监督和半监督语义分割的属性解释

0.摘要 弱监督语义分割从分类器中生成像素级定位&#xff0c;但往往会限制其关注目标对象的一个小的区域。AdvCAM是一种图像的属性图&#xff0c;通过增加分类分数来进行操作。这种操作以反对抗的方式实现&#xff0c;沿着像素梯度的相反方向扰动图像。它迫使最初被认为不具有区…

10. Mybatis 项目的创建

目录 1. Mybatis 概念 2. 第一个 Mybits 查询 2.1 创建数据库和表 2.2 添加 Mybatis 框架支持 2.3 添加配置文件 2.4 配置 MyBatis 中的 XML 路径 2.5 添加业务代码 在学习 Mybatis 之前&#xff0c;我们需要知道 Mybatis 和 Spring 没有任何的关系。如果一定要强调二者…

建造者设计模式 + 高阶函数 => DSL

该设计模式适用于创建复杂对象&#xff0c;该复杂对象通常是由各个部分的子对象用一定的算法或者步骤构成&#xff0c;针对每个子对象内部算法和步骤通常是稳定的&#xff0c;但是该复杂对象的确实由于不同的需求而选择使用不同的子对象进行组装。对于构建该复杂的对象&#xf…

20.0 HTTP 通信

1. web开发 1.1 web开发介绍 Web指的是World Wide Web(万维网), 是一种基于互联网的信息系统. 万维网由一系列通过超文本链接相互连接的页面组成, 这些页面中包含了文本, 图像, 音频, 视频等多媒体内容. 用户可以通过浏览器访问万维网上的网页, 并通过超链接在不同页面之间导…

Golang速成

目录 Golang 语言特性Golang的优势Golang 的应用场景Golang 的不足 基础语法变量的声明常量与 iotastring字符串遍历strings 包bytes 包strconv 包unicode 包 循环语句range 函数多返回值init 函数闭包import 导包匿名函数 指针defer切片 slice数组sliceslice 操作… mapmap 的…

数据结构基础知识、名词概述

1.1 基本概念和术语1.1.1 数据、 数据元素、 数据项和数据对象1.1.2 数据结构1.1.3 数据类型和抽象数据类型 1.2 抽象数据类型的表示与实现1.3 算法与算法分析&#xff08;1&#xff09;1.4 算法与算法分析&#xff08;2&#xff09;1.5 算法与算法分析&#xff08;3&#xff0…

pytest 自定义HOOK函数

除了系统提过的HOOK函数外&#xff0c;也可以通过自定义HOOK的方式实现想要的功能。 首先创建一个py文件&#xff0c;里面定义自己的HOOK函数&#xff0c;主要pytest里面的hook函数必须以pytest开头。 #myhook.pydef pytest_myhook(user):"""自定义HOOK函数&q…