当前位置:首页 > 财经频道 > 正文内容

AMD Versal自适应SoC中eMMC烧录/启动调试检查表(下)

聚亿千财2026-03-10财经频道4168

本文作者:AMD 工程师 Sowmya Ramakrishnan

本文链接上一篇文章开发者分享 | AMD Versal 自适应 SoC:eMMC 烧录/启动调试检查表(上)

4.eMMC 器件烧录

有多种受支持的方式可用于烧录 eMMC 器件,包括使用 AMD Vivado IDE、使用 AMD Vitis GUI 或使用 U-Boot。

在通过 Vivado 或 Vitis 烧录 eMMC 之前不需要进行分区,分区由该工具在后台完成。

如果希望在烧录之前手动对器件进行分区,可以通过 Linux 来完成。下方提供了一个示例:

https://adaptivesupport.amd.com/s/article/000035921?language=zh_CN#format

Vivado 和 Vitis 使用相同实用工具 (program_flash) 来烧录 eMMC 器件。

a. Vivado IDE

烧录前,建议在 JTAG 模式下从零开始重新上电启动 (0000)。如果无法更改物理启动模式,则可运行《器件烧录/启动调试检查表》中所谈及的 versal_change_boot_mode.tcl 来通过软件强制执行 JTAG 启动模式。在其他启动模式下进行烧录可能导致意外失败,AMD 对此不予支持。

器件烧录/启动调试检查表:

https://adaptivesupport.amd.com/s/article/000033254?language=zh_CN#CheckDeviceStatus

如需了解在 Vivado 中烧录闪存器件的详细步骤,请参阅 UG908 中的“烧录配置存储器器件”部分。

UG908:

https://docs.amd.com/r/en-US/ug908-vivado-programming-debugging/Programming-Configuration-Memory-Devices

要观察烧录过程和详细日志,请从 Shell 或命令提示符打开 Vivado(在 Windows 中 -> CMD -> 导航到 Vivado 安装文件夹 -> 启动二进制文件)。Vivado 使用迷你 U-Boot 来烧录闪存器件,U-Boot 日志会显示在命令提示符窗口中。

Vivado 硬件管理器 GUI 用于添加和烧录闪存器件,以及检查启动后目标器件的状态。

打开 Vivado 硬件管理器并连接到 AMD Versal 自适应 SoC 器件。

添加 eMMC 是对其进行烧录的第一步。通过右键单击 Versal 器件并选择“Add Configuration Memory Device”(添加配置存储器器件)来完成此操作。

efe333c4-1883-11f1-90a1-92fbcf53809c.png

选中 eMMC 闪存,该配置存储器器件现已添加到硬件目标。要继续操作,Vivado 器件管理器会发出如下提示,询问您现在是否要对配置存储器器件进行烧录:“Do you want to program the configuration memory device now?”。单击“OK”(确定)以继续。

“Files to load”(要加载的文件):此处添加启动镜像。这些启动镜像可以使用 Vivado 或 Bootgen/Vitis(如果添加软件分区)来创建。

如果文件名不是推荐的“boot.bin”,Vivado 会发出警告。

要配置系统,就需要“Initialization PDI”(初始化 PDI),随后该工具才能访问并烧录闪存。它等同于 AMD Zynq 7000 和 MPSoC 流程中的 FSBL.elf。建议使用小尺寸的简单 PDI。用户可以使用来自 Vivado 的 PDI(无需 Vitis 添加的额外组件)作为初始化 PDI。

“Erase”(擦除):擦除配置存储器器件的内容。

“Blank Check”(空白检查):检查配置存储器器件,确保烧录前器件中不含数据。

“Program”(烧录):使用所选器件镜像对配置存储器器件进行烧录。

“Verify”(验证):验证配置存储器器件内容与所选器件镜像是否匹配。

单击“OK”即可在配置存储器器件上启动选择操作。

使用 Vivado 烧录闪存时如果遇到错误该怎么办?

发生错误时,有 3 种日志有助于调试。

(1)来自 Vivado Tcl 控制台的 log 日志

以下是由于在 RAW Boot 分区中加载大于 2MB 的文件而导致烧录失败的示例。

f0bd0374-1883-11f1-90a1-92fbcf53809c.png

(2) U-Boot log 日志

f1828400-1883-11f1-90a1-92fbcf53809c.png

(3)该日志来自于初始化 PDI 中的 PLM

闪存烧录期间,首先运行初始化 PDI。此 PDI 须正确执行。如需了解如何收集此日志,请参阅《器件烧录/启动调试检查表》中的描述。

器件烧录/启动调试检查表:

https://adaptivesupport.amd.com/s/article/000033254?language=zh_CN#LoadingPDI

b. Vitis GUI

