TI中文支持网
TI专业的中文技术问题搜集分享网站

AM625: DFU UBOOT下面的EMMC烧录问题

Part Number:AM625

我按照SDK文档,重新编译了dfu的uboot。并且执行相应的dfu命令。

E:\TI_AM62X\DFU_flash\dfu-util\dfu-util.exe -R -a 0 -D tiboot3.bin
E:\TI_AM62X\DFU_flash\dfu-util\dfu-util.exe -R -a 0 -D tispl.bin
E:\TI_AM62X\DFU_flash\dfu-util\dfu-util.exe -R -a 1 -D u-boot.img

能正常启动dfu uboot了。然后进行下一个命令。

setenv dfu_alt_info ${dfu_alt_info_emmc}
dfu 0 mmc 0

在这里之后,理论上就可以进行下一步的烧录flash命令至eMMC 。

..\dfu-util\dfu-util.exe -a tiboot3.bin.raw -D E:\TI_AM62X\sd_uboot\tiboot3.bin –path "1-11" –device ,0451:*
..\dfu-util\dfu-util.exe -a tispl.bin.raw -D E:\TI_AM62X\sd_uboot\tispl.bin –path "1-11" –device ,0451:*
..\dfu-util\dfu-util.exe -a u-boot.img.raw -D E:\TI_AM62X\sd_uboot\u-boot.img –path "1-11" –device ,0451:*
..\dfu-util\dfu-util.exe -a u-env.raw -D E:\TI_AM62X\sd_uboot\uEnv.txt –path "1-11" –device ,0451:*
..\dfu-util\dfu-util.exe -e –device ,0451:* –path "1-11" –alt 0

烧录之后,切到eMMC起不来。(原来eMMC有已烧录过的程序),说明eMMC通过以上步骤后,确实数据被改写了。

然后在uboot cmd里,可以看到mmc part 有分区的。

为了进一步测试,我把mmc 给erase 所有块 。

再重新走一遍的时候,出现了新的问题。

执行dfu 0 mmc 0 的时候,提示mmc part找不到。原因是我确实清空了eMMC。

像这个种情况如何处理,因为后续如果要进行生产烧录,也是烧录到eMMC里进行启动的。

貌似还没有找到sdk里介绍eMMC重新格式化的。

就只有这里提到。

=> printenv partitions
partitions=name=rootfs,start=0,size=-,uuid=${uuid_gpt_rootfs}
=>

如何在dfu烧录的时候,能自动格式化分区mmc 。

Shine:

请看下面的user guide重新create a SD卡。https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/09_00_00_03/exports/docs/linux/Overview/Processor_SDK_Linux_create_SD_card.html另外,请看一下下面的DFU workround: 2.5.1. USB Device Firmware Upgrade (DFU) Boot Fixhttps://software-dl.ti.com/processor-sdk-linux/esd/AM62X/09_00_00_03/exports/docs/devices/AM62X/linux/Release_Specific_Workarounds.html#workarounds

,

喜东 梁:

重新create a SD卡。

这个是用于制作SD卡启动的,SD卡启动没有问题。现在主要是做DFU烧录的eMMC。

另外,uboot这块的编译,我们使用的uboot是SDK09自带的ti-u-boot源码。

ti-processor-sdk-linux-am62xx-evm-09.00.00.03-Linux-x86-Install.bin  

重新编译的DFU的uboot,

UBOOT_MACHINE_R5=am62x_evm_r5_usbdfu_defconfig DFU的uboot编译成功。在eMMC被我erase之后,再执行dfu 0 mmc 0 的时候,就提示这个了。Boot Fix里的提到的那个fix,是 但是SDK09自带的uboot的这个文件,和这里不一样。应该是最新版本uboot git上面的是否uboot需要重新获取最新的源码重新编译,意味着,sdk09里的uboot里的dfu功能还不能正常使用?

,

Cherry Zhou:

您好,您的问题我们需要升级到英文论坛看下再给到您答复。

,

喜东 梁:

我重新梳理整理一下需求和调试情况:

需求:通过DFU,把uboot,rootfs等烧录到eMMC,然后再从eMMC启动。

1 SDK版本: SDK09最新版本。

2 uboot的DFU已按操作说明,通过DFU把支持DFU的uboot能刷到板子运行。进入DFU模式。

全新的eMMC芯片是没有分区,因此需要先格式化。

在sdk的doc里,提到

