分享我的GD32F450的IAP过程
最近一个项目使用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中来交流。
分享我的GD32F450的IAP过程的更多相关文章
- 不作伪分享者决定完整分享我自学Python3的全部过程细节
不作伪分享者决定完整分享我自学Python3的全部过程细节 我不要作伪分享者 十六年前我第一次见到了电脑,并深深地爱上了它: 十二年前我第一次连上了网络,并紧紧地被它爱上. 十年前的网络是田园美景 ...
- unity 嵌入 百度分享 与 游戏内购物 iap
原地址:http://blog.csdn.net/u012085988/article/details/18268869 最近老板让在unity项目里实现分享与内购功能,还要ios和android两个 ...
- 分享最新申请IDP账号的过程,包含duns申请的分享(2013年6月)
5月份接到公司要申请开发者账号的任务,就一直在各个论坛找申请的流程,但都是一些09年10年的比较旧的流程,现在都已经不适用了,好不容易找到2012年分享的流程吧,才发现申请过程中少了DUNS编码的步骤 ...
- UI设计教程分享:关于海报的合成过程
一张好的产品创意合成海报,能瞬间提升商品价值感,同时场景和相关元素的融入,让消费者瞬间明白商品属性及内涵.同时为商品营造的使用场景拥有更强的代入感,从而刺激转化.好的创意合成海报能为消费者带来视觉冲击 ...
- CMDB经验分享之 – 剖析CMDB的设计过程
作为IT管理的核心,CMDB逐渐成为系统管理项目实施的热点.在很多的案例中,由于忽视了CMDB的因素,ITIL的深入应用受到了极大的挑战.同时,由于CMDB是IT管理信息的集中,CMDB也是一个重要的 ...
- 分享一下个人学PS的过程
得知Photoshop这款软件是在上大学的时候,2010年.学校学生会的科技部纳新,要求新人会PPT.word.Excel和Photoshop.当时有一个Photoshop大神,成为了学生会科技部的主 ...
- 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)
简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...
- 【腾讯Bugly经验分享】程序员的成长离不开哪些软技能?
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ce8068d4d44a246f72baf2 Dev Club 是一个交流移动 ...
- 分享几个.NET WinForm开源组件,纪念逐渐远去的WinForm。。。
前面3个月的时间内,这些.NET开源项目你知道吗?系列文章已经发表了3篇,共计45个平时接触比较少,曾经默默无闻的.NET开源项目,展示给大家,当然不是每个人都能用得上,但也的确是有些人用了,反响还不 ...
随机推荐
- 使用http3访问服务
用到的包:import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response; 主要代码: try { //创建OkH ...
- 查询亿级数据毫秒级返回!Elasticsearch 是如何做到的?
掌握搜索技能,才能在庞大的数据集中找到准确的目标.本篇就带你进入另一个非凡的旅程,即使你没有像Google或Baidu一样强大的技术,一样也可以做出与之相匹敌的用户体验. 搜索是现代软件必备的一项基础 ...
- springboot项目快速搭建
1. 问题描述 springboot的面世,成为Java开发者的一大福音,大大提升了开发的效率,其实springboot只是在maven的基础上,对已有的maven gav进行了封装而已,今天用最简单 ...
- springmvc上传文件踩过的坑
@RequestMapping("/addTweet") public String addTweet(TweetVO tweetVO, HttpServletRequest re ...
- 用Python玩数据-笔记整理-第二章
条件结构: if语句: if expression: #比较/成员/逻辑运算符 expr_true_suite #代码块必须缩进4个空格 else语句: if expression: expr_tru ...
- python爬虫常用正则表达式组合匹配
["\']匹配什么?(.*?)匹配什么? ["\'] ----------- 匹配单双引号 (.*?)xxx ----------- 匹配任意长度字符+xxx ...
- ForkJoinPool分支/合并框架工程使用的工作窃取
ForkJoinPool分支/合并框架 在必要的情况下,讲一个大任务,进行拆分(fork)成若干个小任务(拆到不可拆为止),再将一个个小的任务运算的结果进行join汇总. 工作窃取的背景 分支/合并框 ...
- Excel催化剂开源第32波-VSTO开发的插件让WPS顺利调用的方法-注册表增加注册信息
VSTO插件开发完成后,鉴于现在WPS用户也不少,很多时候用户没办法用OFFICE软件,只能在WPS环境下办公,VSTO开发的插件,只需增加一句注册表信息,即可让WPS识别到并调用VSTO开发的功能, ...
- 关键字static、final
final final能修饰类.修饰方法.能修饰属性. 修饰类:该类不能被继承. 修饰方法:该方法不能被重写.所以abstract和final不能同时用 修饰属性/变量:该属性/变量为常量,该值不能再 ...
- [leetcode]python 695. Max Area of Island
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...