1、简介
STM32N6 是 ST 第一颗带 NPU 的 MCU 芯片,内部只有一小块 ROM 用于第一阶段的 Boot,必须使用外部 Flash 存储用户代码或通过 USB/U(S)ART 串口启动。另外,STM32N6 的工程引入了一些新的术语比如 FSBL 等。本文记录 STM32N6 使用的一些基本启动步骤,重点介绍FSBL。
2、启动模式
STM32N6 DK 板,其中 BOOT1 引脚决定了两种不同的启动模式,dev boot 和Flash boot/Serial boot 模式:
Flash boot(Boot1 = 0, Boot0 = 0)意味着上电后,BootROM 程序(固化在片内 ROM 的一小段启动程序)会尝试从外部 Flash 启动,应用程序需要下载到外部 Flash,如果没有应用则无法启动。Dev boot 意味着上电后,BootROM 程序尝试从内部 Ram 中启动。
3、启动流程和工程框架
3.1. FSBL
FSBL 的全称为 First Stage Boot Loader, 在上电后,先执行片内 ROM 区域的BootROM,然后根据 Boot 选项和地址,执行相应地址的 FSBL,参考下图实例为外部Flash 的启动流程。
系统启动流程如下:
- BootROM 启动后,会验证 FSBL 的头,如上图深黄色部分 1024Bytes 的 Header 信息,可以使用 ST 提供的脚本对 FSBL 进行签名,FSBL 程序必须完成签名,不然无法正常启动。验证成功后,BootROM 将 FSBL 程序搬运至内部 SRAM2:0x34180000 的位置,然后PC 指针跳转过去开始执行 FSBL。
- FSBL 开始执行。
3.2. FSBL+Load&Run
APP 的开发可以在内部 SRAM 中调试完成,开发完成后通过 External loader 下载到外部Flash。
系统启动流程如下:
- 和 3.1 的 FSBL 执行一样,BootROM 先启动,然后校验,搬运 FSBL,并跳转到 FSBL。
- FSBL 开始执行,然后拷贝 Appli 的完整内容到内部 SRAM,包括 data 和 code。然后跳转到 APP 代码进行执行。
- APP 代码开始执行。
3.3. FSBL+XiP(Execute in Place)
系统启动流程如下:
- BootROM 开始执行,和图 2 一样,校验完 FSBL 后将其搬运到 SRAM 中。
- FSBL 开始执行,将外部 Flash 配置为 XiP 模式,FSBL 完成后,将 PC 跳转至外部Flash 中 App 的第一条指令。
- APP 开始执行。
3.4. ST FSBL 签名工具
在签名前,需要安装 ST 最新的 CubeProgrammer,并将 STM32MP_SigningTool_CLI.exe的路径加入到 Windows 系统 PATH 环境变量中,确保该 exe 程序可以被正确找到并运行。
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
- -bin: 原始 bin 文件。
- -nk:no keys,没有使用密钥相关选项。
- -of:option flags。
- -t:bin 文件的类型为 fsbl。
- -o:输出后的文件。
- -hv:header version,版本号。
- -dump:将 bin 文件的 header 信息 dump 出来,方便查看。
FSBL.bin 是原始的 FSBL 工程的 bin 文件,FSBL-trusted.bin 是已经被正确签名并添加好header 的 bin 文件。
3.5. 总结
既然单独一个 FSBL 工程里面也可以包含应用程序,那么是不是所有 APP 程序都放在 FSBL里面,然后像 3.1 一样只编译和烧录一个工程即可?
不是,BootROM 最大只能拷贝 512K 字节,如果工程超过了这个大小,则需要类似 3.2 小节中所示架构。
4、开发流程
本节将以 IAR+STM32N6 DK 板为例,介绍 STM32N6 开发的基本流程。该 demo 位于SDK:
ProjectsSTM32N6570-DKExamplesUARTUART_HyperTerminal_IT 目录下,该 demo的框架只有一个 FSBL 程序,应用程序和 FSBL 是一个工程,对应 3.1 小节中的架构。
2248