STM32F769 Bank 启动
前言
STM32F769 的双 bank Flash,可以在执行程序的同时对另一个 bank 进行擦除和编程的操作。利用这个特性,可以实现在线
程序更新,双 bank 启动的功能。本文将结合笔者在实际应用中遇到的问题,针对性的介绍 nDBOOT 分别设置为 0 1 时,
两种不同的启动方式。同时你也可以参考 AN4826 STM32F7 Cube 库中的例程来进一步加深理解。
STM32F7 bank bank 配置
2M 字节 Flash F769 为例,
当配置为单 bank 时,芯片的主 FLASH 分为:4 32K 字节的扇区,1 128K 字节的扇区,7 256K 字节的扇区。AXI
线上的起始地址为 0x08000000 ~0x081fffff
当配置成双 bank 时,芯片的主 FLASH 分为两个 1M 字节的 bank,每个 bank 分为:4 16K 字节的扇区,1 64K 字节的
扇区,7 128K 字节的扇区。AXI 总线上,Bank1 的起始地址为 0x08000000~0x080fffff, Bank2 的起始地址为
0x08100000~0x081fffff
见下图:
从单 Bank 切换到双 Bank 只需要将选项字中的 nDBANK 设置为 0 就可以了。
bank 启动的配置
阅读 STM32F769 的参考手册 RM0410,知道它的启动地址是根据 BOOT 引脚的状态由选项字中的 BOOT_ADD0 或者
BOOT_ADD1 来决定的。可以在从地址 0 0x3FFFFFFF 的合法地址范围内,以 16K 字节为间隔从任何地址启动。也就是
说,可以通过设置 BOOT_ADD0 或者 BOOT_ADD1 的值为 0x08000000 或者 0x08100000 来从 Bank1 或者 Bank2 启动。这
个很好理解,但选项字里还有一个 nDBOOT, 这个字段又有什么作用呢?它会怎样影响 STM32F769 的启动过程呢?
SYSCFG_MEMRMP SWP_FB 字段又有什么用呢?除了修改 BOOT_ADDx 还有什么是要注意的吗?下面将一一进行解
答。
nDBOOT SWP_FB 的说明
我们先来了解一下 nDBOOT SWP_FB
nDBOOT 位于选项字中,只有在 nDBANK 设置为 0 时才有效。
nDBOOT 1 时,双启动模式被禁止,根据 BOOT_ADDx 的值来决定启动地址。这也是默认的设置;
nDBOOT 0 时,双启动模式被启用,将始终从系统的 bootloader 启动(如果 BOOT_ADDx 的值在 Flash 范围内),或
者从 RAM 启动(如果 BOOT_ADDx 的值在 RAM 范围内)。
SWP_FB 位于 SYSCFG_MEMRMP 寄存器中,用来切换 Flash bank1 bank2 的地址映射。