簡體   English   中英

如何為STM32L475交換FLASH存儲器中不同存儲區的兩個存儲器區域?

[英]How to swap two memory regions from different banks in FLASH Memory for STM32L475?

我正在研究B-L475E-IOT01A2,它是STM32L475系列Discovery IoT套件,並具有ARM M4皮質。 它具有兩塊容量為512 KB的FLASH存儲器。 我正在實現兩個應用程序以及一個引導程序,它們都存儲在FLASH中。 由於空間很小,因此引導加載程序,第一個應用程序和第二個應用程序的某些部分存儲在第一個存儲區中,而第二個存儲區包含第二個應用程序的其余部分。 因此,在引導加載程序中的某個時刻,我需要交換兩個應用程序。

問題在於兩個應用程序中只有一部分被交換,因為第二個應用程序部分存儲在兩個庫中。 一次只能在FLASH中寫入一頁內存(2 KB)。 這兩個應用程序的大小均為384 KB,經過計算,結果為192頁。 但是在運行交換程序后,僅交換了72頁。

這是應用程序和引導加載程序的地址。

BOOTLOADER_ADDRESS 0x08000000,  (Size = 48K )

APPLICATION1_ADDRESS 0x0800F000 (Size = 384 KB)

APPLICATION2_ADDRESS 0x0806F800 (Size = 384 KB)

那么我該怎么做才能確保正確交換? 我應該啟用雙銀行模式還是將第二個應用程序存儲在第二個銀行中或執行其他操作?

非常感謝您的幫助。

謝謝,

舍圖

一種可能的解決方法/不同方法是將引導加載程序功能集成到應用程序1和應用程序2中,並使每個應用程序都位於其自己的閃存庫(1和2)中。 使用雙存儲區模式使在應用程序之間來回切換更加容易。 我在STM32F7器件上使用了這種方法。

設備啟動時,它會配置為從閃存庫1或2啟動,具體取決於幾個設備選項字節/設置。 如果引導加載程序/應用程序中的代碼決定引導至另一個應用程序,則可以通過修改一些選項字節然后執行軟復位來做到這一點。 同樣,從一個閃存庫運行引導加載程序/應用程序時,可以更新另一閃存庫。

如果使用這種方法進行固件更新,則必須特別小心,以確保新的固件版本不會破壞引導加載程序的固件更新功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM