本文作者:AMD 工程師 Sowmya Ramakrishnan
本文鏈接上一篇文章開(kāi)發(fā)者分享 | AMD Versal 自適應(yīng) SoC:eMMC 燒錄/啟動(dòng)調(diào)試檢查表(上)
4.eMMC 器件燒錄
有多種受支持的方式可用于燒錄 eMMC 器件,包括使用 AMD Vivado IDE、使用 AMD Vitis GUI 或使用 U-Boot。
在通過(guò) Vivado 或 Vitis 燒錄 eMMC 之前不需要進(jìn)行分區(qū),分區(qū)由該工具在后臺(tái)完成。
如果希望在燒錄之前手動(dòng)對(duì)器件進(jìn)行分區(qū),可以通過(guò) Linux 來(lái)完成。下方提供了一個(gè)示例:
https://adaptivesupport.amd.com/s/article/000035921?language=zh_CN#format
Vivado 和 Vitis 使用相同實(shí)用工具 (program_flash) 來(lái)燒錄 eMMC 器件。
a. Vivado IDE
燒錄前,建議在 JTAG 模式下從零開(kāi)始重新上電啟動(dòng) (0000)。如果無(wú)法更改物理啟動(dòng)模式,則可運(yùn)行《器件燒錄/啟動(dòng)調(diào)試檢查表》中所談及的 versal_change_boot_mode.tcl 來(lái)通過(guò)軟件強(qiáng)制執(zhí)行 JTAG 啟動(dòng)模式。在其他啟動(dòng)模式下進(jìn)行燒錄可能導(dǎo)致意外失敗,AMD 對(duì)此不予支持。
器件燒錄/啟動(dòng)調(diào)試檢查表:
https://adaptivesupport.amd.com/s/article/000033254?language=zh_CN#CheckDeviceStatus
如需了解在 Vivado 中燒錄閃存器件的詳細(xì)步驟,請(qǐng)參閱 UG908 中的“燒錄配置存儲(chǔ)器器件”部分。
UG908:
https://docs.amd.com/r/en-US/ug908-vivado-programming-debugging/Programming-Configuration-Memory-Devices
要觀察燒錄過(guò)程和詳細(xì)日志,請(qǐng)從 Shell 或命令提示符打開(kāi) Vivado(在 Windows 中 -> CMD -> 導(dǎo)航到 Vivado 安裝文件夾 -> 啟動(dòng)二進(jìn)制文件)。Vivado 使用迷你 U-Boot 來(lái)燒錄閃存器件,U-Boot 日志會(huì)顯示在命令提示符窗口中。
Vivado 硬件管理器 GUI 用于添加和燒錄閃存器件,以及檢查啟動(dòng)后目標(biāo)器件的狀態(tài)。
打開(kāi) Vivado 硬件管理器并連接到 AMD Versal 自適應(yīng) SoC 器件。
添加 eMMC 是對(duì)其進(jìn)行燒錄的第一步。通過(guò)右鍵單擊 Versal 器件并選擇“Add Configuration Memory Device”(添加配置存儲(chǔ)器器件)來(lái)完成此操作。

選中 eMMC 閃存,該配置存儲(chǔ)器器件現(xiàn)已添加到硬件目標(biāo)。要繼續(xù)操作,Vivado 器件管理器會(huì)發(fā)出如下提示,詢(xún)問(wèn)您現(xiàn)在是否要對(duì)配置存儲(chǔ)器器件進(jìn)行燒錄:“Do you want to program the configuration memory device now?”。單擊“OK”(確定)以繼續(xù)。

