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

news2024/9/23 23:22:11

摘要:为了实现嵌入式系统程序的在线升级,提出一种基于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.coloradmin.cn/o/806741.html

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

相关文章

飞行动力学-第15节-part2-松杆中性点 之 基础点摘要

飞行动力学-第15节-part2-松杆中性点 之 基础点摘要 1. 松杆中性点2. 松浮角2. 杆力梯度3. 参考资料 1. 松杆中性点 stick fixed: N 0 N_0 N0​,握杆,升降舵固定stick free: N 0 ′ N_0 N0′​,松杆,升降舵…

linux -网络编程一网络基本概念和Socket编程

目录 1 网络基础概念 1.1 协议 1.2分层模型 1.3 数据通信过程 1.4 网络应用程序的设计模式 1.5 以太网帧格式 1.6网络名词术语解析(自行阅读扫盲) 2 SOCKET编程 2.1 socket编程预备知识 2.2 socket编程主要的API函数介绍 目标: 了解OSI七层、TCP/IP四层模…

论文浅尝 | 预训练Transformer用于跨领域知识图谱补全

笔记整理:汪俊杰,浙江大学硕士,研究方向为知识图谱 链接:https://arxiv.org/pdf/2303.15682.pdf 动机 传统的直推式(tranductive)或者归纳式(inductive)的知识图谱补全(KGC)模型都关注于域内(in-domain)数据,而比较少关…

Centos7 安装man中文版手册

查找man中文安装包: yum search man-pages 安装man-pages-zh-CN.noarch: yum install -y man-pages-zh-CN.noarch

飞行动力学 - 第15节-part 1-操纵力与铰链力矩 之 基础点摘要

飞行动力学 - 第15节-part 1-操纵力与铰链力矩 之 基础点摘要 1. HOTAS全拼2. 操纵杆力&铰链力矩3. 铰链力矩4. 气动补偿(Aerodynamic Balancing)5. 参考资料 1. HOTAS全拼 Hands On Throttle And Stick 2. 操纵杆力&铰链力矩 操纵杆力&#…

JGJ59-2011建筑施工安全检查标准

为科学评价建筑施工现场安全生产,预防生产安全事故的发生,保障施工人员的安全和健康,提高施工管理水平,实现安全检查工作的标准化,制定本标准。 本标准适用于房屋建筑工程施工现场安全生产的检查评定。 建筑施工安全…

jenkins 配置git

在linux 中输入 保证git 安装成功 git --version使用查看git 安装目录(非源码安装直接用yum 安装的) which gitjenkins 中到 系统管理–>全局工具配置–> Git installations 新建一个项目 选择自由风格 源码管理选择 git 如果使用的是码云&a…

Python不是一门伟大的语言

作为一门简洁易用、生态蓬勃且具有高泛用性的编程语言,Python一直以来都被不少人称作“编程语言中的瑞士军刀”。 尤其随着近来AI热潮席卷全球,Python在编程语言圈中的地位也随之水涨船高,甚至一度被视作AI专用语言或大数据专用语言。 然而…

螺旋矩阵 II

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2: 输入:n 1 输出&a…

九耶:冯·诺伊曼体系

冯诺伊曼体系(Von Neumann architecture)是一种计算机体系结构,它由匈牙利数学家冯诺伊曼于1945年提出。冯诺伊曼体系是现代计算机体系结构的基础,几乎所有的通用计算机都采用了这种体系结构。 冯诺伊曼体系的核心思想是将计算机硬…

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

设计模式-备忘录模式在Java中使用示例-象棋悔棋

场景 备忘录模式 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效 或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,当前很多软件都提供了撤销(Undo)操作&#xff0…

CSDN周赛65期简要题解

最近几期周赛里,貌似 Python 又变成 C 站的亲儿子了。输入形式是列表还不过瘾,现在输出形式也要求是列表,而且是连一个逗号、空格、中括号都不能少的 Python 标准列表形式。虽然对 Python 来说是信手拈来,但总要考虑一下其他编程语…

建木-进阶使用-自动化部署-流程自动化部署-节点化部署-将jar包运行在指定的服务器上-ssh文件书写-docker镜像创建

阿丹: 建木的搭建以及在jar包中的dockerfile文件的书写。已经完毕。现在开始使用建木的流程化部署来完成自动化部署。 进入我们自己配置的建木页面 新建一个分组,方便我们不同项目的管理 起名要求见名知意 使用图形项目 开始新建一个流程,…

百题千解计划【CSDN每日一练】“小明投篮,罚球线投球可得一分”(附解析+多种实现方法:Python、Java、C、C++、C#、Go、JavaScript)

这个心上人,还不知道在哪里,感觉明天就会出现。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 🏆[4] CSDN-人工智能领域优质创作者�…

十八章:用于弱监督语义分割的自监督等变注意力机制

0.摘要 图像级弱监督语义分割是一个具有挑战性的问题,近年来得到了深入研究。大多数先进的解决方案利用类激活图(CAM)。然而,由于全监督和弱监督之间存在差距,CAM几乎无法用作对象掩码。在本文中,我们提出了…

最后的组合:K8s 1.24 基于 Hekiti 实现 GlusterFS 动态存储管理实践

前言 知识点 定级:入门级GlusterFS 和 Heketi 简介GlusterFS 安装部署Heketi 安装部署Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.912450100…

王道数据结构-代码实操1(全注解版)

#include<stdio.h>void loveyou(int n){ // 传入参数类型为int型&#xff0c;在此函数中表示为n&#xff1b;返回值类型为void&#xff0c;即没有返回值&#xff1b; int i1; //定义了一个整数型变量i&#xff0c;且只在loveyou函数中有用&#xff1b;while(i…

python环境搭建和pycharm安装

python环境搭建 下载地址&#xff1a;Python Releases for Windows | Python.org 双击安装 选择自定义安装&#xff0c;勾选添加至PATH 配置自定义安装路径 点击disable 长度限制 测试安装 winr ->cmd->python,出现版本号则安装成功 pycharm安装 访问Jetbrains中文官网&a…

linux的C/C++线程池(VS2019开发)

文章目录 一、准备工作二、C语言threadpool实现三、C 11标准实现 代码看视频敲的&#xff0c;非原创 一、准备工作 创建项目 连接linux虚拟机 启动测试&#xff1a;VS2019运行Linux程序报错&#xff1a;无法启动gdb。系统中缺少gdb。sudo yum install -y gdb 线程池的组成主…