使用STM32CubeIDE调试STM32N6 XIP工程

 本教程是在 STM32N6 上对外部串行闪存中的代码进行调试的全面指南。

它涵盖以下内容:环境搭建、调试器配置以及设置验证。

1.引言

 调试核心逻辑

  • 内存映射模式: 需将外部存储器设置为内存映射模式。通过运行于 AXI-SRAM2 的 FSBL(第一阶段引导程序)作为调试入口,该程序负责初始化 XSPI 接口、启用内存映射模式,并跳转至外部存储器中的应用代码。
  • 断点限制:  在 FSBL 执行前,无法在外部存储器的应用代码中设置断点(因外部存储器尚未配置为内存映射模式),需在 FSBL 完成配置后再启用断点。

2. 软件与硬件准备

  1. 软件要求

    • 安装 STM32CubeMX(6.13 及以上版本)
    • 安装 STM32N6 系列 HAL 驱动(最新版本)
    • 安装 STM32CubeProgrammer(2.18 及以上版本)
    • 安装 STM32CubeIDE(1.17.0 及以上版本)
  2. 硬件配置(以 STM32N6570-DK 开发板为例)

    • 断开开发板与电脑的连接(通过 CN6 接口)。
    • 将 BOOT0 设置为低电平(L),BOOT1 设置为高电平(H),进入 DEV BOOT 模式。
    • 将 JP2 跳线帽设为 1-2 位置(5V-STLINK 供电)。
    • 重新连接开发板与电脑。

3. 调试说明

FSBL 将是我们进行调试的入口点,但我们必须将所有项目放在同一个工作区中,以便在调试器配置中能看到 *.elf 文件。以下步骤展示了如何添加 XIP 模板,该模板将用于演示此过程。该模板位于:

C:\Users\%username%\STM32Cube\Repository\STM32Cube_FW_N6_V1.1.1\Projects\STM32N6570-DK\Templates\Template_FSBL_XIP\STM32CubeIDE

3.1 Step 1: 打开STM32CubeIDE 软件

通过 STM32CubeIDE 的 文件 > 从文件系统打开项目 功能,导入模板路径下的项目:
C:\Users\%username%\STM32Cube\Repository\STM32Cube_FW_N6_V1.1.1\Projects\STM32N6570-DK\Templates\Template_FSBL_XIP\STM32CubeIDE

3.2 Step 2: 工程设置 

该路径包含三个项目:FSBL(引导程序)、AppS(应用程序)和 ExtMemLoader(外部存储器加载器)。此示例将重点关注 FSBL(引导加载程序)和 AppS(应用程序)。

外部内存加载器(ExtMemLoader)的主要目的是提供一个自定义的外部加载器文件.这个工程是可选的,因为 STM32CubeProgrammer 已经包含了一个可用的 *.stldr 文件:

3.3 步骤 3:添加Postbuild 命令和编译

添加构建后步骤(Post Build Step)

  • 针对 FSBL 和 AppS 项目,需在编译后通过签名工具对二进制文件进行处理。
  • 操作路径
    在项目资源管理器中右键点击项目 → 属性(Properties) → C/C++ 构建(C/C++ Build) → 构建后步骤(Post-build Steps) → Shell命令(Shell Command)
cd "${ProjDirPath}/Debug" && echo y | "C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\STM32_SigningTool_CLI.exe" -bin "${ProjName}.bin" -nk -of 0x80000000 -t fsbl -o "${ProjName}-Trusted.bin" -hv 2.3 -dump "${ProjName}-Trusted.bin"

 

已知限制:ExtMemLoader 当前的构建后脚本可能需要管理员权限才能包含 *.stldr 文件,如果你看到此消息:

 可以用这个命令来替换构建后操作:

cp "${BuildArtifactFileBaseName}.elf" "../CustomN6.stldr”

这将在项目文件夹内创建 CustomN6.stldr 文件:

 3.4 步骤 4:配置调试器

 两个工程都需要配置调试器和运行器。