“Files to load”(要加載的文件):此處添加啟動(dòng)鏡像。這些啟動(dòng)鏡像可以使用 Vivado 或 Bootgen/Vitis(如果添加軟件分區(qū))來(lái)創(chuàng)建。
如果文件名不是推薦的“boot.bin”,Vivado 會(huì)發(fā)出警告。
要配置系統(tǒng),就需要“Initialization PDI”(初始化 PDI),隨后該工具才能訪問(wèn)并燒錄閃存。它等同于 AMD Zynq 7000 和 MPSoC 流程中的 FSBL.elf。建議使用小尺寸的簡(jiǎn)單 PDI。用戶(hù)可以使用來(lái)自 Vivado 的 PDI(無(wú)需 Vitis 添加的額外組件)作為初始化 PDI。
“Erase”(擦除):擦除配置存儲(chǔ)器器件的內(nèi)容。
“Blank Check”(空白檢查):檢查配置存儲(chǔ)器器件,確保燒錄前器件中不含數(shù)據(jù)。
“Program”(燒錄):使用所選器件鏡像對(duì)配置存儲(chǔ)器器件進(jìn)行燒錄。
“Verify”(驗(yàn)證):驗(yàn)證配置存儲(chǔ)器器件內(nèi)容與所選器件鏡像是否匹配。
單擊“OK”即可在配置存儲(chǔ)器器件上啟動(dòng)選擇操作。
使用 Vivado 燒錄閃存時(shí)如果遇到錯(cuò)誤該怎么辦?
發(fā)生錯(cuò)誤時(shí),有 3 種日志有助于調(diào)試。
(1)來(lái)自 Vivado Tcl 控制臺(tái)的 log 日志
以下是由于在 RAW Boot 分區(qū)中加載大于 2MB 的文件而導(dǎo)致燒錄失敗的示例。


(2) U-Boot log 日志

(3)該日志來(lái)自于初始化 PDI 中的 PLM
閃存燒錄期間,首先運(yùn)行初始化 PDI。此 PDI 須正確執(zhí)行。如需了解如何收集此日志,請(qǐng)參閱《器件燒錄/啟動(dòng)調(diào)試檢查表》中的描述。
器件燒錄/啟動(dòng)調(diào)試檢查表:
https://adaptivesupport.amd.com/s/article/000033254?language=zh_CN#LoadingPDI
b. Vitis GUI
使用 Vitis GUI 燒錄 eMMC 閃存與上述 Vivado 方法十分相似。同樣建議使用 JTAG 模式執(zhí)行燒錄。同樣需要指定 2 個(gè) PDI 文件,分別在“Image File”(圖像文件)和“Init File”(初始化文件)中指定這些文件,如下所示。如需了解更多詳細(xì)信息,請(qǐng)參閱 UG1400 的“閃存燒錄”部分。
UG1400 :
https://docs.amd.com/r/en-US/ug1400-vitis-embedded/Programming-Flash
打開(kāi) Vitis 工作空間
導(dǎo)航到“Vitis -> Program Flash”(Vitis > 閃存燒錄)

“Image File”(鏡像文件):這是啟動(dòng)鏡像。
“Partition Type”(分區(qū)類(lèi)型):選擇 fat32、raw-boot-1、raw-boot-2 或 raw-user。
“Init File”(初始化文件):提供初始化文件路徑。
“Blank check after erase”(擦除后執(zhí)行空白檢查):該選項(xiàng)將通過(guò)執(zhí)行空白檢查來(lái)驗(yàn)證是否已正確完成擦除操作。它會(huì)讀回內(nèi)容并檢查已擦除區(qū)域是否為空白。
“Verify after Flash”(燒錄后驗(yàn)證):驗(yàn)證操作會(huì)與閃存燒錄操作進(jìn)行交叉檢查。該選項(xiàng)會(huì)讀回閃存內(nèi)容,并與燒錄后的數(shù)據(jù)進(jìn)行交叉檢查。
單擊“Program”(燒錄)并在“Output”(輸出)部分中觀察日志。
以下是燒錄 eMMC 的 FAT32 分區(qū)的示例。

