【GD32F427开发板试用】工业级串口OTA实现----移植韦东山老师BootLoader项目

news2024/11/17 15:54:50

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:足球之路

一、综述

一款完善的工业产品往往需要支持在线更新程序的需求,业界最近火热的叫法叫做“OTA”。这篇文章记录我利用技术社区提供GD32F427芯片开发板完成的BootLoader移植过程,这套程序使用了z-moder传输协议和shell命令行模式,有较高的可靠性和友善的交互模式。如果想深入了解BootLoader技术原理,可以学习韦东山老师的免费视频:https://www.100ask.net/p/t_pc…

二、架构

三、分支

1、BootLoader

在现在的单片机程序中实现BootLoader有多种方法,韦东山老师提供的这套方案借鉴了linux的设计思想,功能强大,扩展性很强,同时代码逻辑清晰,对于初学者可以学习到代码的构件技巧;对于高手则可以“拿来即用”。
BootLoader程序人机交互移植了RT-Thread的shell库,这样用户操作起来会有在使用linux界面的错觉。同时也非常方便BootLoader的功能扩展,比如我要完成多个app的升级维护的相互之间的跳转,那么可以直接在添加shell命令里面添加新的指令,并完成对应的操作逻辑编码。
BootLoader程序下载是通过z-moder协议完成,z-moder协议在工业场合已经广泛应用,有久经考验的稳定性。

BootLoader核心是要在当前运行代码中,完成代码跳转去执行另外一个程序。就需要涉及到“中断向量重定位”,M4中有一个寄存机可以完成“中断向量重定位”:在启动文件中加入执行跳转的汇编代码:

