你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32G474的flash模式如何判定?single bank 和dual bank

[复制链接]
water_c 提问时间:2024-11-8 11:03 / 已解决

请教各位,使用的芯片是stm32g474cbt6,按照手册说法,single bank是单一flash区域,最小擦除是4k,dual bank是支持双flash区域,一边操作不影响另外一块,最小擦除是2k.

手册判定依据:读取flash option register,其中BFB2位是0,表示是单bank模式。

而我这边不管是打印出寄存器状态值,还是用cube工具读出来,都是BFB2为0,DBANK为1。bit22 DBANK 表示单bank和双bank的数据大小。同时我自己实测下来,默认状态的最小擦除是2k,但用hal的api,双bank操作不行,实际应该是单bank,但是single bank的擦除又是2k,和手册的最小4k不一致。。

下图是手册的bank模式的判定寄存器说明和cube工具的读出。

92816639cf8b27c2a52cfeb5b4626c8.png

下图是手册说明,bank模式不同,分区和最小擦除单位不同。g474cbt6是3类flash

image.png

下图说DBANK是1,表示双bank。

image.png

我这边,上电默认 BFB2 是0, DBANK是1,我试了很多次结果一致,同时擦除最小单位2k,擦除用single bank模式可以覆盖全部。我实在有点搞不懂,感觉混在一起了,不知道是不是我理解不对,望各位大佬指点一下

92816639cf8b27c2a52cfeb5b4626c8.png
image.png
收藏 评论12 发布时间:2024-11-8 11:03

举报

12个回答
xmshao 最优答案 回答时间:2024-11-11 08:38:44