使用 Vitis 燒錄閃存期間如果遇到錯(cuò)誤該怎么辦?
應(yīng)收集以下信息:
迷你 U-Boot log 日志 - Vitis 將自動(dòng)在控制臺(tái)上顯示 U-Boot 日志。
PLM log 日志。如需了解如何收集此日志,請(qǐng)參閱《器件燒錄/啟動(dòng)調(diào)試檢查表》中的描述。
重要:截至目前,2023.2 Vitis 僅支持將 eMMC 分區(qū) 0 燒錄為 FAT32 或 RAW-User。無(wú)法使用 Vitis 燒錄 RAW Boot 分區(qū) 1 和 2。(如果在 GUI 中選擇了 Boot 分區(qū) 1 或 Boot 分區(qū) 2,工具會(huì)自動(dòng)切換到 RAW-User)。此問(wèn)題正在調(diào)查中,因此建議使用 Vivado 或 U-Boot 來(lái)燒錄 eMMC RAW Boot 分區(qū) 1 和 2。
c. U-Boot
U-Boot 也可用于燒錄 eMMC。啟動(dòng)進(jìn)入 U-Boot 后,用戶(hù)可以使用多條 U-Boot 命令來(lái)燒錄器件。這些命令包括 mmc part、mmc erase、mmc write、fatwrite 等。下方提供了一些常見(jiàn)示例。
https://adaptivesupport.amd.com/s/article/000035921?language=zh_CN#commands
啟動(dòng)進(jìn)入 U-Boot。如果采用 AMD 參考板,那么您可使用下方針對(duì)您的工具版本提供的預(yù)構(gòu)建鏡像。如果采用定制開(kāi)發(fā)板,那么您需要構(gòu)建鏡像。建議使用 PetaLinux 工具來(lái)生成鏡像。UG1144 包含有關(guān)如何生成此處使用的 BOOT.BIN 文件的詳細(xì)步驟。
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
請(qǐng)確保器件采用的是 JTAG 啟動(dòng)模式。如果無(wú)法更改物理啟動(dòng)模式,則可運(yùn)行《器件燒錄/啟動(dòng)調(diào)試檢查表》中所談及的 versal_change_boot_mode.tcl 來(lái)通過(guò)軟件強(qiáng)制執(zhí)行 JTAG 啟動(dòng)模式。
器件燒錄/啟動(dòng)調(diào)試檢查表:
https://adaptivesupport.amd.com/s/article/000033254?language=zh_CN#CheckDeviceStatus
連接到終端中的器件 PS COM 端口。在 XSCT 中,導(dǎo)航到正確的目錄,并執(zhí)行以下命令:
xsct% device program BOOT.BIN
您應(yīng)可在 UART 控制臺(tái)終端中看到器件啟動(dòng)進(jìn)入 U-Boot。

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

在 U-Boot 提示符處,執(zhí)行以下命令:
mmc info - 顯示 eMMC 器件信息
part list mmc 0 - 列出 eMMC 器件 0 中的現(xiàn)有分區(qū)
mmc dev 0 0 - 選擇要切換到并對(duì)其進(jìn)行操作的 mmc 器件。在此例中,已選中 mmc 器件 0 和分區(qū) 0
mmc erase 0 0x4000 - 擦除 RAW user 分區(qū)中的扇區(qū)
mmc dev 0 1 - 已選中 mmc 器件 0 和分區(qū) 1
mmc erase 0 0x4000 - 擦除 RAW Boot 分區(qū) 1 中的扇區(qū)
mmc write 70000000 0 - 將指定扇區(qū)從 DRAM 寫(xiě)入 mmc
mmc dev 0 2 - 已選中 mmc 器件 0 和分區(qū) 2
mmc erase 0 0x4000 - 擦除 RAW Boot 分區(qū) 2 中的扇區(qū)

將啟動(dòng)模式切換至 eMMC 并通過(guò)給開(kāi)發(fā)板掉電并重新上電或者發(fā)出 POR 來(lái)復(fù)位系統(tǒng)。以下提供了將啟動(dòng)模式更改為 eMMC 的腳本。它對(duì) versal_change_boot_mode.tcl 作了些許修改。

5.以 eMMC 模式啟動(dòng)
此時(shí),閃存燒錄已經(jīng)過(guò)調(diào)試,您可以相信閃存已燒錄完成并且已準(zhǔn)備好啟動(dòng)。
首先,將啟動(dòng)模式切換至 eMMC (0110)。建議更改物理 MODE 管腳。您也可以使用以下腳本來(lái)將啟動(dòng)模式強(qiáng)制更改為 eMMC。

