STMCU小助手
发布时间:2023-2-17 15:50
|
1. 前言客户使用 STM32G474 系列芯片,在烧录应用程序的同时要对 Option Bytes 中的 DBANK进行修改,采用 STlink Utility 或是 CubeProgrammer 工具进行操作,并希望整个过程只用一次烧录动作就完成,发现烧录的应用程序无法运行。& h' ]) V! F! M k) j: P( K: M8 h / Q+ r$ I, ~' |# D 2. 问题产生及原因分析 STM32G474 系列芯片具有双 Bank 功能,且默认情况下 Option Bytes 中的 DBANK =1,即双 Bank 使能。但是客户实际的应用使用的是单 Bank,所以需要将 DBANK 设置为 0,所以客户在使用 Utility 或是 CubeProgrammer 工具烧录应用程序时,同时设置 Option Bytes 中的DBANK 为 0。但是当烧录结束后,发现应用程序无法正常运行,需要再次烧录才能运行。 整个烧录的过程,在 Utility 中操作如下图所示,通过 Target ->Automatic Mode->Option bytes configuration 对 DBANK 进行修改,在 File 中选择应用程序文件,然后直接烧录。 , ^4 q: y) j( t N
3 N1 I1 E; K1 {* w, O 在 CubeProgrammer 中操作如下图所示,通过 Erasing & Programming->Automatic Mode->Option bytes commands,写入修改 DBANK 的命令行,在 File 中选择应用程序文件,然后直接烧录。0 N4 b* L1 u2 c0 d ) S+ c% E9 e# @0 u4 L6 H+ s, }) R+ w
整个操作流程是正确的,以 CubeProgrammer 为例,整个操作的日志如下,显示所有操作正常完成。 0 L- X1 l7 W& U2 k: \8 [
但是仔细阅读日志,可以发现整个操作,首先烧录的是应用程序,然后再进行 Option Bytes 的修改,也就是说,在烧录应用程序的时候,MCU 依旧是工作在双 bank 模式下,待程序烧录完成,将双 Bank 修改为单 Bank,注意 DBANK 的修改将会改变 Flash 的取指方式,如下: • Single bank mode DBANK=0: read access of 128 bits* X, j, l- n% n+ V8 r W. G • Dual bank mode DBANK=1: read access of 64 bits 可以通过单步操作的方式来查看 Flash 中内容的区别。在双 Bank 模式下烧录程序后,读出Flash 内容如下:
+ ~! d5 W" c/ {3 r8 p" }5 w 将 DBANK 设置为单 Bank 模式,再次读取 Flash 内容如下: 7 K' Z9 O" n# b* u- ~) Z
; q0 T- u Z/ S* T! x2 A 对比以上的内容,可以发现由于取指方式的改变,读取的 Flash 中内容发生了变化,后者出现了大片的空白空间,这也就是此前客户操作方式在完成烧录后程序无法运行的原因。+ L- V5 H' m* t! g. z* `. I / j* }1 a7 n$ w) q3 y$ c" V |, G) g 0 M0 W W9 V2 x% S$ Q8 U* O8 w 完整版请查看:附件
STM32G4 应用程序与 Option Bytes 同时烧录问题.pdf
(478.24 KB, 下载次数: 2)
|
经验分享 | 基于STM32G4芯片TIM+SPI+DMA应用示例
STM32G47x 双 Bank 模式下在线升级
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【经验分享】STM32G4之基本定时器
NUCLEO-G474RE 扩展 LSM6DSO 传感器数据融合实操演示全解析
经验分享 | STM32G474 高精度定时器同步功能全解析 从内部互联到多芯片协同的实现方案
经验分享 | STM32G4双BANK启动应用演示
STM32G4 LPTIM+DMAMUX 实现并行输出应用示例
实战经验 | LAT1578 SAU对NSC分区的影响
经验分享 | STM32G474 HRTIM Triggered-half模式实现两相交错电源180°相位同步方案
微信公众号
手机版