当前位置: 首页 > news >正文

STM32G474 IAP 双bank升级的坑

真不容易,

  1. 选项字中必须确保DBANK为1,为1表示将512k的flash分成2个独立的256k flash
  2. 选项字BFB2是切换的关键,如果你不想用传统的bootload的方案的话,
    1. 该值为1表示使用bank2作为启动时0x08000000的地址
    2. 该值为0表示使用bank1作为启动时0x08000000的地址
  3. 巨坑之一,并不是设置了BFB2为1就一定会运行在物理bank2上,因为设置了BFB2=1后,启动时刻的固化在单片机内的bootload会判断bank2的程序是否具备可运行的条件(向量表),如果不具备就还是会运行在物理bank1上!你需要自己去下载关于启动时刻的流程,这里提供一个讨论链接
  4. 实际运行的物理bank,需要通过SYSCFG_MEMRMP 寄存器的 FB_MODE位去判断
    1. 值为0,表示实际运行在bank1
    2. 值为1,表示实际运行在bank2
    3. 你可以使用这个寄存器和BFB2的状态是否一致去判断运行状态
  5. 写flahs时,应该总是写0x08040000(虚拟bank2基址),因为正常运行后,无论是物理bank1还是bank2,都会被映射到启动地址0x08000000,而你不能改写真正运行的flash,所以写入地址总是0x08040000开始
  6. 巨坑之二擦除flash块时,应该按FB_MODE的值去判断应该擦除的块,而不是BFB2!
  7. 注意擦除等耗时操作时记得喂狗。
http://www.xdnf.cn/news/1396369.html

相关文章:

  • WebStorm无法识别@下的文件,但是可以正常使用
  • 【后端数据库】MySQL 索引生效/失效规则 + 核心原理
  • 腾讯云OpenCloudOS 9系统部署OpenTenBase数据库详细教程
  • 【云原生】Docker 搭建Kafka服务两种方式实战操作详解
  • php连接rabbitmq例子
  • 【序列晋升】21 Spring Cloud Gateway 云原生网关演进之路
  • 卷积神经网络项目:基于CNN实现心律失常(ECG)的小颗粒度分类系统
  • HAProxy 负载均衡全解析:从基础部署、负载策略到会话保持及性能优化指南
  • docker命令(二)
  • 现状摸底:如何快速诊断企业的“数字化健康度”?
  • PCIe 6.0 TLP深度解析:从结构设计到错误处理的全链路机制
  • 算法题(194):字典树
  • 从0到1玩转 Google SEO
  • Suno-API - OpenI
  • “FAQ + AI”智能助手全栈实现方案
  • Python从入门到高手9.4节-基于字典树的敏感词识别算法
  • 8月29日星期五今日早报简报微语报早读
  • 轮廓周长,面积,外接圆,外接矩形近似轮廓和模板匹配和argparse模块实现代码参数的动态配置
  • 【C++】掌握类模板:多参数实战技巧
  • 基于Net海洋生态环境保护系统的设计与实现(代码+数据库+LW)
  • MYSQL速通(2/5)
  • 小杰机器视觉(six)——模板匹配
  • UCIE Specification详解(十)
  • TypeScript: Symbol.iterator属性
  • WINTRUST!_GetMessage函数分析之CRYPT32!CryptSIPGetSignedDataMsg函数的作用是得到nt5inf.cat的信息
  • AI的“科学革命”:Karpathy吹响号角,从“经院哲学”走向“实验科学”
  • 基于STM32单片机的智能温室控制声光报警系统设计
  • Geocodify 的 API
  • CD71.【C++ Dev】二叉树的三种非递归遍历方式
  • 网络编程 反射【详解】 | Java 学习日志 | 第 15 天