摘要
第一級引導加載程序(FSBL)是 STM32N6 微控制器啟動過程中的關鍵組件。它負責初始化系統、配置硬體,並將應用程序代碼從外部存儲器加載到內部或外部存儲器中執行。本文提供關於如何在簡化模式下使用 FSBL 的快速教程。
引言
上電時,boot ROM 會將 FSBL 二進制文件從外部存儲器複製到內部 SRAM。boot ROM 任務完成後,跳轉至 FSBL 程序。FSBL 通常負責執行時鐘和系統設置,並配置外部存儲器。最後,它將應用程序二進制文件複製到內部 SRAM 或將外部存儲器設置為內存映射模式。完成後,應用程序啟動並運行。在 STM32N6 MCU 上,第一級引導加載程序(FSBL)必須經過簽名,以便boot ROM 能在安全鎖定狀態下執行。為確保 FSBL 簽名正確,用戶可請求boot ROM 追蹤信息(存儲在 AXISRAM2 中)。

1.1 Image header
Image header包含 FSBL 的元數據,如大小、版本和入口點。boot ROM 使用這些信息正確加載和執行 FSBL。
1.2 Base header
Base header提供額外的配置細節,包括內存地址和安全設置。它確保 FSBL 被加載到正確的內存位置,並應用必要的安全措施。
1.3認證過程
認證過程驗證 FSBL 的完整性和真實性。通常使用數字簽名等加密技術,確保 FSBL 未被篡改。
FSBL 主要功能
FSBL 可通過多種方式使用,適應不同的應用需求。以下章節描述 FSBL 支持的各種模式。
2.1 基礎加載運行模式
在此模式下,boot ROM 從外部閃存獲取 FSBL。FSBL 不僅負責初始化系統,還包含應用程序代碼(從同一 SRAM 地址執行)。該模式用於約 90% 的 STM32Cube_FW_N6 示例。主要限制是總代碼大小不得超過 511 KB(boot ROM 最多複製 512 KB,其中前 1 KB 保留給頭文件和認證填充)。
以下是典型步驟的簡化流程圖:

上電 → boot ROM 從外部閃存加載 FSBL → FSBL 初始化系統並運行應用程序
在開發模式(DEV Mode)下,通過調整鏈接腳本,開發者可將 FSBL 代碼直接加載到 SRAM,省去編程外部存儲器的步驟,便於調試。
2.2 加載並運行應用程序模式
boot ROM 從外部閃存獲取 FSBL,FSBL 再從外部閃存獲取第二個二進制文件並複製到內部 SRAM。加載完成後,FSBL 跳轉至應用程序代碼執行。此模式適用於部分 STM32Cube_FW_N6 示例,突破 511 KB 限制,用戶代碼可占用內部 RAM 的剩餘空間。
通過調整應用程序,甚至可覆蓋boot ROM 複製的 FSBL,實現 SRAM 中的連續固件加載。此配置下,最大固件可從 flexRAM 加載至 SRAM7。
上電 → boot ROM 加載 FSBL → FSBL 從外部閃存加載第二份二進制文件到內部 SRAM → 跳轉至應用程序
2.3執行模式(XiP)
在此模式下,FSBL 將外部存儲器配置為 XiP 模式,直接從外部存儲器執行應用程序代碼。

上電 → boot ROM 加載 FSBL → FSBL 配置外部存儲器為 XiP 模式 → 跳轉至外部閃存中的應用程序
2.4 安全與非安全應用程序模式
FSBL 從外部閃存加載兩個二進制文件:安全應用和非安全應用,分別複製到內部 SRAM 的不同地址區域,並跳轉至安全應用執行。此模式與常規加載運行類似。
上電 → boot ROM 加載 FSBL → FSBL 從外部閃存加載安全和非安全應用程序至不同 SRAM 區域 → 跳轉至安全應用
2.5 PSRAM 與 NOR 閃存模式
此模式未包含在標準驅動示例中,但可通過類似方法實現:FSBL 將應用代碼從 NOR 閃存複製到 PSRAM 執行。需注意配置 MPU 以確保正確複製。
3.簡化加載運行示例:UART 演示
前提條件
安裝 STM32CubeMX、最新版 STM32N6 HAL 驅動和 STM32CubeIDE
硬體使用 STM32N6570-DK 開發板,並設置為 DEV 啟動模式(跳線設置見下圖):
硬體配置
1.斷開開發板與計算機連接(CN6)。
2.設置開發板為DEV BOOT模式:
3.將 JP2 跳線置於 1-2 位置(5V-STLINK)。
4.重新連接開發板(CN6)。

