2197495_zh-CN

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

2197495_zh-CN

2197495_zh-CN

调试 iMXRT1011 项目时遇到的问题

我有一个基于 imxRT1011 处理器的简单定制板。我使用的是MCUXpresso IDE v24.12 和 Segger J-Link Ultra+。我对 iMXRT 开发很有经验,J-Link 在我的另一个项目中运行良好。

一切开始都很顺利,但不知何时,我失去了调试项目的能力。如果我使用串行启动加载器(通过安全配置工具)安装代码,则代码可以正常运行,但是如果我从调试器中刷新它,它就无法运行。

它似乎在 main() 之前的某个地方崩溃了。有时,我可以在ResetISR()中设置一个断点并步进。在这种情况下,如果我保持单步运行,一切正常,但如果我让它运行,它就会崩溃。有时会直接进入 0xdeadbeee,调试器无能为力。

可想而知,这非常令人沮丧。如有任何建议,我们将不胜感激。


i.MX RT101xRe: Problems debugging iMXRT1011 project

今天早上我又发现了一些奇怪的行为。

我在调用SystemInitHook()之前设置了一个断点。你可以在附图中看到该函数的反汇编过程。

在调用之前,SP 位于 0x20207ff8,这在我们的意料之中。对 SystemInitHook() 的调用是

bl 0x6001220c

如果我用 C 语言进入函数,调试器会在 0x60012210 处停止,SP 仍然是0x20207ff8。函数返回时,SP 也是 0x20207ff8,符合预期。

如果改用指令步进模式进入函数,则会执行 0x6001220c 处的推送指令,将 SP 降至 0x20207ff4。因此,当函数退出和后续代码崩溃时,SP 是错误的。

你能想出造成这种行为差异的原因吗?SystemInitHook() 正确吗?有推力却没有弹力?


Re: Problems debugging iMXRT1011 project

如果我用高效密码学标准(SEC)刷新应用程序,它可以正常运行。如果我连接J-Link Commander,就可以成功停止和起飞。

在 IDE 中,我今天可以在ResetISR() 函数处设置断点。如果我单步执行 SystemInit() 函数,程序会崩溃。如果我单步进入 SystemInit() 函数,执行完该函数后再单步执行 SystemInitHook() 函数,程序也会崩溃。如果我执行同样的操作,直接单步执行 SystemInitHook() 函数,程序就不会崩溃。这就是我所说的,程序行为取决于调试器是单步执行还是单步执行。

堆栈崩溃时的示例:
 
线程 #1 57005(暂停:信号:SIGTRAP:跟踪/断点陷阱)
_vfprintf_r() 在 0x600134a4
0x0

所以看起来它好像跳到了 0x0,但只有在代码自由运行时才会这样,在调试器中单步执行时不会这样。0x0 处没有代码 - ITC 未使用。

重复一遍,这是在 main() 之前,远在调用任何 RTOS 或类似系统之前。它在初始启动代码中崩溃了。


Re: Problems debugging iMXRT1011 project

您好@expertsleepers

谢谢您的澄清!

你刚才提到了这个问题: 有时会直接进入 0xdeadbeee,调试器无能为力。

如果我理解得很清楚这个 deadbee 问题只会出现在调试器上,如果你启动最新的软件,没有调试器,它能正常工作对吗?

如果使用 Segger 的 J-Link 指令器调试最新程序,抛开集成开发环境不谈,您会发现任何问题吗?我指的是连接调试器后使用 go 和 halt 操作。

您能分享一下最新 SW 版本的变化吗? 在监测程序计数器的同时进行分步调试,并堆放 SRAM。我不知道您使用的是否是 RTOS。 检查是否有跳转到无效地址的情况,例如从闪存跳转到 SRAM,反之亦然。

致以最崇高的敬意

迪亚戈


Re: Problems debugging iMXRT1011 project

> 您的意思是,如果您提交回项目的前一阶段,调试是否会开始更好地工作?

是的。但是,在恢复到旧版本之后,我必须使用安全配置工具刷新主板一次,然后调试才会变得可靠。从那以后,我就可以像往常一样从 IDE 闪存了。

如果我回到最新的代码,我可以成功调试一次,但随后的尝试都失败了。

>将项目导入其他工作区或电脑后,是否还会出现此问题?

我在没有安装过的新机器上安装了 IDE v25.6,复制了项目,版本并尝试调试,结果是一样的。


Re: Problems debugging iMXRT1011 project

您好@expertsleepers

感谢您的耐心等待和提供更多信息!

你的意思是,如果将代码提交回项目的先前阶段,调试功能是否会运行得更好?

我想知道如何在我这边复制这个问题。在其他工作区或电脑上导入项目时,会重复出现这个问题吗?

一切顺利

迪亚戈


Re: Problems debugging iMXRT1011 project这是一块非常简单的板,我用来测试一些外围设备。它基本上由 MCU、一个用于 XIP 的 QSPI 闪存、一些 SPI 和 I2C 外围设备以及一个 USB 端口组成。

也许我没有说清楚,在项目达到一定规模之前,项目在调试器下一直运行正常。几天来,我一直在愉快地工作,直到调试器突然开始失灵。

集成开发环境本身在我的另一个项目中继续正常运行,所以我并不担心集成开发环境本身。
Re: Problems debugging iMXRT1011 project

您好@expertsleepers

谢谢您的澄清,是的,我指的是 FCB 文件。

如果问题出在当前的应用程序设置上呢? 我想区分问题出在闪存设置、应用程序设置还是集成开发环境上。

如果您尝试运行 hello world 演示,结果会怎样?使用已在使用的相同 FCB。