使用 Vitis GUI 烧录 eMMC 闪存与上述 Vivado 方法十分相似。同样建议使用 JTAG 模式执行烧录。同样需要指定 2 个 PDI 文件,分别在“Image File”(图像文件)和“Init File”(初始化文件)中指定这些文件,如下所示。如需了解更多详细信息,请参阅 UG1400 的“闪存烧录”部分。

UG1400 :

https://docs.amd.com/r/en-US/ug1400-vitis-embedded/Programming-Flash

打开 Vitis 工作空间

导航到“Vitis -> Program Flash”(Vitis > 闪存烧录)

f1ddaba0-1883-11f1-90a1-92fbcf53809c.png

“Image File”(镜像文件):这是启动镜像。

“Partition Type”(分区类型):选择 fat32、raw-boot-1、raw-boot-2 或 raw-user。

“Init File”(初始化文件):提供初始化文件路径。

“Blank check after erase”(擦除后执行空白检查):该选项将通过执行空白检查来验证是否已正确完成擦除操作。它会读回内容并检查已擦除区域是否为空白。

“Verify after Flash”(烧录后验证):验证操作会与闪存烧录操作进行交叉检查。该选项会读回闪存内容,并与烧录后的数据进行交叉检查。

单击“Program”(烧录)并在“Output”(输出)部分中观察日志。

以下是烧录 eMMC 的 FAT32 分区的示例。

f242c940-1883-11f1-90a1-92fbcf53809c.png

使用 Vitis 烧录闪存期间如果遇到错误该怎么办?

应收集以下信息:

迷你 U-Boot log 日志 - Vitis 将自动在控制台上显示 U-Boot 日志。

PLM log 日志。如需了解如何收集此日志,请参阅《器件烧录/启动调试检查表》中的描述。

重要:截至目前,2023.2 Vitis 仅支持将 eMMC 分区 0 烧录为 FAT32 或 RAW-User。无法使用 Vitis 烧录 RAW Boot 分区 1 和 2。(如果在 GUI 中选择了 Boot 分区 1 或 Boot 分区 2,工具会自动切换到 RAW-User)。此问题正在调查中,因此建议使用 Vivado 或 U-Boot 来烧录 eMMC RAW Boot 分区 1 和 2。

c. U-Boot

U-Boot 也可用于烧录 eMMC。启动进入 U-Boot 后,用户可以使用多条 U-Boot 命令来烧录器件。这些命令包括 mmc part、mmc erase、mmc write、fatwrite 等。下方提供了一些常见示例。

https://adaptivesupport.amd.com/s/article/000035921?language=zh_CN#commands

启动进入 U-Boot。如果采用 AMD 参考板,那么您可使用下方针对您的工具版本提供的预构建镜像。如果采用定制开发板,那么您需要构建镜像。建议使用 PetaLinux 工具来生成镜像。UG1144 包含有关如何生成此处使用的 BOOT.BIN 文件的详细步骤。

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842316/Linux+Prebuilt+Images

UG1144:

https://docs.amd.com/r/en-US/ug1144-petalinux-tools-reference-guide/Setting-Up-Your-Environment

请确保器件采用的是 JTAG 启动模式。如果无法更改物理启动模式,则可运行《器件烧录/启动调试检查表》中所谈及的 versal_change_boot_mode.tcl 来通过软件强制执行 JTAG 启动模式。

器件烧录/启动调试检查表:

https://adaptivesupport.amd.com/s/article/000033254?language=zh_CN#CheckDeviceStatus

连接到终端中的器件 PS COM 端口。在 XSCT 中,导航到正确的目录,并执行以下命令:

xsct% device program BOOT.BIN

您应可在 UART 控制台终端中看到器件启动进入 U-Boot。

f2a9b754-1883-11f1-90a1-92fbcf53809c.png

下面显示了在 eMMC 器件的 RAW Boot 分区 1 中烧录启动镜像的示例。

在 XSCT 终端上,使用以下命令将启动镜像写入 DDR

xsct% targets -set -nocase -filter {name =~ "Versal *"}xsct% dow -data -force BOOT.bin 0x70000000

f3008b74-1883-11f1-90a1-92fbcf53809c.png

在 U-Boot 提示符处,执行以下命令:

mmc info - 显示 eMMC 器件信息

part list mmc 0 - 列出 eMMC 器件 0 中的现有分区

mmc dev 0 0 - 选择要切换到并对其进行操作的 mmc 器件。在此例中,已选中 mmc 器件 0 和分区 0

mmc erase 0 0x4000 - 擦除 RAW user 分区中的扇区

mmc dev 0 1 - 已选中 mmc 器件 0 和分区 1

mmc erase 0 0x4000 - 擦除 RAW Boot 分区 1 中的扇区

mmc write 70000000 0 - 将指定扇区从 DRAM 写入 mmc

mmc dev 0 2 - 已选中 mmc 器件 0 和分区 2

mmc erase 0 0x4000 - 擦除 RAW Boot 分区 2 中的扇区

f35bf78e-1883-11f1-90a1-92fbcf53809c.png

