Hzzz 发表于 2024-2-2 16:14:18

关于F429的双Bank启动疑问。

以前没了解过,这几天研究了一下。我看了手册,发现与之相关的有三个参数。
首先是要设置Option bytes。这个实际就是一段用户配置参数flash。这里面有两个相关参数
1.DB1M 用来开启双Bnak
2.BFB2   用来设置从哪个Bank启动
这两个参数我的理解是这样的:首先肯定是要设置 DB1M 开启双bank。然后比我我当前固件APP1运行在bank1区,然后我执行升级,将固件APP2写入在bank2区,写入完成后对 BFB2 进行设置让系统下次从bank2启动,然后执行一次复位。
对这两个参数的设置实际就是写flash操作,然后芯片内部自举的时候会读用户设置参数,根据用户设置参数进行启动。

但是还有个FB_MODE,这个是在SYSCFG memory remap register (SYSCFG_MEMRMP)中,FB_MODE的说明如下
Bit 8 FB_MODE: Flash Bank mode selection
       Set and cleared by software. This bit controls the Flash Bank 1/2 mapping.
      0: Flash Bank 1 is mapped at 0x0800 0000 (and aliased at 0x0000 0000) and
          Flash Bank 2 is mapped at 0x0810 0000 (and aliased at 0x0010 0000)
      1: Flash Bank 2 is mapped at 0x0800 0000 (and aliased at 0x0000 0000) and
          Flash Bank 1 is mapped at 0x0810 0000 (and aliased at 0x0010 0000)

如果我在bank2启动,但是我的固件我不想改向量表(也就是同一份代码来升级)则需要设置映射,相当于将bank2起始映射到0x0800 0000。

但是这个 FB_MODE 应该在什么时间设置呢?


Hzzz 发表于 2024-2-2 17:00:33

看了AN4826文档,有如下说明
4.2 闪存存储区交换:
一旦激活双启动模式且启动地址有效,自举程序便会设置闪存存储区交换位( SWP_FB =1),生成以下映射。
4.2.1 1 MB闪存存储区交换
– 闪存存储区2基址映射在0x08000000( AXI)
– 闪存存储区1基址映射在0x08000000( AXI)

这意思是说映射bit不需要用户软件去设置吗?是由芯片的自举程序去设置?

eric2013 发表于 2024-2-3 08:29:43

Hzzz 发表于 2024-2-2 17:00
看了AN4826文档,有如下说明
4.2 闪存存储区交换:
一旦激活双启动模式且启动地址有效,自举程序便会设置 ...

1、FB_MODE 这个就是BANK1和BANK2地址映射,应用效果来看到就是两个BANK的实际地址交换了下。
2、这个一般都是配置选项字节来设置的。

Hzzz 发表于 2024-2-3 13:49:40

eric2013 发表于 2024-2-3 08:29
1、FB_MODE 这个就是BANK1和BANK2地址映射,应用效果来看到就是两个BANK的实际地址交换了下。
2、这个一 ...

也就是芯片自举到时候根据想选字节选择的bank1还是bank2,自举会自动设置这个映射吗?

eric2013 发表于 2024-2-3 16:37:22

Hzzz 发表于 2024-2-3 13:49
也就是芯片自举到时候根据想选字节选择的bank1还是bank2,自举会自动设置这个映射吗?

对,根据选项字节的配置,使能相应的映射。

Hzzz 发表于 2024-2-5 10:07:45

eric2013 发表于 2024-2-3 16:37
对,根据选项字节的配置,使能相应的映射。

确实,今天放假了,做了个测试。我写了个串口程序,然后定义为APP1,烧录在0x0800 0000,这个时候OPT设置DB1M=1;BFB2=0;然后跑的是BANK1区的,然后我做一个APP2的bin文件,使用Cubemxprg把APP2烧录在
0x0808 0000,将BFB2=1;然后上电跑的就是BANK2的程序。最后祝硬汉哥新年快乐!!!
页: [1]
查看完整版本: 关于F429的双Bank启动疑问。