能否提供更多有关项目的详细信息?

致以最崇高的敬意

迪亚戈

Re: Problems debugging iMXRT1011 project

我正在使用附件中的文件配置闪光灯。它们是从 SDK 示例中复制的,我检查过它们与我工作项目中的文件完全相同。

两块板上的闪存芯片相同,即华邦 W25Q64JVXGIQ

这些文件是否定义了您所指的"FCB" ?


Re: Problems debugging iMXRT1011 project

您好@expertsleepers

感谢您的联系!

或许是你IDE端的FCB的问题。你看过那份文件了吗?让我解释一下。

使用 SEC 工具时,SEC 工具不会写入图像,而是写入 " 极简主义的 " FCB。使用集成开发环境时,映像包含 FCB(如果我没记错的话是 qspi_config)。是否检查过 FCB/qspi_config 与您的映像匹配?

致以最崇高的敬意

迪亚戈


Re: Problems debugging iMXRT1011 project

为了排除我的自定义板出现问题,我获得了 MIMXRT1010 EVK。EVK 板上的行为是一样的。


Re: Problems debugging iMXRT1011 project

您好@expertsleepers,
我知道问题是在您修改代码后出现的。为了更好地支持您,能否请您分享一下与原始项目相比,您所做的具体修改?
特别是,我对与启动过程相关的任何更改感兴趣,例如:

更新 FCB。
调整内存区域。
是否在 XIP 和非 XIP 模式之间切换。

BR
Habib

Re: Problems debugging iMXRT1011 project

我没有更换 FCB,一直使用 XIP。

我确实更改了内存区域。我在 ResetISR() 中这样做

#define IOMUXC_GPR_GPR16 (*(unsigned int*)0x400AC040)
#define IOMUXC_GPR_GPR17 (*(unsigned int*)0x400AC044)

void ResetISR(void) {
// 禁用中断
__asm volatile ("cpsid i");
__asm volatile ("MSR MSP,%0": :"r" (&_vStackTop) : );

// 重新配置柔性电路
IOMUXC_GPR_GPR17 = 0xE9;
IOMUXC_GPR_GPR16 = IOMUXC_GPR_GPR16 | 0x4;


Re: Problems debugging iMXRT1011 project

你好,@expertsleepers

能否请您检查一下这个应用程序说明是否能帮助您解决问题?

BR
Habib

Re: Problems debugging iMXRT1011 project

在我的项目中,两个预处理器符号都设置为 1。

xip_external_flash=1
xip_boot_header_enable=1

Re: Problems debugging iMXRT1011 project

你好,@expertsleepers

在调试程序之前,能否使用串行下载器配置通过 MCUXpresso 执行一次大规模擦除?
这样做是为了验证已刷新的应用程序没有干扰调试器与 MCU 之间的任何通信。

BR
Habib

Re: Problems debugging iMXRT1011 project

您好@expertsleepers,

问题可能是在执行过程中对 FlexRAM 配置进行了操作,这可能会导致意外错误。因此,要正确使用 FlexRAM,我强烈建议查看本应用说明,其中介绍了如何在 i.MX RT 中使用 FlexRAM。
另一方面,也有可能是你在其他项目中没有使用 FlexRAM,而且配置正确,这不会导致任何问题。

最后,我建议您查看这些社区帖子,它们可能会帮助您解决问题:

使用 MCUXpresso IDE 重新定位代码和数据 - NXP Community

调试器连接问题的 RT 板恢复-恩智浦社区

BR
Habib

Re: Problems debugging iMXRT1011 project

我知道应用程序说明。正如你在我的帖子中看到的那样,我正在按照应用说明的建议,在RESET处理程序开始时更改FlexRAM配置。我的另一个项目也采用了完全相同的方法,一年多来一直运行良好。


Re: Problems debugging iMXRT1011 project

在此期间,我删除了重新分配 FlexRAM 的说明(在我上面的帖子中提到过),从而解除了对自己的封锁。

如果我让 FlexRAM 保持默认分配状态,就可以正常调试。

我重新分配 FlexRAM 的方式有问题吗?我在另一个项目中也是这样做的,而且效果一直很好。


Re: Problems debugging iMXRT1011 project

嗨,@expertsleepers

如果我们根据我提供给您的应用说明查看 IOMUXC_GPR_GPR17 的配置,我可以看到您的配置如下:

Habib_MS_0-1765918625792.pngHabib_MS_0-1765918625792.png

不过,请注意以下几点:

Habib_MS_1-1765918703735.pngHabib_MS_1-1765918703735.png
您是否可以尝试其他配置,以更好地满足您的应用要求并符合说明条件?

BR
Habib





Re: Problems debugging iMXRT1011 project

我会试试的。

您能解释一下,为什么 ROM 要求与此相关吗?既然在更换 FlexRAM 时我的应用程序已经在运行,那么在此之后会有哪些 ROM 代码在运行呢?

我能理解,如果更换熔丝中的 FlexRAM,这会影响启动加载程序。但我不是在更换熔丝,而是在软件中更换 FlexRAM。


Re: Problems debugging iMXRT1011 project

你好,@expertsleepers

您能否尝试将该注释考虑在内,看看是否能解决问题?

另一方面,SDK(25.06 版)提供了一个配置 FlexRAM 的示例,名为 "flex_ram_access",我强烈建议大家分析这个示例,了解其工作原理,以便在代码中复制。
此外,您能否核实第 2.1.1.2 章中提到的要求是否符合我提供给您的应用程序说明中称为 "运行时配置 "的要求?

BR
Habib

Tags (1)
No ratings
Version history
Last update:
‎12-19-2025 02:35 AM
Updated by: