GD32IAP升级(BootLoader)

GD32IAP升级—BootLoader

本文记录并说明GD32使用IAP升级过程中,必要的操作和关键步骤。

IAP升级

IAP升级原理很简单,简要介绍如下:
先下载BootLoader程序,如果有需要对程序进行升级时,BootLoader通过串口或者其他接口接收升级程序,接收之后把接收到的文件放到指定位置,然后设置中断向量,最后跳转过去即可;

重点部分

1.中断向量设置

代码如下

// 设置偏移量
nvic_vector_table_set(FLASH_BASE,0x4000);//设置偏移量

2.程序起始地址设置说明

BootLoader中不需要设置程序其实地址,可以设置长度;
APP程序中需要设置程序起始地址:设置如下

在这里插入图片描述

升级出现的问题

判断程序地址出错

在代码中判断出错

f(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{  
           iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
}

原因分析:
1、可能是接收数据出错
2、可能是写数据出错
3、见下面分析

写入Flash之后,跳转失败

调用GD32的提供的fmc.c文件时在写数据到flash中时,fmc_write_32bit_data函数擦除数据的时候是一次性擦除需要用到的所有块,而第二次写入数据的时候会造成把刚刚写进去的数据又进行擦除,所以会导致,上面提到的判断程序地址出错

void fmc_write_32bit_data(uint32_t address, uint16_t length, int32_t* data_32)
{
   
    uint16_t StartSector, EndSector,i;
    /* unlock the flash program erase controller */
    fmc_unlock();
    /* clear pending flags */
    fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_OPERR | FMC_FLAG_WPERR | FMC_FLAG_PGMERR | FMC_FLAG_PGSERR);
	

	/* get the number of the start and end sectors */
	StartS
  • 7
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值