12

足球之路 · 2022年12月15日 · 湖南

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

一、综述

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

二、架构

image.png

三、分支

1、BootLoader

在现在的单片机程序中实现BootLoader有多种方法,韦东山老师提供的这套方案借鉴了linux的设计思想,功能强大,扩展性很强,同时代码逻辑清晰,对于初学者可以学习到代码的构件技巧;对于高手则可以“拿来即用”。
BootLoader程序人机交互移植了RT-Thread的shell库,这样用户操作起来会有在使用linux界面的错觉。同时也非常方便BootLoader的功能扩展,比如我要完成多个app的升级维护的相互之间的跳转,那么可以直接在添加shell命令里面添加新的指令,并完成对应的操作逻辑编码。
BootLoader程序下载是通过z-moder协议完成,z-moder协议在工业场合已经广泛应用,有久经考验的稳定性。
image.png
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权威指南中有相关介绍:
image.png
有了这段代码后,当在指定地址(0x8040040)烧录了app后,即可跳转过去执行新的app。
BootLoader需要把下载到ram的程序固化到flash,GD32F427的内存还是超级大!但是需要注意,只有前面1024KB支持零等待运行。一定要把执行程序放到前面的1024去运行,或者可以放到ram运行,每次启动从flash搬出来。
另外这次测试中发现flash是需要擦除后再烧录,具体原因有点类似于“拨算盘”,每次使用算盘前,要把算盘复位,然后计算完成后,如果不动算盘,它就一直保持你拨动后的结果(拿算盘举例子,是不是暴露年龄O(∩_∩)O哈哈~~~老猿一枚)。
image.png
其他内容不过多介绍,请参考源码:
链接:https://pan.baidu.com/s/1bc7O...
提取码:1234
image.png

2、APP

由于BootLoader需要跳转,app的运行起始地址不是0x8000000,需要根据实际情况来设置运行地址,例如:0x08040040
image.png
这样,在BootLoader中也设置同样的地址,或者通过shell命令把加载地址传入BootLoader(当前demo使用的固定加载地址)。
APP还需要做一件事儿是给bin烧录文件添加“头部”(协议帧头),采用了linux中mkimage程序和协议,可以指定app的名称、大小、加载地址、链接地址等信息。下图中我只需要填写下载地址为0x20000000其他信息固化到了BootLoader,并没有使用。
image.png
文件的上传需要使用支持z-moder协议的通讯工具,我使用的是MobaXterm。

3、视频演示:

https://www.bilibili.com/vide...

四、总结

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

推荐阅读
关注数
10711
内容数
187
中国高性能通用微控制器领域的领跑者兆易创新GD系列芯片技术专栏。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息