我们正在尝试在自定义硬件上启动用户应用程序。这种定制硬件仅有 FlexSPI2 QSPI 闪存,使用端口 A 上的主引脚组进行连接。闪存设备是美光 MT25QU256ABA。RT1189 (RT1189CVM8C) 上的启动 ROM 无法正确配置内存,启动失败。但是,恩智浦安全配置工具可以成功读取和写入数据。
闪存配置块 (FCB) 是使用安全配置工具创建的:
scarrion_0-1765406289715.png
XIP 启动标头在映像编译本身中被禁用。取而代之的是,安全配置工具被配置为使用从简化用户界面生成的 FCB,使用上面屏幕截图中显示的确切设置。虽然上述截图中没有显示,但"测试连接" 已通过。
此外,当安全配置工具(此后称为 " SPT ")提示配置外部存储器时,处理器和该工具可以成功读取 FlexSPI2 内存。如下图所示。
当用户打开闪存编程器工具时,在弹出窗口中单击 " 是 " 和/或单击 " 配置外部存储器 " 按钮将导致 SPT 使用上面显示的闪存配置模块设置来初始化 FlexSPI2 闪存以进行编程。
scarrion_2-1765407298704.png
以下屏幕截图是在刷新完整应用程序映像(偏移量 0x400 处的 FCB,偏移量 0x1000 处的用户应用程序)后捕获的:
scarrion_1-1765406856412.png
这让我相信闪存配置块是正确的。
RT1180 上的以下熔丝位被烧毁。所有其他熔丝位均为默认值:
BOOT_CFG0 [6] (BT_FUSE_SEL)-> 1b,用于启用从熔丝启动
BOOT_CFG2[7] (FLEXSPI_INSTANCE) -> 1b,用于选择 FlexSPI2(默认为 FlexSPI1)。
将 BOOT_MODE 引脚设置为 000b(用于 " 从内部熔丝启动)会导致 RT1189 没有任何活动。它需要启动到"无限循环" 模式,然后再返回到串行下载器模式,才能再次与它通信。
将 BOOT_MODE 引脚设置为 100b(用于从 FlexSPI " 启动 ")会导致 RT1189 保持 " 卡住 ",但可以被 jLink 调试探测器停止。
尝试使用 BOOT_MODE 100b 从 FlexSPI 启动后暂停时,检查 FlexSPI2 内存区域显示全部为零:
scarrion_3-1765408423980.png
值得注意的是,"all zeroes" 与 RT1189 的 FlexSPI2 存储器区域的默认状态不一致。以下屏幕截图是在未配置外部存储器的情况下启动到串行下载器模式后捕获的:
scarrion_4-1765408718291.png
最后一件事:用户应用程序中 MCUXpresso 示例的链接器脚本已更改为从 FlexSPI2 启动:
scarrion_5-1765408996269.png
注意:截图中的标题显示"0x14000000" ,但"0x04000000" 才是代码中使用的真实值。这是一个错字
这一点在 SPT 中有所体现:
scarrion_6-1765409102906.png
综上所述,我目前的理解是这样的:
我的问题
谢谢
感谢您的回复。
正如原帖所述:
使用逻辑分析器,我们得以确定闪存配置模块很可能由启动 ROM 读取——不久之后,时钟速度从 30 MHz 变为 125 MHz,读取数据通过 SPI 数据线传输。
有没有什么机制可以进一步调试启动ROM或启动顺序?
经过数周的努力,我能够通过链接到 ITCM (0xFFE00000) 而不是 XIP 来启动处理器。但这个主题仍然相关 -- 为什么 FlexSPI2 上的 XIP 无法正常工作?
您好,
在像 RT1189 这样的设备上,它似乎无法从 FlexSPI2 QSPI 闪存启动,这通常源于一些常见的配置区域。以下是潜在问题的详细介绍,以及如何调试启动 ROM 过程以确定根本原因。
参考 AN14589:https://www.nxp.com/docs/en/application-note/AN14589.pdf
1。检查启动实例选择: 需要明确告知启动 ROM 使用 FlexSPI2 而不是默认的 FlexSPI1。 这由 BOOT_CFG2[7] 熔丝或引脚控制。 你需要确保 BOOT_CFG2[7] 设置为 1 才能选择 FlexSPI2 作为启动实例。 仍需要正确设置主启动模式引脚 ( BOOT_MODE[2:0]) 才能从串行 或非 (例如,'100')启动
2.应用程序链接器地址:为 FlexSPI2 制作可启动映像时,必须链接应用程序代码,以便从 FlexSPI2 内存映像运行。FlexSPI2 的起始地址为0x40000000。你需要修改项目的链接器文件,将闪存起始地址(m_flash_start)设置为0x40000000。参考:AN14589 第7页。
3.FCB:启动 ROM 需要在闪存的开头(通常在偏移量 0x400 处)有一个有效的 512 字节配置块,才能正确初始化外部 QSPI 设备。如果此模块缺失、损坏或与您使用的特定闪存芯片不匹配,则启动 ROM 将无法与闪存通信。更多详情,请参阅https://docs.mcuxpresso.nxp.com/secure/latest/06_processor_specific_workflow.html#preparing-source-i...
看来没有问题。
有关启动 ROM 和启动顺序的信息,请参阅 https://www.nxp.com/docs/en/application-note/AN14589.pdf 了解更多详情。
当设备"卡住时",不要将其RESET。例如,使用 JLink/debugger 直接连接到运行中的内核,检查以下寄存器状态:
程序计数器 (PC):
如果 PC 处于 0x2xxxxxxx(ROM 区域),则表示 ROM 仍在运行或陷入无限循环(如等待外设响应)。
如果 PC 指向 0x002xxxxx(OCRAM)或其他 RAM 区域,则 ROM 可能尝试了跳转,但应用程序崩溃了。
如果 PC 指向 0x4000xxx(FlexSPI2 AMBA 区域)并被读取为全零或出现总线错误,则会发生跳转,但是 XIP 访问失败。