• 正文
  • 相关推荐
申请入驻 产业图谱

STM32N6 XIP应用调试方案全景解析

09/29 11:10
149
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1. 背景与问题起源

客户在STM32N6开发时选择使用了STM32CubeIDE作为开发环境。STM32N6有一个区别于多数STM32型号的硬件特点:它没有内置Flash。这意味着应用程序无法像传统MCU那样存放在片内Flash中直接执行,而是需要放置在外部Flash中,通过XIP(Execute In Place,就地执行)方式运行。

对于XIP应用,系统启动过程遵循固定的链路:首先由BootROM加载FSBL(First Stage Bootloader,第一阶段引导加载程序),然后由FSBL设置XIP模式,调整到外部Flash上直接运行应用。本文涉及的启动模式以外部Flash启动模式为例,不涉及其他启动模式。

问题出在调试环节。如果直接使用STM32CubeIDE调试XIP应用,由于FSBL尚未执行,XSPI外设还没有设置为memory map模式,此时调试器读取外部Flash不会成功,也就不能直接进行Debug。这是STM32N6平台上XIP应用开发面临的一个实际障碍。

资料获取:实战经验 | LAT1721 使用STM32CubeIDE调试STM32N6 XIP应用的一种方法

2. STM32N6平台与XIP技术概览

STM32N6是意法半导体推出的基于Arm Cortex-M55内核的32位微控制器系列。与传统STM32型号不同,STM32N6不集成片内Flash,程序代码与数据需要存储在外部存储器中。这一架构设计使得XIP技术成为STM32N6应用开发的核心环节。

XIP(Execute In Place)是一种让CPU直接从外部存储器取指执行的技术,无需将代码先加载到片内RAM。在STM32N6平台上,外部Flash通过XSPI接口与芯片连接,FSBL在启动阶段完成XSPI的初始化与memory map模式配置后,外部Flash就被映射到Cortex-M55的地址空间中,CPU可以直接从外部Flash取指运行应用程序。

FSBL在整个启动链中扮演着承上启下的角色。它由BootROM加载执行,负责完成外部Flash的初始化、XIP模式设置以及应用程序的跳转。没有FSBL的执行,外部Flash对CPU而言是不可直接访问的,这也是XIP应用不能直接调试的根本原因。

3. 核心挑战:XIP应用为何不能直接Debug

理解XIP应用为何不能直接调试,需要抓住一个关键点:XSPI的memory map模式是由FSBL配置的。当调试器直接连接芯片并尝试访问外部Flash中的应用代码时,FSBL还没有运行,XSPI处于复位后的默认状态,外部Flash没有被映射到CPU地址空间。此时调试器从外部Flash地址读取指令或数据,得到的结果是无效的,调试会话无法正常建立。

在LAT1721文档发布之前,开发者常用的调试方法是:将FSBL与应用均烧录到外部Flash中,在DEV模式下上电(此时STM32N6 DBG端口是打开的),再切换模式至外部Flash启动,按reset按钮复位。这里的reset是系统复位,不会关闭DBG端口。复位后系统由BootROM加载FSBL并跳转执行FSBL,再从FSBL跳转到应用执行。由于执行过了FSBL,XSPI已完成配置,在硬件不进行复位的情况下就可以使用STM32CubeIDE进行Debug。

但这种传统方法有两个明显的不便之处:一是需要将Boot管脚引出以方便切换Boot模式,对硬件设计有额外要求;二是每次调试都要经历切换Boot模式、按复位的操作,调试过程相对繁琐。对于Boot管脚没有引出的产品硬件,这种方法甚至无法使用。

4. 两种调试路径对比

下表对传统调试方法与本文提出的调试方法进行对比:

对比维度 传统调试方法 本文方法(LAT1721)
原理 烧录FSBL+应用到外部Flash,切换Boot模式后系统复位,由BootROM加载FSBL执行 DEV模式下通过GDB初始化脚本加载并执行FSBL,再跳转应用
Boot管脚要求 需要引出Boot管脚以切换启动模式 不需要切换Boot模式
调试操作 切换Boot模式→按reset→连接调试器 直接在DEV模式下启动调试会话
FSBL执行方式 由BootROM正常加载执行 由GDB脚本加载符号表并设置向量表后执行
适用硬件 Boot管脚可访问的开发板 Boot管脚未引出也可使用
繁琐程度 每次调试需切换模式并复位,相对繁琐 设置完成后直接启动调试,相对简洁

5. 本文方案整体架构

本文以STM32Cube_FW_N6_V1.3.0包中的Template_FSBL_XIP工程为例,介绍一种使用STM32CubeIDE在DEV模式下直接调试应用的方法,不需要切换Boot模式。整个方案分为四个步骤:

  • Step1:编译FSBL子工程,生成FSBL的bin和out文件
  • Step2:编译Application子工程,将生成的bin文件烧录到外部Flash地址0x7010400
  • Step3:在STM32CubeIDE中配置Application的Debug设置,重点是Startup页的GDB初始化命令脚本
  • Step4:启动调试会话,将外部Flash上的断点改为硬断点,正常调试应用

方案的核心思路是:在调试器启动时,通过GDB初始化命令预先加载FSBL的elf文件,将Cortex-M55向量表指向FSBL首地址,并在FSBL的JumpToApplication函数处设置断点。调试器运行后先执行FSBL完成XSPI配置,在跳转到应用前暂停,随后加载应用符号表并在main函数处停下,从而实现XIP应用的直接调试。

6. 关键产品与工具清单

本方案涉及的硬件平台、软件工具与参考工程如下:

类别 名称 版本/型号 用途
开发板 STM32N6570-DK — 硬件验证平台,运行XIP应用
集成开发环境 STM32CubeIDE V1.18.1及以上 工程编译、调试配置与Debug会话
固件包 STM32Cube_FW_N6 V1.3.0 提供Template_FSBL_XIP参考工程
烧录工具 STM32CubeProgrammer — 将Application bin文件烧录到外部Flash
参考工程 Template_FSBL_XIP — 包含FSBL、AppS、ExtMemLoader三个子工程
参考手册 RM0486 Rev 3.0 STM32N647/657xx寄存器与启动流程说明

7. 文档与参考资源导航

本系列深度分析基于ST官方应用笔记LAT1721(Rev 1.0,2026年9月2日发布)撰写。LAT1721全文共8页,包含引言、四步调试流程、小结、参考文献、版本历史等章节,配有6张操作截图,直观展示了STM32CubeIDE中的配置界面与调试效果。

参考文献RM0486(STM32N647/657xx Arm-based 32-bit MCUs Reference manual,Rev 3.0,2025年12月15日发布)是STM32N6系列的权威参考手册,涵盖寄存器定义、启动流程、XSPI外设等详细说明,是深入理解XIP调试技术原理的必备资料。

参考工程Template_FSBL_XIP位于STM32Cube_FW_N6_V1.3.0包的Projects\STM32N6570-DK\Templates\目录下,包含三个子工程:Template_FSBL_XIP_AppS(应用程序)、Template_FSBL_XIP_FSBL(第一阶段引导程序)和ExtMemLoader(外部存储器加载器,本文不做讨论)。开发者可直接基于该工程进行XIP应用的开发与调试。

相关推荐