U-Boot # printenv partitions
uuid_disk=${uuid_gpt_disk};name=rootfs,start=2MiB,size=-,uuid=${uuid_gpt_rootfs}
U-Boot # setenv uuid_gpt_disk ...first uuid...
U-Boot # setenv uuid_gpt_rootfs ...second uuid...
U-Boot # gpt write mmc <device num> ${partitions} /* <device num> is device index obtained from mmc list for eMMC */执行之后,再重新看mmc part 

该步骤应该没有问题吧。

然后就可以执行dfu 0 mmc 0 等待烧录。

dfu-util -l 可以看到这些内容。

..\dfu-util\dfu-util.exe -a tiboot3.bin.raw -D E:\TI_AM62X\sd_uboot\tiboot3.bin –device ,0451:*..\dfu-util\dfu-util.exe -a tispl.bin.raw -D E:\TI_AM62X\sd_uboot\tispl.bin –device ,0451:*..\dfu-util\dfu-util.exe -a u-boot.img.raw -D E:\TI_AM62X\sd_uboot\u-boot.img –device ,0451:*

执行上面几个操作。可以看到下载正常。(另外,在sdk09里,看不到可编译sysfw的地方,sdk08里有提到)

执行这个..\dfu-util\dfu-util.exe  -a u-env.raw -D E:\TI_AM62X\sd_uboot\uEnv.txt  –device ,0451:*

当然,可能这一步是非必要的。

板子下面提示这个。看起来是要烧录的这个u-env的地址,超过了这个MMC的块大小了。该eMMC是8G 的

在这一步之后,应该能从eMMC加载boot启动了。暂时先不刷rootfs。只是先验证烧录到eMMC是否成功,是否能正常启动uboot。

其中,在e2e.ti里,也看到相关的文档。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1127618/faq-sk-am62-how-to-flash-emmc-using-usb-dfu-on-am62x-sk-e2

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1247039/processor-sdk-am62x-emmc-failed-to-boot-after-dfu-util-flashing/4723101?tisearch=e2e-sitesearch&keymatch=dfu%20am62#4723101

里面提到的几个fix,pacth里,主要是针对SDK08版本的,uboot-2021的。

现在用的版本是SDK09的,uboot和2023版本的是一样的。不适合文档里提到的sdk08的fix和patch,代码也对不上。

目前在这里就进展不下去了,doc里也没有更多的介绍了。

看起来像是烧录到eMMC里,只是没能boot from eMMC。切换到eMMC的boot上,上电串口没有任何反应。直接在DFU的uboot的cmd里boot 也不能boot from eMMC。

还请帮忙指导一下。(另外,我们的板子,制作SD卡启动,可以从SD启动uboot到文件系统,到命令行登录的。)

mmc的info

=> printenv dfu_alt_infodfu_alt_info=rawemmc raw 0 0x800000 mmcpart 1; rootfs part 0 1; tiboot3.bin.raw raw 0x0 0x400 mmcpart 1; tispl.bin.raw raw 0x400 0x1000 mmcpart 1; u-boot.img.raw raw 0x1400 0x2000 mmcpart 1; u-env.raw raw 0x3400 0x100 mmcpart 1; sysfw.itb.raw raw 0x3600 0x800 mmcpart 1

