本文作者: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”(添加配置存儲器器件)來完成此操作。

選中 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 的文件而導致燒錄失敗的示例。


(2) U-Boot log 日志

(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 > 閃存燒錄)

“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 分區的示例。

使用 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。

下面顯示了在 eMMC 器件的 RAW Boot 分區 1 中燒錄啟動鏡像的示例。
在 XSCT 終端上,使用以下命令將啟動鏡像寫入 DDR:
xsct% targets -set -nocase -filter {name =~ "Versal *"}xsct% dow -data -force BOOT.bin 0x70000000

在 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 中的扇區

將啟動模式切換至 eMMC 并通過給開發板掉電并重新上電或者發出 POR 來復位系統。以下提供了將啟動模式更改為 eMMC 的腳本。它對 versal_change_boot_mode.tcl 作了些許修改。

5.以 eMMC 模式啟動
此時,閃存燒錄已經過調試,您可以相信閃存已燒錄完成并且已準備好啟動。
首先,將啟動模式切換至 eMMC (0110)。建議更改物理 MODE 管腳。您也可以使用以下腳本來將啟動模式強制更改為 eMMC。

隨后,您可給系統上電,這樣 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 硬件管理器寄存器列表:


在此 BootROM 故障示例中,BOOTROM FIRST ERROR 是十六進制 0x22b。
請參閱該表格,發生的錯誤如下。

BootROM 錯誤可能與硬件問題(如電源)有關。請務必遵循上述步驟中的所有要求以及PDM 工具中的建議來進行操作。
PDM 工具:
https://www.amd.com/zh-cn/products/software/adaptive-socs-and-fpgas/power-design-manager.html
場景 2:閃存燒錄操作中途中止,從 eMMC 啟動


PLM 錯誤
XXXX - 重大錯誤代碼 - xplmi_status.h 中定義的 PLM/LOADER/XPLMI 錯誤代碼。
場景 3:eMMC 閃存中未燒錄任何鏡像。
UART 控制臺:

在以上 PLM 錯誤示例中,PLM MAJOR ERROR 是十六進制 0x31D。請參閱代碼,發生的錯誤如下。

如果遇到 PLM 錯誤,通常表示硬件正常。如果您使用 PetaLinux 來開發嵌入式操作系統組件,并且錯誤發生在 ATF、U-Boot 或 Linux 中,那么最好調查一下 PetaLinux 組件,可能會有所幫助。如需了解更多信息,請參閱 UG1144。
7.結論
本篇博文中提供的指導信息演示了一種全面的方法用于理解、配置 Versal 中的 eMMC 燒錄/啟動流程并對其進行故障排除。
-
amd
+關注
關注
25文章
5686瀏覽量
140004 -
閃存
+關注
關注
16文章
1900瀏覽量
117299 -
emmc
+關注
關注
7文章
263瀏覽量
56026 -
燒錄
+關注
關注
8文章
317瀏覽量
37101 -
Versal
+關注
關注
1文章
175瀏覽量
8479
原文標題:開發者分享 | AMD Versal? 自適應 SoC:eMMC 燒錄/啟動調試檢查表(下)
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
在AMD Versal自適應SoC上使用QEMU+協同仿真示例
使用Aurora 6466b協議實現AMD UltraScale+ FPGA與AMD Versal自適應SoC的對接
【ALINX 技術分享】AMD Versal AI Edge 自適應計算加速平臺之 Versal 介紹(2)
AMD Versal自適應SoC內置自校準的工作原理
AMD率先推出符合DisplayPort? 2.1 8K視頻標準的FPGA和自適應SoC
AMD Versal自適應SoC CPM5 QDMA的Tandem PCIe啟動流程介紹
AMD Versal自適應SoC器件Advanced Flow概覽(上)
AMD Versal自適應SoC器件Advanced Flow概覽(下)
AMD Versal自適應SoC中eMMC燒錄/啟動調試檢查表(下)
評論