gd32f103vbt6 串口OTA升级-问题记录

news2025/2/25 21:04:02

今天研究了一下gd32单片机串口OTA升级的事情。我感觉ota的唯一好处就是不用调试器就可以下载(更新)单片机应用程序。(但是需要232串口,OTA程序我是使用stlink下载的!!)

可能有些同学要问,32的单片机本身就支持串口下载,为啥还要搞这一出呢?单片机的串口下载需要boot0这个引脚的设置,但有一些可能性,比如:万一用户不想开盖呢?第二,可能硬件在做的时候并没有考虑串口升级的事情呢?这时就不得不考虑用这个ota的办法了。

是啊,事情不是总是顺意啦,硬件不能解决的,软件有办法解决那也行啊。

一、已经具备的环境:

1.硬件:gd32f103vbt6 单片机,(128Kflash),boot0,boot1被强制拉了电平,不方便改变。同时也没有设计自动下载电路。总之就是硬件不支持串口下载更新程序!!!

2.keil5.29

3.单片机原应用程序。(能正常运行的,但是没有OTA的功能,需要使用OTA升级的单片机程序)

4.到网上找一个OTA的单片机程序。

二、步骤

2.1 基本步骤可以参考网络上的OTA部分。

2.2 一些不太清晰的地方,做一些说明。(可能也不全对,请指正)

2.2.1 如果要实现OTA,就需要增加一个单片机程序(是一个独立的工程),这个程序我们可以称之为bootloader(随便取吧)。我自己的代码是gd32的标准库,使用其他库的话,需要稍微调整一下,提供给大家。icon-default.png?t=N0U7https://github.com/zhaozhi0810/gd32f103-OTA-uart.git

2.2.2 还有一个程序就是在OTA之前的一个单片机应用程序,就是原单片机程序。

三、OTA程序

3.1 ota 的基本思路

3.1.1 单片机上电后,启动OTA,初始化串口,systick,一个led,从串口读取字符(200ms),我的程序设置的是ctrl+c的值(3),读取到了则进入下载模式,否则直接启动单片机应用程序。

3.1.2 led做了一个闪烁400ms翻转一次,比单片机应用程序快。这里可以体现出程序的阶段。

3.1.3 串口没有使用中断了。

3.1.4 使用Ymodem的方式收发文件,需要secCRT或者类似软件的支持。

3.1.5 设置中irom的起始位置不需要改变,保持为0x8000000. 大小最好在12K以内(偏移值为0x3000)。如果OTA的程序比较大,建议修改偏移值

3.1.6 0x800,0000~0x800,2fff,总共12K字节,用于保存OTA的程序,0x800,3000之后的空间用于保存单片机的应用程序。这个数值已经在OTA程序中写死了,如果需要修改,则要注意。

3.1.7 注意单片机flash的页大小,和flash总大小,我现在的单片机是128K,页大小是1K。内部读写flash的时候用到了这些参数。

        flash 容量 1-128k的页都是1k

        flash 容量128k - 512K的页都是2k页

        flash 容量512K以上的页,前512k是在bank0,为2k页,之后的在bank1,为4K页。

这个比较重要,单片机每次需要按页擦除。

3.1.8 按数字1进入下载模式,出现ccc的打印

 3.1.9 secCRT 发送文件,弹出对话框,选择单片机的bin文件(如何转成bin,在下文中描述了)

 3.1.10 发送结束,提示没有错误。

 3.1.11 可以选择重新上电重启,也可以选择数字3,启动应用程序。

3.1.12 上传文件没有测试

3.2 ota程序我是使用stlink下载的!!!单片机的bin文件则不能用keil直接下载了!!

 

四、原单片机程序

4.1 原工程中需要修改的地方,设置好之后需要重新编译

4.1.1 设置中irom的起始位置:(图中是0x8003000,表示偏移了12K)

4.1.2 main函数的起始位置需要修改中断向量表的位置(与偏移的地址一致)

 

 如果没有这个函数,可以自己实现

4.2  还需要增加一个命令,将axf转成bin文件,ota下载只需要bin文件

 

fromelf --bin -o ./output/@L.bin ./Objects/@L.axf 

注意在工程中增加一个output的目录。fromelf是keil自带的程序,不需要特别指定路径

重新编译即可生成最新的bin文件了。

4.3 使用OTA之后的弊端:

4.3.1 不能使用keil的下载按钮进行程序下载了!!!

4.3.2 不能使用keil进行程序在线调试了!!!

4.3.3 单片机的应用程序需要生成bin,才能使用串口下载。

五、关于一些思考

5.1 我能不能分成两个app区域,只更新其中一个app,ota程序选择最新的单片机程序运行?

