项目使用两款不同的芯片完成Boot到APP之间的升级,此处仅作为日常开发笔记。(作者忘性大)
1.GD32F403相关的boot升级
要实现boot升级主要分为IAP和APP两部分程序。
IAP实际就是Boot相关的配置。
①首先创建一个工程,将GD32F403原先的flash改为0x4000大小(16K)。此时已经将IAP的大小配置为16K,存储位置在0X8000000-0X8004000。
②添加从Boot跳到APP的指令
JumpTOApp函数里的APP_ADDRESS为APP的开始地址,CONFIG_ADDRESS为预留的配置地址,可以存放自己程序需要的配置信息。
关闭全局中断是为了防止在跳转地址时,中断的运行导致寻址错误。
不管是GD32还是AC781都可以直接调用这个函数。
③完成芯片的读写flash操作
2.AC781相关的boot升级
fmc_unlock();
fmc_page_erase();
fmc_lock();
都是GD32固件库里的函数
flash_program()函数中嵌套的fmc_word_program也是GD32固件库的函数。此函数实现GD32多字节写入flash的操作。
同理,写入完成后先测试是否写入正确。
④在主循环前添加升级标志位
此时已经写完boot到APP的升级demo。while里的内容主要是通讯APP相关传输的。
⑤更新完IAP的程序后,完成APP的相关配置
默认GD32为512K的内存,减去IAP占用的16K和配置区的4K后剩余492K(0X7B000)内存
添加使能全局中断和重映射向量表,APP_ADDRESS地址为0X8005000
其余则是在主程序里添加系统中断重启,如果IAP的条件符合则跳转到APP,否则始终在IAP
其余参考程序
标签:Bootload,APP,flash,boot,笔记,fmc,升级,GD32,IAP From: https://blog.csdn.net/ChanTongJing/article/details/142851631