start_app   PROC
                EXPORT  start_app

                ; set vector base address as 0x08040040
                ldr r3, =0xE000ED08;SCB->VTOR
                str r0, [r3]
                
                ldr sp, [r0]      ; read val from new vector
                ldr r1, [r0, #4]  ; read val from "new vector + 4“

                BX r1

                ENDP

cortex M3/4权威指南中有相关介绍:

有了这段代码后,当在指定地址(0x8040040)烧录了app后,即可跳转过去执行新的app。
BootLoader需要把下载到ram的程序固化到flash,GD32F427的内存还是超级大!但是需要注意,只有前面1024KB支持零等待运行。一定要把执行程序放到前面的1024去运行,或者可以放到ram运行,每次启动从flash搬出来。
另外这次测试中发现flash是需要擦除后再烧录,具体原因有点类似于“拨算盘”,每次使用算盘前,要把算盘复位,然后计算完成后,如果不动算盘,它就一直保持你拨动后的结果(拿算盘举例子,是不是暴露年龄O(∩_∩)O哈哈~~~老猿一枚)。

其他内容不过多介绍,请参考源码:
链接:https://pan.baidu.com/s/1bc7O…
提取码:1234

2、APP

由于BootLoader需要跳转,app的运行起始地址不是0x8000000,需要根据实际情况来设置运行地址,例如:0x08040040

这样,在BootLoader中也设置同样的地址,或者通过shell命令把加载地址传入BootLoader(当前demo使用的固定加载地址)。
APP还需要做一件事儿是给bin烧录文件添加“头部”(协议帧头),采用了linux中mkimage程序和协议,可以指定app的名称、大小、加载地址、链接地址等信息。下图中我只需要填写下载地址为0x20000000其他信息固化到了BootLoader,并没有使用。

文件的上传需要使用支持z-moder协议的通讯工具,我使用的是MobaXterm。

3、视频演示:

https://www.bilibili.com/video/BV1Lg411E7Sz​www.bilibili.com/video/BV1Lg411E7Sz

四、总结

感谢极术社区提供的开发板,让我有机会接触更多地国产芯片资源,随着国际风云的不断变化,国产芯片的重要性和竞争能力越来越强,祝愿极术社区越办越好,也祝愿所有的工程师在国产化替代上硕果累累!
Thinks!
end

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

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

相关文章

2001-2020年中国区域创新能力总、分指标效用值

中国区域创新能力总、分指标效用值2001-2020 1、时间:2001-2020年 2、范围:全国31个省份 3、来源:中国区域创新能力评价BG 4、指标包括: 区域创新能力综合效用值、知识创造效用值、知识获取效用值、企业创新效用值、创新环境…

《Composing Programs》(SICP python版) chap1 笔记(2)

《Composing Programs》(SICP python版) chap1 笔记(2) 文章目录《Composing Programs》(SICP python版) chap1 笔记(2)Chapter 1: Building Abstractions with Functions1.3 Defining New Functions1.3.1 EnvironmentsFunction Signatures(看语境翻译为函数原型比较…

【论文翻译】ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation

【论文】https://arxiv.org/abs/2204.12484v3 【github】GitHub - ViTAE-Transformer/ViTPose: The official repo for [NeurIPS22] "ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation" and [Arxiv22] "ViTPose: Vision Transformer F…

IO流操作

文章目录一、字符集常见字符集编码、解码操作二、IO流FileInputStreamFileOutputStreamFileReaderFileWriter常见问题一、字符集 常见字符集 我们的计算机底层是不可以直接存储字符的,计算机中底层只能存储二进制(0、1),同时二进制是可以转换成十进制的…

Fluent UDF编译环境配置 VS2019

Fluent UDF编译环境配置 VS2019环境配置问题记录继续记录调试过程仅用一个host仅用一个node两个都放进去换个电脑继续报错记录错误环境配置 生成PATH文件的,有的没有权限在当前文件夹,可以用这个命令,还是原来的代码,就是改一下 …

趣味三角——前言和序言

目录 1. 前言 2. 序言 2.1 抄写员Ahmes,公元前1650年 2.2 古埃及的趣味数学 1. 前言 There is perhaps nothing which so occupies the middle position of mathematics as trigonometry. (也许,没有什么东西像三角学一样占据数学的中心位置…

离散数学-图论-欧拉图、哈密顿图、二部图、平面图(14)

欧拉图、哈密顿图、二部图、平面图 1 欧拉图 无向图G是欧拉图⇔\Leftrightarrow⇔G连通,且无奇度点。无向图G是半欧拉图⇔\Leftrightarrow⇔G连通,且仅有两个奇度点。有向图G是欧拉图⇔\Leftrightarrow⇔G强连通,且所有顶点的入度出度。有向图G是半欧拉图⇔\Leftrightarrow⇔…

登录时“自动填充”和“验证码”的实现

自动填充和验证码的实现需求1. 基础登录功能1.1 持久层pojo实体类:代理接口:1.2 业务层1.3 表现层login.jsp(登陆界面):LoginServlet:selectAllServlet:brand.jsp(登陆成功&#xff…

30.Isaac教程--Costmap规划器

Costmap规划器 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Costmap规划器组件消息入门自定义图使用自定义地图改变规划器将 Costmap 添加到视线中将通道添加到配置Isaac SDK 中的标准导航规划器指示机器人在避开障碍物的同时采用最短…

赛意SMOM和金蝶云星空单据接口对接

赛意SMOM和金蝶云星空单据接口对接数据源系统:金蝶云星空金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准则、多币别、多地点、多组织、多税制应用框架等,有效支持企业的运营…

数据结构进阶 unordered系列的效率对比

作者:小萌新 专栏:数据结构进阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:对比map set和unordered系列map和set的效率 unordered系列的效率对比map/set与unordered_map/unordered_set的区别map/set与uno…

HTTP简史

今天一起来研究Http协议的一些事情,通过本文你将了解到以下内容:Http协议各版本的对比和优缺点Http2.0协议相关的SPDY协议、二进制分帧协议、多路复用、首部压缩、服务推送等基本原理HTTP3.0和QUIC协议乘风破浪前往知识的海洋吧,要开船了&…

Linux常用命令——telnet命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) telnet 登录远程主机和管理(测试ip端口是否连通) 补充说明 telnet命令用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开…

【Java IO流】字符流详解

文章目录1. 前言2. 字符输入流3. 字符输出流4. 字符流底层原理解析4.1 字符输入流4.2 字符输出流1. 前言 在上一篇字符集详解中我们说到了产生乱码的原因,要么是读取数据时未读完整个汉字,要么是因为编码和解码的方式不统一,对于后者我们只需…

PromQL之函数

Prometheus 版本 2.41.0 平台统一监控的介绍和调研直观感受PromQL及其数据类型PromQL之选择器和运算符PromQL之函数 PromQL 聚合函数 PromQL 的聚合函数只能用于瞬时向量,支持的聚合函数有: sum 求和min 最小值max 最大值avg 平均值group 分组&#xf…

Nginx与LUA(5)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~Nginx诞生以来就获赞无数,反向代理、负载均衡、流量限制与流量扩展都是它的拿手好戏。基本上是互联网应用的主流入口,和计算、即时通讯、存…

python批量下载modis数据(可筛选日期、范围、数据类型)

找了一圈下modis数据的,有的不能空间筛选有的不能下初级产品(也可能没找到),不甚满意,自己搞了个 0 前言 用到的主要依赖是selenium,下载网站是https://ladsweb.modaps.eosdis.nasa.gov,环境是…

ensp实现不同VLAN之间的通信

1.VLAN的基本配置 一个简单的VLAN实验&#xff0c;基本配置如图。 其中交换机为S5700。 在只对四台PC配置IP地址&#xff0c;交换机不用配置后&#xff0c;四台PC可以互相ping通。 下面是对交换机配置VLAN的方法 <Huawei>sys #进入系统视图 [Huawei…

钉钉搭和金蝶云星空接口打通对接实战

数据源系统:阿里宜搭宜搭是阿里巴巴自研的基于钉钉和阿里云的低代码平台&#xff0c;可让用户通过简单的拖拽、配置即可完成应用搭建&#xff0c;为每个组织提供低门槛、高效率的数字化业务应用生产新模式。有效缩减企业应用开发时间&#xff0c;助力企业数字化升级。对接目标系…

第四层:友元与函数成员别样定义

文章目录前情回顾友元友元的概念友元的目的友元的关键字友元的两种种用法全局函数做友元类做友元函数成员的别样定义有缘人学友元&#xff0c;急速突破第四层本章知识点&#xff08;图片形式&#xff09;&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;一名大一的…