使用bootloader进行远程固件升级(32MCU)

项目场景:

使用GD32C103硬件平台和自己创建的软件空工程模板;

通过CAN总线进行固件的升级;编写bootloader程序进行固件的升级和引导。


基础知识

下面的基础知识是像我一个从未了解过bootloader的小白所要知道的

1、bootloader就是在上电后首先运行的一段程序,根据一些条件可以用来决定执行程序A或者程序B(说的简单了些,但我也只理解到这)。

2、MCU的存储:[1]
  GD32C103有128KB的片上Flash(起始地址为0x8000000),可用于存储指令或数据;32KB片上SRAM(起始地址为0x2000 0000)存储程序运行中的暂存数据。
  我们平常烧写程序一般就是从0x8000000开始烧写到片上Flash,程序一般也是从这个地址开始运行的

3、MCU的ISP下载、IAP下载、ICP下载:[2]
  ISP下载是通过配置boot引脚进入MCU出厂固定的bootloader程序执行区引导固件进行下载。例如:32的HAX文件串口烧写;
  ICP下载就是有电路可以直接下载程序,不需要bootloader来引导;我们常用的SWD、JLINK等都是MCU内部有专用的电路来下载程序(具体是什么原理不清楚);
  IAP下载,In applicating Programing ,在程序运行中烧写代码;原理是将MCU中用户可编程的FLASH(ROM)分区(一些有bootloader可编程的ROM的MCU不用自己分区)一部分存放bootloader引导程序,另一部分存放APP程序;上电先执行编写的bootloader引导程序来决定是运行APP还是等待传输固件数据;

实现的简单功能:

第一次写的bootloader;一些代码是直接复制,详细解释参看参考资料(个人第一次写,代码仅供参考):

我自己写的bootloader将MCU的内部Flash分为了bootloader程序存储区和APP程序存储区;
通过CAN总线来发送APP程序,CAN上位机用的周立功的上位机软件,可以发送bin文件;
具体流程:
  开机进入bootloader程序,5秒之内在没有接收到程序升级指令跳转到APP也可以发送升级结束指令;
  升级APP程序的话,需要重新上电5秒内发送程序升级指令,然后发送bin文件,bin文件发送完成后发送程序升级完成指令,APP程序即可运行;
  流程图如下所示:
在这里插入图片描述
我总共写了两个方案,这里我使用的第二个流程图方案;
接收数据到RAM是bootloader创建了一个很大的数组来存放上位机一股脑发过来的bin文件数据,没有进行校验;


代码实现:

提示:本人没有学过32,都是不会啥查啥,代码有些乱,多担待

实现上面的bootloader需要:
1、CAN配置和CAN接收发送,代码在user文件夹can.c和gd32c10x_it.c中;
2、Flash的基础,写入和擦除,代码在user文件夹Flash.c中;
3、将接收到的APP的bin文件数据加载到Flash函数,main.c的loading_flash ()函数;
4、程序跳转函数(网上copy的),main.c的jump_APP (uint32_t appxaddr)函数;
5、APP代码生成bin文件和MDK配置;(看下面的参考资料)
6、APP程序的主函数要添加一行中断向量表重定向代码;

代码工程链接:阿里云盘
提取码: s50l

参考资料:
[1]CM3架构和STM32 MCU——从存储系统开始
[2]单片机ISP、IAP和ICP几种烧录方式的区别
keil mdk生成文件.hex和.bin文件分析
GD32 STM32 bootload IAP程序跳转实现
GD32IAP升级(BootLoader)
GD32 IAP固件升级跳转 (Bootloader --> APP)踩坑解答
IAP跳转APP段代码理解
【GD32F310开发板试用】IAP升级实验
[3]GD32F103C8T6入门教程-IAP升级教程
STM32 IAP在线升级详解
IAP升级日记(STM32芯片)
STM32是如何软硬件结合,编译后怎么样一步步运行起来的
单片机的Bootloader,可以实现用户轻松升级程序
STM32单片机如何实现在线IAP升级

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值