Bootloader
Function Implementation:在 ArtPi 的環(huán)境下,實現(xiàn)一個簡單的 BootLoader,該 BootLoader 實現(xiàn)了 QSPI 和 SDRAM 功能的初始化,使 App 可以運行在 QSPI 中,并且可以將 SDRAM 當做普通的內部 RAM 使用(但需要注意,仍需要添加 SCB_InvalidateDCache 和 SCB_CleanDCache 等函數(shù)來更新緩存,類似于對 AXI SRAM 的操作)。
BootLoader和App實現(xiàn)教程:安富萊_STM32-V7開發(fā)板_用戶手冊,含BSP驅動包設計(V3.5)
注意事項
在 BootLoader 中進行了 MPU 的配置,在 App 中,就無需重復配置;
在 BootLoader 中,最好禁用 I-Cache 和 D-Cache(實際上,我看了一下硬漢的部分代碼,實際上,并不強求一定要禁用 I-Cache 和 D-Cache,應該還是根據(jù)自己的需求來決定是開啟還是關閉);
在 BootLoader 中,配置了 FMC,在 App 中,需要注釋以下這段代碼:
/*
Disable the FMC bank1 (enabled after reset).
This, prevents CPU speculation access on this bank which blocks the use of FMC during
24us. During this time the others FMC master (such as LTDC) cannot use it!
*/
// FMC_Bank1_R->BTCR[0] = 0x000030D2;
此段代碼位于 system_stm32h7xx.h 中,在進入 main 函數(shù)前執(zhí)行,因此在 main 函數(shù)中進行 Debug 可能無法發(fā)現(xiàn)此問題。(群友發(fā)現(xiàn)的問題)
此寄存器地址為 0x52004000,對應 SRAM/NOR-Flash 片選控制寄存器 1(FMC_BCR1)。
#define PERIPH_BASE (0x40000000UL) /*!< Base address of : AHB/APB Peripherals */
#define D1_AHB1PERIPH_BASE (PERIPH_BASE + 0x12000000UL)
#define FMC_R_BASE (D1_AHB1PERIPH_BASE + 0x4000UL)
/* !< FMC Banks registers base address */
#define FMC_Bank1_R_BASE (FMC_R_BASE + 0x0000UL)
#define FMC_Bank1_R ((FMC_Bank1_TypeDef *) FMC_Bank1_R_BASE)
FMC_BCR1 = 0x000030D2; 的作用可以參考 RM0433 22.7.6 節(jié),我們主要關注以下內容:
FMCEN = 0:禁止 FMC 控制器,F(xiàn)MC_BCR2..4 寄存器的 FMCEN 位為“無關”位,只能通過 FMC_BCR1 寄存器使能 ;
在未注釋此行代碼時,F(xiàn)MC Bank1會被關閉(復位后啟用),阻止 24 \\mu s24μs 內的 FMC 的使用,這會導致 MemMange 錯誤,導致程序進入 MemMange_Handler(可能會被誤認為是 BootLoader 未成功跳轉,但其實是跳轉了,然后立即產(chǎn)生總線錯誤)。有趣的是,如果在 BootLoader 內,對 SDRAM 進行一次讀或寫操作,則不會產(chǎn)生該報警錯誤。
未進行讀寫操作,App 進入 MemMange_Handler
進行讀寫操作,App 不進入MemMange_Handler
在完成以上配置后,就可以在 App 中,像內置 RAM 一樣使用 SDRAM。
先在 LinkerScript 內添加以下內容(UNINIT 確保該內存區(qū)域不會被初始化為 0):
RW_IRAM7 0xC0000000 UNINIT 0x02000000 { ; RW data - 32MB SDRAM(0xC0000000)
*(.RAM_SDRAM)
}
使用如下:
uint32_t testValue attribute ((section(".RAM_SDRAM")));
-
FMC
+關注
關注
0文章
99瀏覽量
20029 -
SDRAM控制器
+關注
關注
0文章
29瀏覽量
8332 -
控制寄存器
+關注
關注
0文章
34瀏覽量
11626 -
QSPI接口
+關注
關注
0文章
14瀏覽量
3522 -
stm32h7
+關注
關注
0文章
37瀏覽量
1753
發(fā)布評論請先 登錄
介紹STM32H7內置的系統(tǒng)bootloader的基礎知識
STM32H7系列芯片及bootloader引導程序
Stm32的bootloader和App的編寫注意事項有哪些?
【STM32H7教程】第19章 STM32H7的GPIO應用之按鍵FIFO

【STM32H7教程】第21章 STM32H7的NVIC中斷分組和配置(重要)

"STM32H7學習繼續(xù)(STM32H7系列5)第十七章比較實用,以后寫程序的時候會用到"

【STM32H7教程】第8章 STM32H7的終極調試組件Event Recorder

【STM32H7教程】第14章 STM32H7的電源,復位和時鐘系統(tǒng)

STM32H750_FMC_SDRAM 初始化流程總結

STM32H7雙核CM4作為Master初始化系統(tǒng)

評論