隨后,您可給系統(tǒng)上電,這樣 Versal 器件將嘗試從 eMMC 啟動(dòng)。
啟動(dòng)期間如果遇到錯(cuò)誤該怎么辦?
提交技術(shù)支持 case 時(shí),請(qǐng)?zhí)峁┮韵滦畔ⅲ@些信息至關(guān)重要:
錯(cuò)誤狀態(tài)日志。可在 Vivado 硬件管理器或 XSCT 中收集這些日志。
JTAG 狀態(tài)日志??稍?Vivado 硬件管理器或 XSCT 中收集這些日志。
PLM 日志。此日志可從 UART 控制臺(tái)或 XSCT 中收集,欲知詳情,請(qǐng)參閱《器件燒錄/啟動(dòng)調(diào)試檢查表》中的描述。
請(qǐng)參閱《器件燒錄/啟動(dòng)調(diào)試檢查表》以獲取錯(cuò)誤狀態(tài)日志和 JTAG 狀態(tài)日志的兩種收集方法的示例。
器件燒錄/啟動(dòng)調(diào)試檢查表:
https://adaptivesupport.amd.com/s/article/000033254?language=zh_CN#CheckDeviceStatus
如需了解有關(guān) JTAG_STATUS 寄存器和 ERROR_STATUS 寄存器的詳細(xì)信息,請(qǐng)參閱 AM011 的“測(cè)試和調(diào)試”章節(jié)。
AM011:
https://docs.amd.com/r/en-US/am011-versal-acap-trm/Test-and-Debug?tocId=S1ymOrXeGoLR023M1PAtYw
識(shí)別啟動(dòng)失敗時(shí)所處的階段非常重要。是 BootROM 執(zhí)行失敗?還是 PLM 執(zhí)行失敗?
請(qǐng)參閱“啟動(dòng)錯(cuò)誤示例”部分,獲取 BootROM/PLM 錯(cuò)誤示例和解碼策略。
https://adaptivesupport.amd.com/s/article/000035928?language=zh_CN#error
如果您當(dāng)前使用的是 AMD 參考板,運(yùn)行下方提供的預(yù)構(gòu)建鏡像可能會(huì)有所幫助。
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842316/Linux+Prebuilt+Images
如果懷疑啟動(dòng)鏡像中的任意分區(qū)損壞,那么對(duì)可疑分區(qū)添加校驗(yàn)和可能會(huì)有所幫助。
下方提供了 eMMC 啟動(dòng)期間常見(jiàn)的 BootROM 和 PLM 錯(cuò)誤的參考資料 。
https://adaptivesupport.amd.com/s/article/000035921?language=zh_CN#error
6.啟動(dòng)錯(cuò)誤示例
BootROM 和 PLM 錯(cuò)誤的示例及其解碼方法:
BootROM 錯(cuò)誤
請(qǐng)參閱 AM011 中的“BootROM 錯(cuò)誤代碼表”參考資料來(lái)進(jìn)行錯(cuò)誤解碼。
AM011:
https://docs.amd.com/r/en-US/am011-versal-acap-trm/BootROM-Error-Code-Table
場(chǎng)景 1:未連接 eMMC 啟動(dòng)模塊,以 eMMC 模式啟動(dòng)。
Vivado 硬件管理器寄存器列表:


在此 BootROM 故障示例中,BOOTROM FIRST ERROR 是十六進(jìn)制 0x22b。
請(qǐng)參閱該表格,發(fā)生的錯(cuò)誤如下。

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


PLM 錯(cuò)誤
XXXX - 重大錯(cuò)誤代碼 - xplmi_status.h 中定義的 PLM/LOADER/XPLMI 錯(cuò)誤代碼。
場(chǎng)景 3:eMMC 閃存中未燒錄任何鏡像。
UART 控制臺(tái):

在以上 PLM 錯(cuò)誤示例中,PLM MAJOR ERROR 是十六進(jìn)制 0x31D。請(qǐng)參閱代碼,發(fā)生的錯(cuò)誤如下。

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