2403096_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2403096_zh-CN

2403096_zh-CN

MIMXRT1040-EVK:从 RAM 调试可以正常工作,但从 FLASH 调试则不行。

大家好,

我正在使用MIMXRT1040-EVK ,并使用MCUXpresso IDE 和 LinkServer/SWD

我遇到的问题是,我的应用程序在从 RAM 链接和执行时可以正常工作,但是当配置为从外部 FlexSPI NOR Flash 执行时,调试器无法到达 main() 函数。

当前行为

RAM版本:

  • “将应用程序链接到 RAM” 已启用

  • 应用程序下载成功

  • 应用程序执行正常

  • 调试器到达 main() 函数处。

  • 我可以正常调试应用程序。

Flash/XIP 版本:

  • “将应用程序链接到 RAM” 已禁用

  • 应用程序链接到外部闪存,起始地址为 0x60000000

  • 版本成功完成

  • 生成 .axf 文件

  • 当我开始调试时,调试器没有执行到 main() 函数。

  • CPU 似乎并未从预期的 0x600xxxxx XIP 地址范围执行。

链接器/地图信息

生成的 .map文件显示了预期的 XIP 布局:

.boot_hdr       0x60000000
.boot_hdr.conf  0x60000000
.boot_hdr.ivt   0x60001000
.boot_hdr.boot_data
                0x60001020

.text           0x60002000
.isr_vector     0x60002000

ResetISR        0x6000231C
main            0x60004EF4

因此,该应用程序似乎包含预期的 FlexSPI 或非 启动头、IVT、启动数据、向量表、ResetISR 和应用程序代码。

我还有:

XIP_EXTERNAL_FLASH = 1
XIP_BOOT_HEADER_ENABLE = 1

重要观察

在尝试调试/编程 Flash 映像后,我检查了以下内存:

0x60000000
0x60001000
0x60002000

内存窗口显示的是 0x00000000/空数据,而不是预期的应用程序内容。

例如,在:

0x60002000

我原本期望看到应用程序向量表,但内存中似乎包含零。

调试失败后,CPU寄存器还显示:

PC = 0x0020E368
SP = 0x20200F70
LR = 0x0020ED49

而不是预期的 0x600xxxxx XIP 区域中的 PC。

调试配置

我正在使用:

Debug Connection: SWD
Connect script: RT1040_connect.scp

调试配置包含:

Load image: enabled
Use project binary: igpio_led_output.axf

Load symbols: enabled
Use project binary: igpio_led_output.axf

Set breakpoint at: main
Request hardware breakpoint: enabled

正在使用 LinkServer 调试配置。

项目内容

该项目包含标准的 XIP 相关文件:

xip/
 ├── evkmimxrt1040_flexspi_nor_config.c
 ├── evkmimxrt1040_flexspi_nor_config.h
 ├── fsl_flexspi_nor_boot.c
 └── fsl_flexspi_nor_boot.h

生成的链接器脚本还会将启动头和应用程序放置在从 0x60000000 开始的 BOARD_FLASH 区域中。

我的问题

请问有人可以帮我找出原因吗?在启动 LinkServer 调试会话时,外部 FlexSPI 或非 Flash 没有被写入生成的 XIP 映像。

具体来说:

  1. MIMXRT1040-EVK + LinkServer是否需要特定的 FlexSPI NOR Flash 驱动程序/配置才能调试 XIP 应用程序?

  2. RT1040_connect.scp 是否足以同时用于连接和编程外部 NOR Flash?

  3. MCUXpresso调试配置中是否还需要任何额外的Flash编程配置

  4. 调试配置是否应该使用特定的 flexspi_nor Flash 驱动程序或 Flash 工具配置?

  5. Is there a known issue with LinkServer + MIMXRT1040 + 外部 FlexSPI 或非 + XIP 调试 where the .axf is loaded as symbols but the external Flash is not actually programmed?

  6. 是否有推荐的 NXP 示例项目/配置可供我参考,以便进行MIMXRT1040-EVK FlexSPI 或非 XIP 调试会话

希望能得到一些指导,告诉我接下来应该检查哪些内容。

谢谢!

Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

谢谢你的回复。

我按照你的建议检查了 MCU设置→内存 细节。我附上了截图。

BOARD_FLASH 存储器配置如下:

位置: 0x60000000
大小: 0x800000
闪存驱动程序: MIMXRT1040_SFDP_QSPI.cfx

因此,看来特定的外部 Flash 驱动程序已经配置为 BOARD_FLASH

我还尝试了串口下载模式 + MCU 配置工具的步骤。我使用 MCU 配置工具成功构建了镜像并写入了镜像。