bootcmd_usb0=devnum=0; run usb_bootbootdelay=2bootdir=/bootbootenvfile=uEnv.txtbootm_size=0x10000000bootpart=1:2bootscript=echo Running bootscript from mmc${mmcdev} …; source ${loadaddr}console=ttyS2,115200n8cpu=armv8default_device_tree=ti/k3-am625-sk.dtbdfu_alt_info=rawemmc raw 0 0x800000 mmcpart 1; rootfs part 0 1; tiboot3.bin.raw raw 0x0 0x400 mmcpart 1; tispl.bin.raw raw 0x400 0x1000 mmcpart 1; u-boot.img.raw raw 0x1400 0x2000 mmcpart 1; u-env.raw raw 0x3400 0x100 mmcpart 1; sysfw.itb.raw raw 0x3600 0x800 mmcpart 1dfu_alt_info_emmc=rawemmc raw 0 0x800000 mmcpart 1; rootfs part 0 1; tiboot3.bin.raw raw 0x0 0x400 mmcpart 1; tispl.bin.raw raw 0x400 0x1000 mmcpart 1; u-boot.img.raw raw 0x1400 0x2000 mmcpart 1; u-env.raw raw 0x3400 0x100 mmcpart 1; sysfw.itb.raw raw 0x3600 0x800 mmcpart 1dfu_alt_info_flashenv=uEnv.txt ram 0x82000000 0x10000000dfu_alt_info_mmc=boot part 1 1; rootfs part 1 2; tiboot3.bin fat 1 1; tispl.bin fat 1 1; u-boot.img fat 1 1; uEnv.txt fat 1 1; sysfw.itb fat 1 1dfu_alt_info_nand=NAND.tiboot3 part 0 1; NAND.tispl part 0 2; NAND.tiboot3.backup part 0 3; NAND.u-boot part 0 4; NAND.u-boot-env part 0 5; NAND.u-boot-env.backup part 0 6; NAND.file-system part 0 7dfu_alt_info_ospi=tiboot3.bin raw 0x0 0x080000; tispl.bin raw 0x080000 0x200000; u-boot.img raw 0x280000 0x400000; u-boot-env raw 0x680000 0x020000; sysfw.itb raw 0x6c0000 0x100000; rootfs raw 0x800000 0x3800000dfu_alt_info_ospi_nand=ospi_nand.tiboot3 part 1; ospi_nand.tispl part 2; ospi_nand.u-boot part 3; ospi_nand.env part 4; ospi_nand.env.backup part 5; ospi_nand.rootfs part 6; ospi_nand.phypattern part 7dfu_alt_info_ram=tispl.bin ram 0x80080000 0x200000; u-boot.img ram 0x81000000 0x400000

,

Cherry Zhou:

好的感谢您的整理,我们的工程师正在查看中,有答复尽快给到您。

,

喜东 梁:

另外,可以帮忙确认一点么。

就是针对eMMC的格式化分区这一块。

正常的MMC启动,理论上是有Boot分区的。

不管是eMMC还是SD,都属于MMC接口这一块。

但是按照文档

3.1.1.4.1. Partitioning eMMC from U-Boot

操作之后,得到的是这样的:

所以初步怀疑是这个因素可能性很大。

SD的制作,是在linux/windows下有工具可以制作和烧录SD卡。因为SD卡可以通过读卡器接主机。

但是eMMC是直接在板子上面的,无法在电脑主机上面直接对eMMC访问和格式化分区。

文档里也没有更多的资料介绍如何在uboot(DFU)下格式化正常的eMMC分区并能启动的。

用那个gpt write mmc这个操作,得到的partitions type是EFI的。但是SD制作启动,得到的type 是DOS的。

在Boot Mode设计里,我们的板子用的是eMMC Boot , B6~B3: 1001b。

3.1.1.4.5. Booting tiboot3.bin, tispl.bin and u-boot.img from eMMC boot partition (For K3 class of SoCs)

The K3 based processors support booting from the eMMC boot partition. The following commands can be used to download tiboot3.bin, tispl.bin and u-boot.img from an SD card and write them to the eMMC boot0 partition at respective addresses.

这里提到可以从SD卡把文件写到eMMC的 boot0 partition。但是全新的eMMC是空白的,没有任何分区的。

好像也没找到文档提到针对全新的eMMC,该怎么在uboot 下操作分区,操作之后,正常的分区应该是长啥样的。感觉这一块的资料比较欠缺。

我们还能想的一种方法是,用SD卡启动的linux系统,然后在当前启动的系统里,对eMMC进行格式化。然后再进行相当的烧录。如果只能这样的话,那就无法做到批量生产的时候,可通过DFU来烧录程序到eMMC。另外我们有的产品规划可能不带SD卡。

,

Cherry Zhou:

您好,

1. 运行 USB-DFU 时,能否分享下在主机(Linux/Windows)和目标串行端口上的完整日志?

2. 请问该问题是在 TI 参考板还是自制板上出现? 

,

喜东 梁:

您好。

通过之前的交流学习,以及重新梳理,反复调试,已经调试出来了,并整理成调试文档。

AM625: 使用USB DFU烧录eMMC启动,可在windows支持DFU。[总结] – 处理器论坛 – 处理器 – E2ETm 设计支持 (ti.com)

https://e2echina.ti.com/support/processors/f/processors-forum/779119/am625-dfu-uboot-emmc

希望对大家有帮助。

,

Cherry Zhou:

您好,

非常感谢您的分享!如您之后还有其他技术问题,欢迎您随时来论坛交流探讨。

赞(0)
未经允许不得转载:TI中文支持网 » AM625: DFU UBOOT下面的EMMC烧录问题
分享到: 更多 (0)