NXP MCU 技术论坛
直播中

安立路

9年用户 886经验值
私信 关注
[问答]

从emmc boot-partition引导LS1043a遇到的疑问求解

我们正在从 eMMC 启动 LS1043a。
这也适用于 user 分区。
是否可以从启动分区 1 (boot0) 或启动分区 2 (boot1) 启动?如果是这样,如何做到这一点?
无论你是使用 “mmc bootpart enable 1 1 /dev/mmcblk0” 激活 boot0,还是使用 mmc bootpart enable 2 1 /dev/mmcblk0 激活 boot1,它总是从用户分区启动。

回帖(1)

戚歆敦

2025-3-28 18:12:25

根据您描述的情况,在LS1043a上从eMMC的boot0/boot1启动需要多环节配合。以下是分步解决方案:




1. 确认硬件启动模式配置


LS1043a通过CFG_SRCBOOT[4:0]引脚选择启动介质和分区。需确保:



  • CFG_SRCBOOT[4:1]设置为0b1010(eMMC启动)。

  • CFG_SRCBOOT[0]选择启动分区:

    • 0: 用户分区

    • 1: boot0/boot1(需结合EXT_CSD配置)



操作建议:检查硬件电路或参考设计,确认CFG_SRCBOOT引脚配置正确。




2. 配置eMMC的EXT_CSD寄存器


通过mmc bootpart命令设置启动分区:


# 启用boot0,下次启动生效(需断电重启)
mmc bootpart enable 1 1 /dev/mmcblk0

# 启用boot1,下次启动生效
mmc bootpart enable 2 1 /dev/mmcblk0

验证配置


mmc extcsd read /dev/mmcblk0 | grep BOOT_PARTITION

输出应包含BOOT_PARTITION_ENABLE: [PARTITION_ACCESS],确认分区已启用。




3. 将启动镜像写入boot分区


确保U-Boot等启动镜像正确写入boot0/boot1:


# 切换到boot0分区(示例)
mmc dev 0 1

# 将镜像写入boot0(假设镜像在内存地址0x80000000,大小1MB)
mmc write 0x80000000 0x0 0x800

注意:使用mmc dev切换分区后,需通过mmc partconf或重启使配置生效。




4. 配置U-Boot环境变量


在U-Boot中设置正确的启动命令:


# 指定从当前激活的boot分区启动
setenv bootcmd 'mmc dev 0; mmc read ${loadaddr} 0 0x800; bootm ${loadaddr}'
saveenv



5. 完整断电重启


EXT_CSD配置需断电生效



  • 执行mmc bootpart后,完全断电再上电,而非软复位。




6. 排查硬件设计


若以上步骤无效,需检查:



  • eMMC的VCC/VCCQ电压是否匹配LS1043a要求。

  • eMMC的CLK/DATA信号完整性(高频干扰可能导致启动失败)。

  • PCB布线是否符合eMMC高速信号规范。




总结



  • 关键步骤:硬件启动引脚配置 → 设置EXT_CSD → 写入镜像 → 断电重启。

  • 典型错误:忽略CFG_SRCBOOT引脚配置或忘记断电重启。

  • 调试工具:通过U-Boot的mmc命令族和示波器信号抓取验证硬件状态。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分