0

我正在研究 B-L475E-IOT01A2,它是 STM32L475 系列 Discovery IoT 套件,具有 ARM M4 皮质。它有两个 FLASH 存储器,每个大小为 512 KB。我正在实现两个应用程序以及一个引导加载程序,它们都存储在闪存中。由于空间非常小,引导加载程序、第一个应用程序和第二个应用程序的某些部分存储在第一个存储库中,而第二个存储库包含第二个应用程序的剩余部分。因此,在引导加载程序中,我需要交换两个应用程序。

问题是两个应用程序中只有一部分被交换,因为第二个应用程序部分存储在两个银行中。一次只能在 FLASH 中写入一页 (2 KB) 内存。这两个应用程序的大小均为 384 KB,计算后结果为 192 页。但在运行交换程序后,只交换了 72 页。

这是应用程序和引导加载程序的地址。

BOOTLOADER_ADDRESS 0x08000000,  (Size = 48K )

APPLICATION1_ADDRESS 0x0800F000 (Size = 384 KB)

APPLICATION2_ADDRESS 0x0806F800 (Size = 384 KB)

那么我应该怎么做才能确保正确交换?我应该启用双银行模式还是将第二个应用程序存储在第二个银行或做其他事情?

您的帮助将不胜感激。

谢谢,

舍图

4

1 回答 1

1

一种可能的解决方法/不同的方法是将引导加载程序功能集成到应用程序 1 和应用程序 2 中,并将每个应用程序都放在自己的闪存库(1 和 2)中。使用双组模式可以更轻松地在应用程序之间来回切换。我在 STM32F7 设备上使用了这种方法。

当设备启动时,它被配置为从闪存库 1 或 2 启动,具体取决于几个设备选项字节/设置。如果您的引导加载程序/应用程序中的代码决定引导到另一个应用程序,它可以通过修改一些选项字节然后执行软复位来做到这一点。此外,在从一个闪存库运行引导加载程序/应用程序时,可以更新另一个闪存库。

如果使用这种方法进行固件更新,您必须特别注意新固件版本不会破坏引导加载程序的固件更新功能。

于 2019-08-02T09:06:09.370 回答