water_c 发表于 2024-11-9 16:01
继续补充,我这边芯片型号stm32g474cbt6,128kflash,目前仅可以当做一个bank1进行2k擦出,页数0-63(当然 ...

下面文章你可以参考下:

STM32G4 双BANK Flash模式页擦除话题

water_c 回答时间:2024-11-8 11:13:25

补充两点:

  1. 上电打印的代码如下图,每次上电的userconfig内容都是ffeff800,bit20位置是0,按手册说法dual bank模式关闭

image.png

  1. 第二点 ,擦除代码如下图,模式BANK_1,page可以从3~64(0-2擦除会把应用代码擦掉),可以全覆盖,而且单位是2k擦除。也就是说,我按照single bank模式,擦除单位2k,可以正常实现。这与手册不太相符(手册说 单bank 4k擦除单位)
  2. image.png
butterflyspring 回答时间:2024-11-8 16:53:01
HAL 庫中的歷程是根據DUAL BANK 設計的,宏定義的參數都DUAL BANK 的值。


所以用single bank 時需要根據手冊修改這些宏定義的值,包括判斷參數的幾個函數。


xmshao 回答时间:2024-11-8 17:59:01
关于G474单双BANK的判断标准就是DBANK控制位,0对应单BANK,1双BANK.


至于BFB2,是基于双bank是否从BANK2的启动选项,不是单双判断标准。


至于单双BANK的page大小,手册描述没有问题,双BANK是2K,单banK是4K.


我刚才验证过了,基于单bank,每次页擦除就是4KB.  


下面代码我就选择某一页进行擦除,看看到底擦2K还是4K.


FirstPage = GetPage(FLASH_USER_START_ADDR);


LastPage = GetPage(FLASH_USER_START_ADDR);


NbOfPages = LastPage- FirstPage + 1;


BankNumber = GetBank(FLASH_USER_START_ADDR);


EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
EraseInitStruct.Banks       = BankNumber;
EraseInitStruct.Page        = FirstPage/2;
EraseInitStruct.NbPages     = NbOfPages;




if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
{
      Error_Handler();
}

.....


温馨提示,我们的例程默认是按照双BANK做的。


另外,页码别给错了。我今天就卡在这个地方了出了一身汗。
water_c 回答时间:2024-11-8 19:31:14

butterflyspring 发表于 2024-11-8 16:53
HAL 庫中的歷程是根據DUAL BANK 設計的,宏定義的參數都DUAL BANK 的值。</p>
<p>

您的意思是看hal库中,对应的宏定义吗?

我这边查到这个结果,FLASH_OPTR_BFB2和FLASH_OPTR_DBANK置位了,说明默认是dual bank模式吗

image.png

water_c 回答时间:2024-11-8 19:40:03

xmshao 发表于 2024-11-8 17:59
关于G474单双BANK的判断标准就是DBANK控制位,0对应单BANK,1双BANK.</p>
<p>

我懂您的意思,您那边的情况和手册一直。但我这边实测 上电后读取的DBANK置位,BFB2不置位,同时hal库中查到的FLASH_OPTR_BFB2和FLASH_OPTR_DBANK置位。这我提到的上面前提下,我对bank2进行操作擦除,结果是失败的,实际擦不掉,如下图,若赋值FLASH_BANK_2,同时页数随机从0~32(bank2模式),对应的擦除我这边是不生效的。这也就是我会提出这个帖子的原因,费解。

image.png

您那边能否也看下上电后您芯片默认的DBANK和BFB2位的数据,以及hal库的地址?

image.png

water_c 回答时间:2024-11-9 16:01:23
继续补充,我这边芯片型号stm32g474cbt6,128kflash,目前仅可以当做一个bank1进行2k擦出,页数0-63(当然前面几页是原代码不能动,实际测试不管是擦前写入还是擦后消除也通过打印对应地址的数据和cube program验证了)。这与手册不符合。也上网搜了,有的说是以上电后的BFB2的状态为准,有的说是以DBANK的状态为准,有的说是以hal库中的驱动,宏定义为准。我实在是有些不明白了。这个芯片我试过了三四块,两个最小核心板,一个我们自己打样的产品版,症状一致。下周一我会修改hal库的相关宏定义以及bfb2状态和dbank状态继续测试。
water_c 回答时间:2024-11-11 09:37:57

xmshao 发表于 2024-11-11 08:38</p>
<p>下面文章你可以参考下:

[md]多谢!

butterflyspring 回答时间:2024-11-11 11:51:10
water_c 发表于 2024-11-9 16:01
继续补充,我这边芯片型号stm32g474cbt6,128kflash,目前仅可以当做一个bank1进行2k擦出,页数0-63(当然 ...

根据参考手册描述,128k 产品只有单bank功能,所以不用在它上面试了。

而且它的结构就是 2k page的。您在核对一下看看。

STM32G474CBT6 single bank.PNG

water_c 回答时间:2024-11-11 15:17:02

butterflyspring 发表于 2024-11-11 11:51
根据参考手册描述,128k 产品只有单bank功能,所以不用在它上面试了。</p>
<p>而且它的结构就是 2k page的。您 ...

您好,感谢答复,我看到手册上stm32g474属于类别3,类别3中有关flash的划分也是有128k的,stmg474cbt6也是支持的吧?

image.png

image.png

butterflyspring 回答时间:2024-11-11 16:56:29
water_c 发表于 2024-11-11 15:17
[md]您好,感谢答复,我看到手册上stm32g474属于类别3,类别3中有关flash的划分也是有128k的,stmg474cbt ...

再看了一遍手册,是我看错了。

你截图的部分是对的。

我这边没有128K的芯片,但是我用512k的Nucleo 板上的芯片测试是对的。

只是例程按照dual bank 设计的,好几个地方需要更改,能直接给参数的直接给,不要用获取参数的函数。
Aani 回答时间:昨天 15:27

water_c 发表于 2024-11-9 16:01
继续补充,我这边芯片型号stm32g474cbt6,128kflash,目前仅可以当做一个bank1进行2k擦出,页数0-63(当然 ...

老哥,解决了吗 ?我这边芯片用的也是STM32G474CBT6 ,flash大小为128k,发现对bank2 也就是32-61页无法擦除写入,BANK1 就可以.😕

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版