然而,在那之后,我仍然无法通过正常的 MCUXpresso + LinkServer 调试流程从 Flash 中对应用程序进行编程/调试。

有趣的是,当我稍后再次尝试刷写/调试代码时,它突然就成功了,应用程序也成功地从 Flash 运行了。

在失败和成功的尝试之间,我没有故意更改项目配置、Flash 驱动程序、链接器配置或启动设置。

因此,目前我怀疑问题可能出在 Flash 编程/初始化/复位序列上,而不是应用程序/链接器配置本身。

请问是什么原因导致MIMXRT1040-EVK出现这种现象

尤其:

  • MIMXRT1040_SFDP_QSPI.cfx 是否是 EVK 外部 FlexSPI NOR 的正确 Flash 驱动程序?
  • 即使 BOARD_FLASH 的驱动程序列中已分配了 MIMXRT1040_SFDP_QSPI.cfx,但默认 LinkServer Flash 驱动程序字段为空这一事实是否具有重要意义?
  • 外部闪存在之前的编程/调试尝试失败后是否会保持意外状态,需要进行特定的RESET或断电重启?
  • RT1040_connect.scp 或 LinkServer RESET/连接序列是否会导致 Flash 编程行为间歇性异常?
  • MIMXRT1040-EVK、LinkServer 和 MIMXRT1040_SFDP_QSPI.cfx 是否存在已知问题,导致 Flash 编程间歇性失败?

由于相同的配置最终在没有进行任何有意更改的情况下就能正常工作,我想了解之前失败的原因,以便我们能够使 Flash 调试/编程更加可靠。

谢谢!

Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

你好@Prashanth1

根据您提供的截图,Flash 驱动程序配置似乎没有问题。

您能否先尝试将开发板置于串口下载模式,然后使用 MCUXpresso 安全配置工具通过 USB/UART 将镜像下载到 Flash?

该方法可以排除调试器的影响,并可用于检查电路板是否存在闪存硬件问题。另外,请提供使用调试器生成的下载失败日志。

我这边会尽快安排一台 RT1040-EVK,并尝试使用您之前附加的项目包重现该问题。


此致,
加文

Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

您好,加文先生,

谢谢你的回复。

我按照您的建议检查了MCU设置→内存详细信息。我附上了截图。

在我的项目中,BOARD_FLASH 存储器配置如下:

  • 位置:0x60000000
  • 大小:0x800000
  • 驱动程序:MIMXRT1040_SFDP_QSPI.cfx

因此,FlexSPI 或非 Flash 驱动程序似乎已经与 BOARD_FLASH 存储区域关联起来。

但是,我注意到 MCU 设置顶部的“默认 LinkServer Flash Driver”字段为空,而 BOARD_FLASH 的驱动程序列显示为 MIMXRT1040_SFDP_QSPI.cfx。

请您确认一下:

  1. 这种配置对 MIMXRT1040-EVK 是否正确?
  2. 我是否也应该在“默认 LinkServer Flash Driver”字段中选择 MIMXRT1040_SFDP_QSPI.cfx?
  3. 或者,BOARD_FLASH 行中显示的驱动程序是否足以让 LinkServer 对外部 FlexSPI 或非 进行编程?

我的主要问题是,应用程序已正确链接到 XIP 的 0x60000000,但在启动 LinkServer 调试会话后,我在内存窗口中看不到 0x60000000 / 0x60002000 处的应用程序内容。

RAM调试功能在同一应用程序中运行正常。

我已附上MCU设置截图供您参考。

谢谢!

RT1040MCUsettings.pngRT1040MCUsettings.png

Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

你好@Prashanth1

感谢您对 NXP MIMXRT 系列产品的关注!

使用外置闪光灯时,需要特定的闪光灯驱动程序。请检查闪存驱动程序是否已正确加载到 IDE 中:(我的屏幕截图以 RT1170 为例;RT1040 的操作过程类似。)

Gavin_Jia_0-1786341203390.pngGavin_Jia_0-1786341203390.png

此致,
加文


Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

你好@Prashanth1

根据所描述的现象,最可能的原因是闪存中之前存在脏数据/图像。无论是错误的 FCB 标头还是导致 MCU 在执行时进入错误状态的映像,此类问题都可能导致尝试重新刷写映像时失败。在这种情况下,标准的恢复方法是进入串行下载模式。您可能需要参考这篇文章: https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/RT-board-recovery-for-debugger-connect...

关于闪存加载器的选择,您只需在 IDE 的“闪存”行中选择相应的闪存驱动程序即可。*.scp 文件随 SDK 提供,用于预配置链路服务器;您可以进入该文件了解每一行命令的更多信息。

此致,
加文

Tags (1)
No ratings
Version history
Last update:
‎08-14-2026 05:03 AM
Updated by: