1、簡介
STM32N6 是 ST 第一顆帶 NPU 的 MCU 芯片,內(nèi)部只有一小塊 ROM 用于第一階段的 Boot,必須使用外部 Flash 存儲用戶代碼或通過 USB/U(S)ART 串口啟動。另外,STM32N6 的工程引入了一些新的術(shù)語比如 FSBL 等。本文記錄 STM32N6 使用的一些基本啟動步驟,重點介紹FSBL。
2、啟動模式
STM32N6 DK 板,其中 BOOT1 引腳決定了兩種不同的啟動模式,dev boot 和Flash boot/Serial boot 模式:
Flash boot(Boot1 = 0, Boot0 = 0)意味著上電后,BootROM 程序(固化在片內(nèi) ROM 的一小段啟動程序)會嘗試從外部 Flash 啟動,應用程序需要下載到外部 Flash,如果沒有應用則無法啟動。Dev boot 意味著上電后,BootROM 程序嘗試從內(nèi)部 Ram 中啟動。
3、啟動流程和工程框架
3.1. FSBL
FSBL 的全稱為 First Stage Boot Loader, 在上電后,先執(zhí)行片內(nèi) ROM 區(qū)域的BootROM,然后根據(jù) Boot 選項和地址,執(zhí)行相應地址的 FSBL,參考下圖實例為外部Flash 的啟動流程。
系統(tǒng)啟動流程如下:
- BootROM 啟動后,會驗證 FSBL 的頭,如上圖深黃色部分 1024Bytes 的 Header 信息,可以使用 ST 提供的腳本對 FSBL 進行簽名,F(xiàn)SBL 程序必須完成簽名,不然無法正常啟動。驗證成功后,BootROM 將 FSBL 程序搬運至內(nèi)部 SRAM2:0x34180000 的位置,然后PC 指針跳轉(zhuǎn)過去開始執(zhí)行 FSBL。
- FSBL 開始執(zhí)行。
3.2. FSBL+Load&Run
APP 的開發(fā)可以在內(nèi)部 SRAM 中調(diào)試完成,開發(fā)完成后通過 External loader 下載到外部Flash。
系統(tǒng)啟動流程如下:
- 和 3.1 的 FSBL 執(zhí)行一樣,BootROM 先啟動,然后校驗,搬運 FSBL,并跳轉(zhuǎn)到 FSBL。
- FSBL 開始執(zhí)行,然后拷貝 Appli 的完整內(nèi)容到內(nèi)部 SRAM,包括 data 和 code。然后跳轉(zhuǎn)到 APP 代碼進行執(zhí)行。
- APP 代碼開始執(zhí)行。
3.3. FSBL+XiP(Execute in Place)
系統(tǒng)啟動流程如下:
- BootROM 開始執(zhí)行,和圖 2 一樣,校驗完 FSBL 后將其搬運到 SRAM 中。
- FSBL 開始執(zhí)行,將外部 Flash 配置為 XiP 模式,F(xiàn)SBL 完成后,將 PC 跳轉(zhuǎn)至外部Flash 中 App 的第一條指令。
- APP 開始執(zhí)行。
3.4. ST FSBL 簽名工具
在簽名前,需要安裝 ST 最新的 CubeProgrammer,并將 STM32MP_SigningTool_CLI.exe的路徑加入到 Windows 系統(tǒng) PATH 環(huán)境變量中,確保該 exe 程序可以被正確找到并運行。
Cut1.1 執(zhí)行:
STM32MP_SigningTool_CLI.exe -bin FSBL.bin -nk -of 0x80000000 -t fsbl -o FSBL
trusted.bin -hv 2.1 -dump FSBL-trusted.bin
Cut2.0 執(zhí)行:
STM32MP_SigningTool_CLI.exe -bin FSBL.bin -nk -of 0x80000000 -t fsbl -o FSBL
trusted.bin -hv 2.3 -dump FSBL-trusted.bin
- -bin: 原始 bin 文件。
- -nk:no keys,沒有使用密鑰相關(guān)選項。
- -of:option flags。
- -t:bin 文件的類型為 fsbl。
- -o:輸出后的文件。
- -hv:header version,版本號。
- -dump:將 bin 文件的 header 信息 dump 出來,方便查看。
FSBL.bin 是原始的 FSBL 工程的 bin 文件,F(xiàn)SBL-trusted.bin 是已經(jīng)被正確簽名并添加好header 的 bin 文件。
3.5. 總結(jié)
既然單獨一個 FSBL 工程里面也可以包含應用程序,那么是不是所有 APP 程序都放在 FSBL里面,然后像 3.1 一樣只編譯和燒錄一個工程即可?
不是,BootROM 最大只能拷貝 512K 字節(jié),如果工程超過了這個大小,則需要類似 3.2 小節(jié)中所示架構(gòu)。
4、開發(fā)流程
本節(jié)將以 IAR+STM32N6 DK 板為例,介紹 STM32N6 開發(fā)的基本流程。該 demo 位于SDK:
ProjectsSTM32N6570-DKExamplesUARTUART_HyperTerminal_IT 目錄下,該 demo的框架只有一個 FSBL 程序,應用程序和 FSBL 是一個工程,對應 3.1 小節(jié)中的架構(gòu)。