STM32N6项目中,用户代码可能会比较大,此时仅用内部SRAM并不能满足用代码运行需求。那么,将代码放置到PSRAM上运行也是个不错的选择。
2. 问题
2.1. 问题详情
客户在开发其产品过程中,使用了STM32N657X0H3Q。客户的代码很大,不能放在SRAM上运行,想放在PSRAM上去运行,并咨询如何在STM32CubeIDE上进行调试。
2.2. 重现问题
关于如何将用户代码放置在PSRAM上运行的示例,在ST Community中有一篇文章《How to execute code from the external PSRAM using the STM32N6》对这个要求进行了详细的描述。所以,如何设计一个项目,将代码从外部Flash复制到外部PSRAM中去运行,这里不多讲,可以直接参考这一篇说明。
但是,此文章只介绍如何创建这么一个工程并正确运行,并没有介绍如何进行调试。这是需要我们重点思考的地方。
2.3. 分析问题
从DEV模式下调试的基本思路来看,我们需要将FSBL的代码先运行,以实现将应用代码从XSPI2的外部Flash搬运到XSPI1的外部PSRAM,然后才能够在PSRAM上进行调试。但是要实现这样的方式,在STM32CubeIDE中可能需要使用GDB命令才能够实现,这显得复杂不少。
那么,是否有较简单一些的方式?答案是有的,可以考虑采用Attach的方式来实现。思路如下:
1. 先将FSBL和Appli签名(添加Header),再将代码都烧录到外部Flash中。
2. 然后在DEBUG功能使能的情况下,让FSBL和Appli运行起来。
3. Attach上去,然后进行调试。
有了基本思路后,我们知道主要工作是在工程项目的配置上,因为代码运行在PSRAM也属于外部存储器,配置其实与运行在外部Flash的XIP方式类似,所以并不复杂。
3.1. 编译及烧录代码
STM32_SigningTool_CLI.exe -bin STM32N6_FSBL_PSRAM_Appli.bin -nk -of 0x80000000 -t fsbl -o STM32N6_FSBL_PSRAM_Appli-trusted.bin -hv 2.3 -dump STM32N6_FSBL_PSRAM_Appli-trusted.bin
STM32_SigningTool_CLI.exe -bin STM32N6_FSBL_PSRAM_FSBL.bin -nk -of 0x80000000 -t fsbl -o STM32N6_FSBL_PSRAM_FSBL-trusted.bin -hv 2.3 -dump STM32N6_FSBL_PSRAM_FSBL-trusted.bin
通过STM32CubeProgrammer,
将STM32N6_FSBL_PSRAM_FSBLtrusted.bin烧录到 0x70000000地址,
将STM32N6_FSBL_PSRAM_Applitrusted.bin烧录到 0x70100000地址。
3. 再将BOOT配置修改为Flash boot模式(BOOT0=L & BOOT1=L),按下复位按键,此时应该可以看到绿色LED灯LED1正在闪烁,证明烧录的代码没有问题。
3.2. 配置工程项目
1. 在STM32CubeIDE的工程中,选中Appli工程,选择Debug Configuration来对Debug进行配置,如图1所示。

2. 在Debug配置中,选择Debugger页面,将复位修改为None,不进行复位;将Verify flash download的打勾去掉,因为并不需要下载代码;如图2所示。

3. 选择Startup页面,在Load Image and Symbols中,选中Debug/STM32N6_FSBL_PSRAM_Appli.elf这一行,点击Edit进行编辑,在编辑中把Download前的打勾去掉,因为不需要下载,点“OK”后就可以看到这一行的Download下显示为“false”了。然后,还需要对Runtime Options进行配置,因为代码是运行在XSPI1的PSRAM上的,地址为0x90000000。当然,FSBL会将位于XSPI2 Flash中起始地址为0x70100000的Appli代码复制到XSPI1 PSRAM中起始地址为0x90100000的区域;另外因为Header的存在,实际在代码部分是从0x90100400地址开始的,所以在Runtime Options 中要将向量表地址指定到0x90100400。如图3所示。

4. 配置完成。
3.3. 开始调试
先将STM32N6570-DK板的BOOT配置为DEV boot模式(BOOT0=X & BOOT1=H),上电;然后在不断电的情况下,将BOOT配置修改为Flash boot模式(BOOT0=L & BOOT1=L),按下复位按键,此时应该可以看到绿色LED灯LED1正在闪烁。此操作的目的是在STM32 DEBUG端口打开的情况下,运行Flash中的代码。此时,就可以在STM32CubeIDE中,直接点击Debug按键,或者在工具栏中点击进行调试了。可以看到指针停在了Appli中main函数的入口。在Disassembly窗口看到地址为0x091007e8,确实是位于PSRAM中的地址。如图4所示。

4. 小结
调试STM32N6在PSRAM上执行的代码时,可以采用类似于在外部Flash中执行代码的XIP调试方式,使用Attach的方法进行连接,设置过程相对简单,供STM32开发者参考。
来源:STM32
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。