最近一个项目使用GD32F450VI+ESP8266需要做远程升级,基本参考正点原子IAP的那一章节,但是在GD32F450上却遇到了问题,无法跳转,然后使用正点原子的开发板stm32f429,以及stm32f103c8和gd32f103c8运行同样流程的程序,却又没有问题,于是咨询了一下GD的FAE后,才知道问题出在GD的FLASH的特殊性上。本文中就不对IAP的一般流程做介绍,只对GD32F4相较于stm32的特殊之处做出介绍。

在GD的F4的用户册中提到,“在闪存的前512K字节空间内,CPU执行指令零等待(在闪存大小等于256K或512K时,闪存全片执行指令零等待);在此范围外,CPU读取指令存在较长延时;”,GD的FAE告诉我,我使用的这款GD32F450VI只有前256K能够实现零等待的,后面的速度都比较慢,所以需要在bootloader程序和APP程序的时钟初始化中添加 RCC->CFGR |= RCC_CFGR_HPPE_DIV2; 这一句,并且APP程序需要在前256K之内,但是我用这个方式也没有成功,不能从bootloader跳转到app程序。后来我就自己重新试了一种方式,下面说明。

在我的APP程序中,一直使用的200M频率,在自己的bootoloader程序中,使用主频最高可以为140M,程序中频率配置是使用stm32cube来配置的,实测72M、108M、120M都能够正常跳转。其他的都采用cube默认生成的配置就好。

我的FLASH分配如下图:

红圈中为全速运行,bootloader程序一般占用很小,大部分情况下16KB都能放下,我原来的程序是88K左右,考虑到以后升级的需要,虽然目前估计不会超过128K,但还是把扇区4和5都作为APP运行区,总共192K,应该能够满足大部分情况。APP为什么没有从扇区1开始呢?因为从程序下载区copy到APP运行区,如果从扇区1开始,跨越的扇区太多,程序结构上复杂一些,我怕扇区越多越容易出错,所以就固定使用扇区4和5,参考我文章的朋友可以根据自己的需求更改。在APP运行的时候,下载的bin文件将存放到扇区6、7,bootloader程序检查之后把bin文件更新到APP运行的扇区4、5。 为了保证安全,我还把扇区8、9作为程序备份区,在出厂烧写的时候,就把扇区4、5中的程序在扇区8、9也备份一下,万一以后升级失败,还能把扇区8、9中的程序恢复到APP运行区域。

至于怎么检查升级后的APP程序能否正常运行,我是在APP运行之后在flash后面某个固定地址写入一个特殊数值,bootloader程序每次去读取它,如果连续几次没有读取到正确的数值,则把扇区8、9中的程序恢复到扇区4、5中。目前经过我模拟,这种方式可行的。

本人第一次做IAP远程升级,还不知道这种方式实际使用中有没有考虑不周的地方,如果有什么错误欢迎指出。如果需要交流的,欢迎到GD32交流群205696642中来交流。

最新文章

  1. PowerDesigner成功生成PDM进行check model后的错误提示解决途径
  2. css3新特性
  3. [DFNews] Blackbag发布MacQuisition 2013 R2
  4. voxel 与 pixel
  5. 庞锋 OpenCV 视频 学习进度备忘
  6. FPGA的图像处理技术,你知道多少?
  7. 使用Fiddler提高前端工作效率 (介绍篇)
  8. java简单字符串处理
  9. NYoj 最舒适的路线
  10. Spring学习使用标签来标记资源(@Component、@Repository、 @Service和@Controller)和用法(包括如何jsp正在使用)
  11. 语言总结—C/C++
  12. word、pdf、ppt 转为图片
  13. github入门操作
  14. 简单三段式状态机实验3-Sequence Detect(序列检测)
  15. TCP/IP笔记
  16. 浅谈java编译机制和运行机制
  17. Android Architecture Components--项目实战
  18. llinux其他权限
  19. MySQL主从同步机制及同步中的问题处理
  20. noip第21课作业

热门文章

  1. Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker
  2. Linux命令学习-cd命令
  3. c++学习书籍推荐《C++ Primer(中文版)(第5版)》下载
  4. Managing Network Usage
  5. nu.xom:Serializer
  6. pycharm install python packaging tools时遇到AttributeError: '_NamespacePath' object has no attribute 'sort'错误
  7. 【HDU - 1043】Eight(反向bfs+康托展开)
  8. C#2.0新增功能02 泛型
  9. CentOS 下编译安装MySQL
  10. python初步编写用户登录