1. 前言 STM32G47x 的 Flash 可以工作在双 bank 模式下,在该模式下对 FLASH 的操作支持RWW(Read-While-Write),在 Bank1 中可以对 Bank2 进行操作而不影响当前 Bank1 中的应用程序的运行,反之亦然。本文对双 Bank 模式下程序在线升级进行介绍,指出操作中的注意事项。* n* R5 C! e8 f; C, M U- Y3 }& N; b 2 F. g. E$ P& J; J 4 |0 M$ @& t# _" w2 n I 2. 双 Bank 工作原理 STM32G47x 系列 MCU 支持 Flash 双 Bank 功能,且芯片出厂默认配置即使能了双 Bank功能。基于两个独立的 Bank,用户可以选择将应用程序放在任意一个 Bank 中运行,通过设置标志位 BFB2 来决定从哪一个 Bank 启动:1 A8 K2 o7 ~, o. |& M* ]. B% e BFB2 = 0,MCU 双 Bank 启动禁能,从 Bank1 启动运行; BFB2 = 1,MCU 双 Bank 启动使能,从 Bank2 启动运行,若是 Bank2 中无正常程序,则: z; \. u5 Z; i+ }/ u& z. r1 L$ a 检测 Bank1 中是否有正常程序,若有则运行 Bank1 中的程序,若无则跳转到系统 Bootloader 运行(详见 AN2606 对应说明)。- C `5 i/ s, ?7 X6 i FB_MODE 反映了 Bank 的地址映射,双 Bank 的地址映射方式如下: FB_MODE= 0 时,Bank1 的起始地址为 0x08000000,Bank2 的起始地址为0x08040000;8 _% r1 K) c2 [* e4 @, z# [- Y FB_MODE= 1 时,Bank1 的起始地址为 0x08040000,Bank2 的起始地址为0x08000000;* }+ z2 m; I( t) [! o ! f- \9 c: F, f1 v* z5 k$ [ 1 ]) Q# \! N; c- S9 ?; o 在 STM32G47x 系列 MCU 中,MCU 启动时始终是从 0x08000000 这个地址开始运行。通过地址重映射的方式,将不同的 Bank 起始地址指定到 0x08000000,所以当从 Bank2 启动运行时,千万不要认为 MCU 是从 0x08040000 开始运行的,MCU 依旧是从 0x08000000 这个地址开始运行,认清这点对程序在线升级时对 Flash 的擦除与烧写特别重要。9 \: Z% X& d; g- i 另外基于以上地址重映射操作,在程序设计过程中,用户也不需要对地址空间做偏移处理,完全按照单 Bank 的思路进行设计即可,但程序不能超过单 Bank 大小。 : \" o/ V" V' X2 S/ v 完整版请查看:附件/ e1 f' \( [3 s 0 i0 u$ u) N Q7 B/ ^. `8 W+ B4 x , S( `8 q- b; V$ o' u/ O0 U & r- E5 }2 |& Q; } |
LAT1097 STM32G474双bank模式下在线升级_v1.0.pdf
下载356.05 KB, 下载次数: 50
STM32 Explore | 基于STM32G474的STM32Cube生态系统线下培训
STM32固件库分享,超全系列整理
基于STM32G473ZET6开发板设计经验分享
详细讲解STM32G4的软件工具和环境搭建
【经验分享】STM32G4_CORDIC与定点带符号整数数据格式
STM32的CAN FD位定时设置注意事项
基于STM32G474 中 Triggered-half 模式的实现
基于STM32G4的数字控制 15kW双向PFC
基于STM32G431简介
今天14:00 | 基于STM32的MATLAB电机控制方案直播
非常好的贴子,正是我所希望看到的