5.1.1我看了一下单片机的bin文件是28K左右,我的flash有128K,去掉12K(用于ota)还有116K,分成两半还有58K,从空间来看,是可以分为两个区域。

5.1.2 空间上没问题,但是程序上有问题,单片机的应用程序的链接地址和实际运行的地址有偏差,比如链接地址设置为0x800,3000.这个地址在app1的区域是正常能跑的,但是app2的区域(实际运行地址是0x8011800,而链接地址是0x8003000),很明显不同,这时候会导致程序跑飞,实际app2还是跑不起来。

5.1.3 对不同app区域修改irom的值,可以解决这个问题,升级app1,我就要设置irom的地址为0x8003000,升级app2,就要修改irom的起始地址为0x8011800,这样生成不同的app文件,提供给客户,并且我提供给客户(升级程序)的时候,还要考虑他是升级app1和app2,简直麻烦透了,容易出错,要是升级错了,简直就乱套了。所以前提必须是不管升级app1还是app2,都只能用同一个app.bin文件去升级,升级后,单片机确实就是运行最新的程序。

5.1.3 这里考虑位置无关代码,然而我还没有很多时间来研究这个东西,只要能够做到位置无关,似乎可以解决这个问题???

5.1.4 我看到网上的解决办法,app2当成备份区,并不能运行,ota下载的时候,先下载到app2区域,下载成功后,下次ota启动的时候,就把app2的内容搬到app1来。这种方法可能本身是考虑下载过程出错的情况,下载不成功,这是可以防止的,但是我觉得意义不大,我下载不成功,还可以再下载一次啊。搬运的那一次,我觉得浪费了我的启动时间,万一我对启动时间特别敏感呢?

5.15 再研究吧,肯定还有优化的空间。

5.2 能否直接在单片机应用程序升级呢?

5.2.1 理论这样是不行的,单片机本身在运行,然后你却擦除了那里的flash,这样运行的程序就出错了呀。下载过程中,单片机就跑飞了,升级肯定就失败了。

5.2.2 如果有两个app,并且都能正常运行,app1 运行的时候,升级app2的区域,app2运行的时候升级app1的区域,这样应该是可行的,但是目前做两个app区域,并且能够都可执行,似乎还有点困难。

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

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

相关文章

【综合】数字IC设计需要考虑的时序参数;Race Hazard;同步系统时序要求;建立时间、保持时间;偏斜;抖动;毛刺、竞争冒险;亚稳态

【综合】数字IC设计需要考虑的时序参数;Race Hazard;同步系统时序要求;建立时间、保持时间;偏斜;抖动;毛刺、竞争冒险;亚稳态数字设计时需要考虑的时序参数传播延迟 propagation delay, 上升时间…

十一、树结构的实际应用—堆排序

1、基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最好最坏平均时间复杂度均为O(n\log n) 。也不是稳定排序。堆是具有以下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,…

云音乐实现注册功能

