a1a1a21 发表于 2025-12-11 13:10:59

STM32N6 FSBL 启动架构、签名与开发实操全流程

STM32N6 作为无内置 Flash 的 AI 原生 (https://www.eefocus.com/e/1604036.html),FSBL(First Stage Boot Loader)是启动核心 —— 它是上电后 Boot(https://www.eefocus.com/baike/1611503.html) 加载的第一阶段引导程序,负责验证、搬运或配置外部 Flash / 内部 RAM,最终启动[应用程序](https://www.eefocus.com/tag/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F/)。核心价值在于 “解决无内置 Flash 启动问题、适配多应用架构、保障启动安全性”,以下是从启动模式到开发烧录的完整实操指南。

### 资料获取:[如何通过DMA配合CRC功能](https://shequ.stmicroelectronics.cn/thread-645394-1-6.html)

## 1. 核心前提:STM32N6 启动模式区分

STM32N6 的启动模式由 Boot1/Boot0 [引脚](https://www.eefocus.com/tag/%E5%BC%95%E8%84%9A/)决定,直接影响 FSBL 的执行路径,需先明确配置:

| 启动模式               | 引脚配置(Boot1/Boot0)    | 核心逻辑                                                                     | 适用场景                  |
| -------------------------- | ---------------------------- | -------------------------------------------------------------------------------- | ----------------------------- |
| Dev Boot(开发模式)   | Boot1=H(高)/Boot0 = 任意 | BootROM 直接执行内部 RAM 代码,无需外部 Flash                                  | 开发调试、程序下载          |
| Flash Boot(Flash 启动) | Boot1=L(低)/Boot0=0      | BootROM 校验外部 Flash 中的 FSBL,引导启动                                     | 量产产品、外部 Flash 启动   |
| Serial Boot(串口启动)| Boot1=L/Boot0=1            | 通过 USB/(https://www.eefocus.com/baike/511028.html) 加载程序,无 FSBL 依赖 | 紧急升级、无外部 Flash 场景 |

关键提醒:开发阶段用 Dev Boot,量产阶段切换为 Flash Boot,Serial Boot 仅作为备用启动方式。

## 2. FSBL 三大核心架构(按需选型)

STM32N6 支持三种 FSBL + 应用的架构,适配不同程序大小和性能需求,核心差异在于应用程序的存储与执行位置:

### 2.1 架构 1:仅 FSBL(应用嵌入 FSBL)

* 适用场景:程序体积≤512KB(BootROM 最大搬运容量)
* 核心流程:
1. BootROM 上电执行,校验 FSBL 的 1024 字节签名头(必须签名,否则启动失败)
2. 校验通过后,将 FSBL(含应用)搬运至内部 SRAM2(地址 0x34180000)
3. PC 指针跳转至 SRAM2,直接执行 FSBL + 应用
* 优势:架构简单,无需额外搬运应用;局限:程序体积受 512KB 限制

### 2.2 架构 2:FSBL+Load&Run(应用加载至 RAM)

* 适用场景:程序体积 > 512KB,需高速执行
* 核心流程:
1. BootROM 加载并执行 FSBL(FSBL 体积≤512KB)
2. FSBL 将外部 Flash 中的应用程序(代码 + 数据)完整拷贝至内部 RAM
3. 跳转至 RAM 中的应用入口执行
* 优势:突破 512KB 限制,应用执行速度快;局限:占用 RAM 资源,拷贝过程有延迟

### 2.3 架构 3:FSBL+XiP(应用原地执行)

* 适用场景:程序体积大,RAM 资源紧张
* 核心流程:
1. BootROM 加载并执行 FSBL
2. FSBL 配置外部 Flash 为 XiP(Execute in Place)模式(直接从 Flash 执行代码)
3. 跳转至外部 Flash 中应用的第一条指令,应用原地执行
* 优势:不占用 RAM,支持超大程序;局限:执行速度依赖外部 Flash 读写速度

## 3. 关键步骤:FSBL 签名(启动必备)

STM32N6 的 FSBL 必须经过签名添加 1024 字节头,否则 BootROM 无法校验通过,签名工具为 ST 官方的`STM32MP_SigningTool_CLI.exe`,需先安装 STM32CubeProgrammer 并配置环境变量。

### 3.1 签名命令(区分芯片 Cut 版本)

* Cut1.1 版本:
```
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 版本:
```
STM32MP_SigningTool_CLI.exe -bin FSBL.bin -nk -of 0x80000000 -t fsbl -o FSBL-trusted.bin -hv 2.3 -dump FSBL-trusted.bin
```

### 3.2 命令参数说明

* `-bin`:输入原始 FSBL 二进制文件(未签名)
* `-nk`:不使用密钥(开发 / 量产均可)
* `-t fsbl`:指定文件类型为 FSBL
* `-o`:输出签名后的文件(含 1024 字节头)
* `-hv`:头版本号(必须匹配[芯片](https://www.eefocus.com/tag/%E8%8A%AF%E7%89%87/) Cut 版本)

关键提醒:调试阶段无需签名(Dev Boot 模式直接执行 RAM 代码),仅烧录到外部 Flash 启动时需要签名。

## 4. 开发全流程:从调试到量产(IAR/Keil/CubeProgrammer)

以 STM32N6570-DK [开发板](https://www.eefocus.com/tag/%E5%BC%80%E5%8F%91%E6%9D%BF/)为例,按 “开发→调试→烧录→量产” 四步走:

### 4.1 步骤 1:进入 Dev 模式(开发调试必备)

* DK 板:JP2(Boot1)拨至 2-3(高),JP1(Boot0)拨至 1-2(低)
* Nucleo 板:JP2(Boot1)拨至 2-3,JP1(Boot0)拨至 1-2
* 作用:BootROM 直接执行 RAM 代码,无需外部 Flash 和 FSBL 签名

### 4.2 步骤 2:项目配置(以 IAR 为例)

* 设备选择:General Options→Target→Device,选择 “STM32N6570-DK”
* 输出设置:Linker→Output→Output format,选择 “Raw binary”,输出文件为`FSBL.bin`
* 调试配置:Debugger→Setup→Reset mode,选择 “Software reset”(否则调试失败)
* 补丁安装:安装 (https://www.eefocus.com/tag/SDK/) 中的补丁包(Keil/EWARM 版本),确保[编译器](https://www.eefocus.com/baike/1572830.html)支持 STM32N6

### 4.3 步骤 3:编译与调试

* 编译:直接使用默认选项编译,生成未签名的`FSBL.bin`
* 调试:连接 ST-LINK,点击 “Download and Debug”,程序会在 RAM 中执行,无需签名,可正常打印串口信息

### 4.4 步骤 4:签名与烧录到外部 Flash

#### (1)环境准备

* 配置环境变量:
* `DKEL`:指向外部 Loader 路径(如`C:Program FilesSTM32CubeProgrammerExternalLoaderMX66UW1G4<a class="article-link" target="_blank" href="https://www.eefocus.com/tag/5G/">5G</a>_STM32N6570-DK.sld`)
* 将`STM32_Programmer_CLI.exe`路径添加到系统 PATH

#### (2)烧录方式(二选一)

* 命令行烧录(Windows):
```
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG ap=1 -el %DKEL% -hardRst -w FSBL-trusted.bin 0x70000000
```
* CubeProgrammer (https://www.eefocus.com/baike/495951.html) 烧录:
1. 连接开发板,选择 “SWD→Hot plug” 模式
2. 选择对应的外部 Loader(如 MX66UW1G45G)
3. 选择签名后的`FSBL-trusted.bin`,指定烧录地址`0x70000000`,点击烧录

### 4.5 步骤 5:切换至 Flash 启动模式

* DK 板:JP2(Boot1)拨至 1-2(低),JP1(Boot0)拨至 1-2(低)
* Nucleo 板:同上
* 重启开发板,BootROM 会自动校验 FSBL 签名,引导应用启动

## 5. 常见问题速查(避坑关键)

1. FSBL 启动失败:未签名、签名头版本不匹配(Cut 版本对应错误)、烧录地址错误(需为`0x70000000`)
2. 调试无法运行:Reset 模式未设为 Software、未进入 Dev 模式、缺少 STM32N6 补丁包
3. 程序体积超限:BootROM 仅能搬运 512KB FSBL,超体积需切换至 “FSBL+Load&Run” 架构
4. 烧录后无法启动:未切换至 Flash 启动模式、外部 Loader 选择错误

STM32N6 的 FSBL 核心是 “签名校验 + 引导加载”,关键在于根据程序体积选择合适架构,严格遵循 “开发用 Dev 模式(无需签名)、量产用 Flash 模式(必须签名)” 的逻辑。只要把控好签名、烧录地址、启动模式三个核心点,就能稳定实现外部 Flash 启动。

页: [1]
查看完整版本: STM32N6 FSBL 启动架构、签名与开发实操全流程