. 右击 [Template_XIP_FSBL]  ,选择 [Debug As] -> [Debug Configurations...]:

在 [调试配置] 窗口中,转到 [调试器] 选项卡。然后,[添加] 以下外部加载器 MX66UW1G45G_STM32N6570 - DK.stldr: 

  •  勾选[启用],取消勾选[初始化]。
  • 也可以使用 CustomN6.stldr。为此,在[外部加载器]窗口中,选择[工作区…]并找到 CustomN6.stldr。

3.5 步骤 5:启动配置

 转到【启动】选项卡并添加 AppS 项目。确保取消勾选【执行构建】和【下载】。

  • 要将应用程序(AppS)编程到外部串行闪存中,请点击[添加...]并指向已签名的二进制文件。该文件将位于调试文件夹中,文件名为项目名称 - Trusted.bin。确保同时添加指向外部存储器的地址 0x70100000:
C:\Users\%username%\STM32Cube\Repository\STM32Cube_FW_N6_V1.1.1\Projects\STM32N6570-DK\Templates\Template_FSBL_XIP\STM32CubeIDE\AppS\Debug\Template_XIP_AppS-Trusted.bin

  •  由于设置断点存在限制,我们将把第一个断点设置在 FSBL 函数调用 BOOT_Application 处,而不是通常的 main 函数处。现在,在 FSBL 固件中,XSPI 已将外部存储器配置为内存映射模式:

最终的视图应该是这样的:

  •  点击【应用】和【关闭】。配置和调试现已准备好运行。

3.6 Step 6: 开发板的准备

  • 断开开发板和PC主机的连接
  • 将 BOOT1 开关拨到 H 位置,同时将 BOOT0 开关保持在 L 位置,以进入设备引导(DEV BOOT)模式。

3.7 步骤 7:开始调试

  • 将开发板连接到计算机,然后在集成开发环境(IDE)中点击[调试]。如果所有步骤都已成功完成,运行应用程序时应会在 BOOT_Application 函数中设置的断点处暂停:
  • 代码从在 AXISRAM2 内的某个地址运行的 FSBL 应用程序开始。代码在此处停止后,按 [继续]。开发板上的绿色 LED 应开始闪烁。
  • 通过暂停代码,可以注意到它正在从外部闪存运行。这可以通过检查调用栈中的函数地址来验证。此时,可以使用所有标准调试功能。这些功能包括断点、变量、寄存器和内存视图。 

 

提示:如果在点击进入调试模式时出现失败信息,你可能需要对开发板进行断电重启操作。此外,如果在不同的调试会话之间保留了现有的断点,你也会收到失败信息。 

4.处理重新编程错误


当你使用预编程的外部存储器进入调试模式时,可能会出现错误消息。如果发生这种情况,请对开发板进行电源循环操作(断开与计算机的连接,然后重新连接)。这是由于所提供的默认 *.stldr 文件存在一个小错误,该错误将在未来的版本中得到修正。为避免此问题,可以在 stm32_sfdp_driver.c 文件的 EXTMEM_DRIVER_NOR_SFDP_DeInit 函数中添加以下几行:

#ifdef STM32_EXTMEMLOADER_STM32CUBETARGET
 memory_mapmode(DISABLE);
#endif

重新构建外部内存加载器(ExtMemLoader),并使用 CustomN6.stldr 替代它。

结论

通过遵循这些步骤,你可以成功调试在 STM32N6 上从外部闪存运行的代码。本教程提供了一种实用的方法,包括设置环境、配置调试器以及验证设置。 

References

Getting started with STM32CubeN6 for STM32N6 series - User manual

How to proceed with boot ROM on STM32N6 MCUs - User manual

Discovery kit with STM32N657X0 MCU - User manual

STM32N647/657xx Arm<Sup>®</Sup>-based 32-bit MCUs - Reference manual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值