热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分享我的GD32F450的IAP过程

最近一个项目使用GD32F450VI+ESP8266需要做远程升级,基本参考正点原子IAP的那一章节,但是在GD32F450上却遇到了问题,无法跳转,然后使用正点原子的开发板stm32f429,以及s

最近一个项目使用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中来交流。

 

 


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文详细说明了在JavaScript中解决alert弹出窗口文本换行问题的方法。通过给alert弹出的文本添加换行符,可以实现在弹窗中显示多行文本的效果。同时,提供了相关代码示例和注意事项,帮助读者更好地理解和应用这一解决方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
author-avatar
雯雯2046
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有