GD32F4XX IAP升级

这里使用的是GD32F405RG,flash 为1M(0x08000000 - 0x080FFFFF),具体参考官方手册

因为每个芯片的falsh大小不一样,地址划分根据实际flash大小和自己的设计去分配就好, 自己的址划分如下 :

BOOT_ADDRESS:0x08000000 - 0x08003FFF     16k(扇区0)

APP_ADDRESS:0x08004000 - 0x0807FFFF     512k-16k=496k(扇区1-7)

Buffer_ADDRESS:0x08080000 - 0x080FEFFF    512k-4k=508k(扇区8-11)

Flags_ADDRESS :0x80FF000 -0x80FFFFF        4k(扇区11的最后4k)

IAP的升级思路基本是一样的,如图所示(懒得画图了,此图盗用(doge))

 简单做了个usart接收的IAP升级方式,主要是USART+DMA+空闲中断接收,上位机发送上机命令,板子接收到升级命令后开始进行升级,上位机把bin文件按一帧1024个字节的方式进行传输,板子每接收到一帧就把数据写入到缓存区,上位机传输完发后发送一个结束命令。板子接收完毕则写入升级标志,然后跳转到boot执行复制,把Buffer的代码复制到APP地址,最后把PC指针指向APP。

以上是基本的思路,下面是代码过程

首先得写好写入和读出flash的代码,具体可参考官方的例程,兆易创新 (gd32mcu.com)

 需要注意的是想要写入flash,必须先擦除,擦除flash按扇区擦除,官方的写入例程里包含了每次写入前的擦除对应扇区的操作,如果直接使用会导致把同个扇区之前的代码给擦除掉。

 对此我们可以稍作修改,在写入前统一擦除buffer的扇区,然后可以一帧一帧地写入flash了

升级的接收模块:

 当接收完成后,写入升级标志,然后跳转到boot进行复制

BootLoader:

 vJumpToApplication():

 USART 的配置就不附加,参考官方例程即可。

还需要注意的细节:

1、keil烧录时需要分配好烧录的地址,以免被覆盖掉

 2、传输的文件是bin格式,flash上的类型是一个字,所以写入时记得以字的格式去写入

有任何问题可以留言交流,谢谢!

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值