将启动模式切换至 eMMC 并通过给开发板掉电并重新上电或者发出 POR 来复位系统。以下提供了将启动模式更改为 eMMC 的脚本。它对 versal_change_boot_mode.tcl 作了些许修改。

f3bd2126-1883-11f1-90a1-92fbcf53809c.png

5.以 eMMC 模式启动

此时,闪存烧录已经过调试,您可以相信闪存已烧录完成并且已准备好启动。

首先,将启动模式切换至 eMMC (0110)。建议更改物理 MODE 管脚。您也可以使用以下脚本来将启动模式强制更改为 eMMC。

f424a0c6-1883-11f1-90a1-92fbcf53809c.png

随后,您可给系统上电,这样 Versal 器件将尝试从 eMMC 启动。

启动期间如果遇到错误该怎么办?

提交技术支持 case 时,请提供以下信息,这些信息至关重要:

错误状态日志。可在 Vivado 硬件管理器或 XSCT 中收集这些日志。

JTAG 状态日志。可在 Vivado 硬件管理器或 XSCT 中收集这些日志。

PLM 日志。此日志可从 UART 控制台或 XSCT 中收集,欲知详情,请参阅《器件烧录/启动调试检查表》中的描述。

请参阅《器件烧录/启动调试检查表》以获取错误状态日志和 JTAG 状态日志的两种收集方法的示例。

器件烧录/启动调试检查表:

https://adaptivesupport.amd.com/s/article/000033254?language=zh_CN#CheckDeviceStatus

如需了解有关 JTAG_STATUS 寄存器和 ERROR_STATUS 寄存器的详细信息,请参阅 AM011 的“测试和调试”章节。

AM011:

https://docs.amd.com/r/en-US/am011-versal-acap-trm/Test-and-Debug?tocId=S1ymOrXeGoLR023M1PAtYw

识别启动失败时所处的阶段非常重要。是 BootROM 执行失败?还是 PLM 执行失败?

请参阅“启动错误示例”部分,获取 BootROM/PLM 错误示例和解码策略。

https://adaptivesupport.amd.com/s/article/000035928?language=zh_CN#error

如果您当前使用的是 AMD 参考板,运行下方提供的预构建镜像可能会有所帮助。

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842316/Linux+Prebuilt+Images

如果怀疑启动镜像中的任意分区损坏,那么对可疑分区添加校验和可能会有所帮助。

下方提供了 eMMC 启动期间常见的 BootROM 和 PLM 错误的参考资料 。

https://adaptivesupport.amd.com/s/article/000035921?language=zh_CN#error

6.启动错误示例

BootROM 和 PLM 错误的示例及其解码方法:

BootROM 错误

请参阅 AM011 中的“BootROM 错误代码表”参考资料来进行错误解码。

AM011:

https://docs.amd.com/r/en-US/am011-versal-acap-trm/BootROM-Error-Code-Table

场景 1:未连接 eMMC 启动模块,以 eMMC 模式启动。

Vivado 硬件管理器寄存器列表:

f487f1f8-1883-11f1-90a1-92fbcf53809c.png

f4e3433c-1883-11f1-90a1-92fbcf53809c.png

在此 BootROM 故障示例中,BOOTROM FIRST ERROR 是十六进制 0x22b。

请参阅该表格,发生的错误如下。

f539a63c-1883-11f1-90a1-92fbcf53809c.png

BootROM 错误可能与硬件问题(如电源)有关。请务必遵循上述步骤中的所有要求以及PDM 工具中的建议来进行操作。

PDM 工具:

https://www.amd.com/zh-cn/products/software/adaptive-socs-and-fpgas/power-design-manager.html

场景 2:闪存烧录操作中途中止,从 eMMC 启动

f5951dbe-1883-11f1-90a1-92fbcf53809c.png

f5f5045e-1883-11f1-90a1-92fbcf53809c.png

PLM 错误

XXXX - 重大错误代码 - xplmi_status.h 中定义的 PLM/LOADER/XPLMI 错误代码。

场景 3:eMMC 闪存中未烧录任何镜像。

UART 控制台:

f64f4b1c-1883-11f1-90a1-92fbcf53809c.png

在以上 PLM 错误示例中,PLM MAJOR ERROR 是十六进制 0x31D。请参阅代码,发生的错误如下。

f6afb650-1883-11f1-90a1-92fbcf53809c.png

如果遇到 PLM 错误,通常表示硬件正常。如果您使用 PetaLinux 来开发嵌入式操作系统组件,并且错误发生在 ATF、U-Boot 或 Linux 中,那么最好调查一下 PetaLinux 组件,可能会有所帮助。如需了解更多信息,请参阅 UG1144。

7.结论

本篇博文中提供的指导信息演示了一种全面的方法用于理解、配置 Versal 中的 eMMC 烧录/启动流程并对其进行故障排除。