請參考項目的 readme.html 文件,該文件提供了所有必要信息。簡而言之,USART1 被配置為異步模式,使用的 GPIO 引腳為 PE5(USART1_TX)和 PE6(USART1_RX)。PE5 和 PE6 連接至 ST-LINK,後者充當虛擬 COM 埠(VCP)。應用程序會統計接收到的字節數,一旦收到 10 個字節,便會點亮 LED1 並輸出消息 [Example Finished]。
整體流程概述如下:
當程序加載代碼後,boot ROM 跳轉至內部 RAM 地址,隨後 FSBL 代碼按如下方式執行:

執行流程說明
1.啟動 ROM 執行
在 DEV 模式選擇下,boot ROM 完成初始化。
2.FSBL 加載
FSBL 項目通過 SWD 接口編程至內部 SRAM2,程序計數器(PC)跳轉至 FSBL 的首條指令地址。
3.應用程序執行
FSBL 初始化完成後,控制權移交至應用程序代碼。
操作步驟
1.打開 STM32CubeIDE,導入示例項目:
C:\Users\%username%\STM32Cube\Repository\STM32Cube_FW_N6_V1.0.0\Projects\STM32N6570-DK\Examples\UART\UART_HyperTerminal_IT\STM32CubeIDE

2.導入項目後需注意,示例中的鏈接腳本已預先配置為將 FSBL 定位在AXSRAM2 區域。該腳本將 511 KB 的區域劃分為:
- ROM 區:255 KB(用於代碼存儲)
- RAM 區:256 KB(用於運行時數據)
完成上述配置後,直接構建項目即可開始調試並觀察程序執行。

3.調試配置
復位設備並確認啟動模式
- 按下 NRST 按鈕,復位設備。
- 確保開發板已正確配置為 DEV Boot 模式(需檢查跳線設置,如 JP2 置於 1-2 位置)。
啟動調試會話
- 在 STM32CubeIDE 中,右鍵點擊項目,選擇:
[Debug As] → [STM32 C/C++ Application]。
配置調試器
- 保持調試器為 默認設置(無需修改 GDB 或埠參數)。
- 在啟動配置窗口中,點擊 [OK] 確認,開始加載固件至設備。


在建立 ST-LINK GDB 服務器連接並完成固件編程後,STM32CubeIDE 會切換至調試器視圖,並將調試器暫停在 main() 函數的入口處。

4.終端設置
配置終端參數
打開串口終端工具(如 Tera Term、PuTTY 或 STM32CubeIDE 內置終端),按以下設置配置:
- 波特率:115200
- 數據位:7
- 校驗位:奇校驗(Odd)
- 停止位:1
- 流控制:無
恢復固件執行
- 在 STM32CubeIDE 調試界面中,點擊 Resume(▶️ 按鈕)繼續運行程序。
輸入測試字符
- 在終端界面中,輸入任意 10 個字符(例如:1234567890)。
- 無需按回車鍵,直接輸入即可。
驗證結果
- LED1:從閃爍狀態變為常亮。
- 終端輸出:顯示消息 [Example Finished]。

結論
FSBL(第一階段引導加載程序)是 STM32N6 啟動流程中不可或缺的核心組件。其設計兼具靈活性與功能性,支持多種啟動模式與配置方案,能夠為不同應用場景提供安全可靠的啟動保障。通過深入理解 FSBL 的布局架構及其核心特性,開發者可充分發揮其優勢,精準滿足各類定製化需求。
參考文檔:
User manual 3249: Getting started with STM32CubeN6 for STM32N6 series
https://www.st.com/resource/en/user_manual/um3249-getting-started-with-stm32cuben6-for-stm32n6-series-stmicroelectronics.pdf
User manual 3234 How to proceed with boot ROM on STM32N6 MCUs
https://www.st.com/resource/en/user_manual/um3234-how-to-proceed-with-boot-rom-on-stm32n6-mcus-stmicroelectronics.pdf
User manual 3300: Discovery kit with STM32N657X0 MCU
https://www.st.com/resource/en/user_manual/um3300-discovery-kit-with-stm32n657x0-mcu-stmicroelectronics.pd
評論