1. 新建web项目 Shop_SM2. 复制Shop资源和相关代码,实现注册功能回顾当前配置下的加载顺序1.MyBatis的主配置文件mybatis-config.xml (在根目录下)和 工具类MyBatisUtil(注意总配置文件的路径)2.实体类(Use…

docker篇---pycharm连接docker,使用docker环境

pycharm连接docker,使用docker环境一、生成镜像和容器1.1 创建容器,需要加端口映射1.2 进入容器1.3 设置root密码,后续登录会用到1.4 修改配置文件1.5 重启ssh服务1.5 本机连接ssh二、pycharm连接docker2.1 允许远程客户端连接2.2 pycharm配置…

线程互斥与同步--Linux

文章目录线程互斥的概念与意义互斥的原理--原子性关于售票模拟的互斥应用死锁问题线程同步的概念与意义条件变量实现同步生产者消费者模型--互斥与同步基于阻塞队列的生产者消费者模型基于环形队列的生产者消费者模型POSIX信号量线程池线程安全下的单例模式总结线程互斥的概念与…

OMS标准 第二卷 主要通讯

版本4.1.2/2016-12-16 发布 1 引言 1.1 概述 本部分描述了从设备(仪表或执行器或断路器)和(固定的,通常由市电供电的)主设备(网关或其他通信单元)之间有线和无线通信的最低开放式计量系统要…

1. Mybatis 入门

文章目录1. Mybatis 简介2. Mybatis 快速入门3. 使用 idea 写 SQL4. Mapper 代理开发5. MyBatis 核心配置文件1. Mybatis 简介 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。 官方文档:https://mybatis.org/mybatis-3/zh/index.html 持久层&am…

【自学Docker】Docker cp命令

Docker cp命令 大纲 docker cp命令教程 docker cp 命令用于在本地文件系统与 Dokcer容器 之间复制文件或者文件夹。该命令后面的 CONTAINER 可以是容器Id,或者是容器名。 docker cp命令语法 从容器复制到宿主机 haicoder(www.haicoder.net)# docker cp [OPTION…

第57篇-某日头条signature参数分析【2023-02-01】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、网站分析三、signature参数四、完整代码一、前言 今天来看一下新闻网站,分析一下参数 二、网站分析 网…

WebDAV之葫芦儿·派盘+一叶日记

一叶日记 支持WebDAV方式连接葫芦儿派盘。 推荐一款操作方便、界面简洁,记录生活点滴与心情,具有诗情画意的日记软件。 一叶日记是一款记录日记的手机软件,在这款软件中它里面有着各种不同的工具,可以方便用户去随时随地的记录日记,同时里面还有着各种不同的主题背景&…

补充:论Unity_InputSystemPacakage如何使用

图1补充一下默认特殊值如何设定,点击ProjectingSettings——InputSystemPacakage——Create Settings Asset 即可设置默认特殊值,或者点击图1中的Open input settings也可以打开此界面。 创建后会在Project窗口出现一个配置文件,不需要时删除…

你说反射有点难追,我觉得应该知难而退。

文章目录问题源码解析溯源问题解决方案第一种:第二种:第三种:问题 今天小伙伴遇到一个问题,有关于反射的,写个demo,大家看一下。 如上,运行之后会报错:出现了非法参数。 Exception…

深度学习论文: YOLOv6 v3.0: A Full-Scale Reloading及其PyTorch实现

深度学习论文: YOLOv6 v3.0: A Full-Scale Reloading及其PyTorch实现 YOLOv6 v3.0: A Full-Scale Reloading PDF: https://arxiv.org/pdf/2301.05586.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/PyTorch…

2023年IB考试该如何备考?

IB课程考试时间 考试时间:IBO官方近期公布了2023年的考试时间与计划,中国学生IB考试时间定在2023.5.1至5.19。 在世界各地,学生在IB体系中均按照相同的教学大纲进行,并且于毕业时参加全球统一考试。一年两次(北半球于5…

拉伯证券|北向资金1月净买入超1400亿,啥信号?

2023年1月份,电视剧《狂飙》热播,被视为A股投资“风向标”的北向资金也敞开“狂飙”态势,月内五次净买入额超百亿,1月30日单日净买入额更是创2021年12月以来新高。 单月净买入超1400亿,刷新纪录! 北向资金…

Ventoy安装教程

目录Ventoy五大优势Ventoy安装教程其他链接Ventoy是一款国人开发的新一代多ISO启动引导程序,用户只需要将所需的ISO镜像文件拷贝至优盘中即可在Ventoy界面中选择自己想要的ISO镜像文件。 Ventoy五大优势 广泛兼容:支持包括Windows 10、Windows 8.1、Wind…

【哈希表】leetcode15. 三数之和(C/C++/Java/Python/Js)--梦破碎的地方

leetcode15. 三数之和--梦破碎的地方1 题目2 思路2.1 哈希解法--含代码2.2 双指针2.3 去重逻辑的思考2.3.1 a的去重2.3.2 b与c的去重3 代码--双指针法3.1 C版本3.2 C版本3.3 Java版本3.4 Python3版本3.5 JavaScript版本4 总结用哈希表解决了两数之和 ,那么三数之和呢…

[Lua实战]Skynet-2.如何启动(Win10-WSL环境Ubuntu18.04)[开箱可用]

Skynet-2.如何启动Win10-WSL环境Ubuntu18.04接上文,在linux运行skynet1.WIN10-WSL1.1 用Microsoft Store安装WSL(会遇到商店下载失败等问题...)1.1.1控制面板支持Linux配置1.1.2Microsoft Store 找到 Ubuntu18.041.1.3如果遇到安装问题如图请直接跳到1.21.2 使用PowerShell工具…

概论_第7章_参数估计_点估计之极大似然估计__性质

一 性质 极大似然估计 有一个简单有用的性质: 如果 θ^\hat\thetaθ^ 是 θ\thetaθ的极大似然估计, 则对任一 θ\thetaθ的函数g(θ)g(\theta)g(θ), 其极大似然估计为 g(θ^)g(\hat\theta)g(θ^) . 该性质称为极大似然估计的不变性,它使…

项目代码版本控制与维护

一、版本命名规则 1.1 需求开发分支命名规则 格式:dev_v版本号_需求名称 案例:dev_v01.31_TX202301141 dev_v01.31_数字产品平台订单查询优化 1.2 测试环境发布分支命名规则 格式:uat_deploy 1.3 预上环境分支命名规则 格式&#xff1a…