NXP MCU 技术论坛
直播中

乐骞添

8年用户 1083经验值
私信 关注
[问答]

如何从eMMC启动分区使用NXP MIMXRT595-EVK?

我目前正在处理从eMMC 启动分区使用 NXP MIMXRT595-EVK。根据 i.MX RT500 低功耗跨界 MCU 参考手册,特别是第 18.4.1.2 节(eMMC 启动)和第 18.6.2 节(eMMC 通过 uSDHC),我可以从用户分区成功引导.但是,我遇到了尝试从引导分区 1 或 2 引导时出现问题。
我已经搜索了论坛,但在 RT500 上没有找到与此问题相关的解决方案。
问题详情:
预期行为:系统应该能够从 eMMC 启动分区 1、启动分区 2 或用户数据分区启动。
实际行为:系统只从 user 分区引导,而且 BootROM 似乎总是试图从那里读取引导映像,而忽略引导分区。
重现步骤:
(根据用户手册的第 18.4.1.2 节和第 18.6.2 节)
1. 将 ISP pin 设置为 USB-HID ISP 模式。
2. 使用 blhost 编写启动配置和镜像。
3. 将 ISP 引脚更改为 eMMC 启动模式并启动板子。
调试尝试:
1. 编写配置和引导映像后,我使用evkmimxrt595_mmccard_interrupt示例检查EXT_CSD寄存器,确认引导配置编写正确。
2. 除了使用 blhost 命令行工具外,我还使用 NXP MCU Boot Utility v6.3.0 进行了测试,但结果保持不变。
其他信息:
开发环境:MCUXpresso IDE v24.9.5
SDK 版本:SDK_2_14_0_EVK-MIMXRT595
板版本:NXP MIMXRT595-EVK (SCH-45800 REV D3)
问题:
从不同于用户分区的 eMMC 引导分区是否需要任何其他步骤?
我非常感谢任何有助于解决此问题的指导或见解。提前感谢您的时间和支持!

回帖(1)

elecfans

2025-3-26 17:59:36

要解决从eMMC启动分区引导NXP MIMXRT595-EVK的问题,请按照以下步骤进行排查和修复:




1. 确认BOOT_CFG配置



  • 寄存器设置:根据参考手册第18.4.1.2节,检查BOOT_CFG寄存器,确保其值选择的是启动分区(如分区1或2),而非用户分区。

    • 通过熔丝位(eFUSE)或启动时的GPIO引脚(如BOOT_MODE0/1)配置BOOT_CFG。例如,设置BOOT_CFG[7:6]=01选择启动分区1。


  • 工具验证:使用NXP的blhostMCUBootUtility工具确认启动模式配置。




2. 分区切换与激活



  • 分区切换命令:在写入镜像到启动分区前,需通过mmc命令或eMMC控制器发送CMD6切换至目标启动分区:
    # 在Ubuntu或通过调试终端执行
    sudo mmc bootpart enable 1 1  # 启用启动分区1,大小为默认

  • 分区权限:确保启动分区的访问权限已启用(写保护未开启)。




3. 镜像格式与烧录



  • 镜像要求:BootROM要求镜像包含IVT(Image Vector Table)DCD(Device Configuration Data)Bin文件。使用NXP的elftosb工具生成正确的启动镜像。

  • 烧录到正确位置

    • 将镜像烧录到启动分区的起始扇区(例如,分区1的偏移量0)。

    • 使用dd命令或专用工具(如uuu)写入:
      sudo dd if=image.bin of=/dev/mmcblkXboot0 bs=512 seek=0





4. eMMC初始化配置



  • 总线模式:根据参考手册18.6.2节,确认uSDHC控制器配置为8位总线宽度高速模式(eMMC 4.5+需支持HS200/HS400)。

  • 时钟频率:确保初始化时时钟频率符合eMMC规格(例如,初始阶段≤400 kHz,后切换至更高频率)。




5. 硬件与信号完整性



  • 引脚检查:确认开发板的eMMC电路连接正确,尤其是CLK、CMD、DAT0-7信号线无短路或断路。

  • 电源稳定性:测量eMMC的VCC/VCCQ电压是否稳定(通常1.8V或3.3V)。




6. 调试BootROM行为



  • JTAG调试:通过JTAG捕获BootROM日志,观察是否尝试读取启动分区:

    • 检查ROM Status Register (ROM_STS)是否有错误码。

    • 确认BootROM输出的调试信息(需启用串口日志)。


  • 寄存器快照:在复位后读取uSDHC和BOOT_CFG相关寄存器,确认配置生效。




7. 参考已知解决方案



  • NXP社区与示例:搜索NXP官方论坛或RT500 SDK中的evkmimxrt595_emmc_loader示例,对比分区配置和启动流程。

  • 更新工具与固件:确保使用最新版本的SDK、MCUBootUtility和eMMC驱动。




8. 分步验证



  1. 用户分区验证:确认用户分区可引导,排除镜像问题。

  2. 切换至启动分区:通过命令临时激活启动分区并测试。

  3. 最小化配置:尝试仅烧录IVT和DCD,逐步排查镜像完整性。




总结


问题可能源于BOOT_CFG配置错误分区未激活镜像烧录位置不正确。建议优先通过硬件调试工具确认BootROM的访问行为,并逐步验证分区配置与镜像格式。如果仍无法解决,建议联系NXP技术支持并提供以下信息:



  • BOOT_CFG寄存器的值

  • eMMC的CID/CSD寄存器内容

  • BootROM的调试输出日志


通过上述步骤,应能定位并解决从eMMC启动分区引导失败的问题。

举报

更多回帖

×
20
完善资料,
赚取积分