关键词: STM32N6调试、FSBL_XIP、AI、调试代码


前言

这段时间学习了如何调试STM32N6 FSBL_XIP工程,在这里做一下记录,感兴趣的伙伴可以尝试一下。
硬件环境: STM32N6750-DK CR1
软件环境:STM32CubeIDE 1.18.1 、IAR EW for Arm 9.60.3
使用工程目录:STM32Cube\Repository\STM32Cube_FW_N6_V1.2.0\Projects\STM32N6570-DK\Templates\Template_FSBL_XIP

对FSBL Load&Run执行流程不太清楚的小伙伴,可以看浅析STM32N6的三种启动方式补课


一、STM32CubeIDE

1.1 调试前的准备工作

调试前,我们需要先进行一些准备工作。包括对FSBL_XIP工程的编译、使用STM32CubeProgrammer指令生成FSBL/APP对应的签名。下面我们来看具体的操作步骤。

1.1.1 打开工程

打开CubeIDE的工程,工程所在目录为
STM32Cube\Repository\STM32Cube_FW_N6_V1.2.0\Projects\STM32N6570-DK\Templates\Template_FSBL_XIP\STM32CubeIDE
在这里插入图片描述

1.1.2 对FSBL工程进行编译、对APP工程进行编译。

右击Template_XIP_AppS工程,在弹出的对话框中选择编译项目。
在这里插入图片描述
编译完成后,可以看到如下信息。
在这里插入图片描述
Template_XIP_FSBL操作类似。这里不再详述。

1.1.3 使用STM32CubeProgrammer指令生成FSBL/APP对应的签名

在调用STM32CubeProgrammer指令之前,需要确保STM32CubeProgrammer相关路径已添加到电脑的环境变量中。否则的话。会找不到CubeProgrammer指令。

  1. 生成FSBL对应的签名
    1.1) 打开STM32Cube\Repository\STM32Cube_FW_N6_V1.2.0\Projects\STM32N6570-DK\Templates\Template_FSBL_XIP\STM32CubeIDE\Boot\Debug目录,可以看到我们刚才生成的Template_XIP_FSBL.bin文件。
    在这里插入图片描述

1.2 )打开PowerShell,运行指令生成对FSBL的签名

STM32_SigningTool_CLI.exe -bin Template_XIP_FSBL.bin -nk -of 0x80000000 -t fsbl -o FSBL-trusted.bin -hv 2.3 -dump FSBL-trusted.bin

在这里插入图片描述
1.3) 此时,我们就可以在文件夹中发现,生成的签名文件 FSBL-trusted.bin
在这里插入图片描述
2 生成对APP的签名
2.1) 在STM32Cube\Repository\STM32Cube_FW_N6_V1.2.0\Projects\STM32N6570-DK\Templates\Template_FSBL_XIP\STM32CubeIDE\AppS\Debug找到生成的Template_XIP_AppS.bin文件
在这里插入图片描述
2.2 )打开PowerShell,运行指令生成对APP的签名

STM32_SigningTool_CLI.exe -bin Template_XIP_AppS.bin -nk -of 0x80000000 -t fsbl -o Project-trusted.bin -hv 2.3 -dump Project-trusted.bin

在这里插入图片描述
2.3) 此时,我们就可以在文件夹中发现,生成的签名文件 Project-trusted.bin
在这里插入图片描述

1.2 FSBL调试

1.2.1 下载APP签名文件

1)将DK板至于开发者模式,通过CubeProgrammer连接上板子,选择对应的外部loader
在这里插入图片描述
在这里插入图片描述
2) 在下载界面,选择 我们之前生成的APP签名文件Project-trusted.bin文件,烧录到地址为0x70100000
在这里插入图片描述

1.2.2 调试FSBL

3)在CubeIDE工程中,选择Template_XIP_FSBL 项目,进行调试配置。

在这里插入图片描述
在这里插入图片描述
4)此时,我们可以看到程序运行在了mian函数入口处。
在这里插入图片描述
5)我们在第95行打上断点,运行到95行,观察此时PC指针地址为0x3418e498,根据手册,此时PC指针位于SRAM2 (SRAM2 upper 512KBytes (0x3418 0000 - 0x341F FFFF) )
在这里插入图片描述
6)此时,我们点击全速运行。可以观察到DK板上的小灯闪烁。点击暂停,发现此时的PC指针已经位于0x701008e2外部FLASH区域。
在这里插入图片描述
到此,我们在FSBL中的调试已经完成啦。

1.3 Application调试

1.3.1 下载FSBL签名文件

1)在1.2中我们已经烧录进去了 Project-trusted.bin。现在我们打开STM32CubeProgrammer, 将FSBL-trusted.bin烧录到地址为0x7000 0000处 (需要注意断一下电后进行连接)
在这里插入图片描述
2) 断开连接,断电。将开发板至于外部FLASH模式,上电。此时可以观察到板子的小灯闪烁。程序正常运行。
在这里插入图片描述
请添加图片描述

1.3.2 App调试

3)注意,接下来的步骤很关键。
Step 1:断电,切换到开发者模式,上电;
Step 2:切换BOOT1开关(不断电)至FALSH模式,按下Reset键,此时可以看到板上的LED1绿灯闪烁。
Step 3: 选中APP,进行调试的设置
在这里插入图片描述
Step 4: 复位方式改为None,去掉勾选Verify flash download。
在这里插入图片描述
Step 5: 取消Download,设置Runtime Option,指定Vector table 0x70100400。然后点击Apply,点击Debug。
在这里插入图片描述
4)程序进入调试模式,点击暂停。观察此时的PC指针,已经处于外部FLASH区域。
在这里插入图片描述
5)此时我们在77行小灯翻转处打断点,并将断点属性设置为Hardware ,则可以正常停到端点处。
在这里插入图片描述

二、IAR

2.1 Application调试

1)使用STM32CubeProgrammer将FSBL/APP对应的签名文件烧录到到DK板,可以参考前面是如何做的。
2)APP设置为Software Reset
在这里插入图片描述
3)以下的步骤很关键。
Step 1: 断电,切换到Dev模式,上电;
Step 2: 切换BOOT1开关(不断电)至 Flash启动模式,按Reset键(可以看到小灯闪烁)
Step 3: IAR Debug应用
在这里插入图片描述

全速运行,就可以到达我们的断点处。
在这里插入图片描述


总结

本文在两种编译器下对XIP的 APP工程进行了一下调试,感兴趣的小伙伴可以自己动手尝试看看。

在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