【分享】MPSoC UBoot下SD/eMMC卡的验证

介绍

使用eMMC启动时,可以参考Xilinx的AR 67157烧写,也可以直接使用Vitis烧写。Vitis 2020.2 可以直接烧写eMMC设备。
烧写完成后,最好通过JTAG启动到U-Boot,在U-Boot里验证SD/eMMC的分区表、文件系统、启动文件正常。

测试命令

检查SD/eMMC设备

命令mmcinfo可以打印SD/eMMC设备的设备信息,比如大小等。

ZynqMP> mmcinfo
Device: mmc@ff170000
Manufacturer ID: 3
OEM: 5344
Name: SD08G
Bus Speed: 25000000
Mode: SD Legacy
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.4 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes

检查SD/eMMC分区

命令mmc part可以打印SD/eMMC设备的分区表。

ZynqMP> mmc part

Partition Map for MMC device 0  --   Partition Type: DOS

Part    Start Sector    Num Sectors     UUID            Type
  1     2048            4096000         01bdb37b-01     0c
  2     4098048         11425792        01bdb37b-02     06

检查SD/eMMC的文件系统

命令fatinfo mmc可以打印SD/eMMC设备的文件系统信息。

ZynqMP> fatinfo mmc 0
Interface:  MMC
  Device 0: Vendor: Man 000003 Snr cb70de00 Rev: 1.14 Prod: SD08G▒
            Type: Removable Hard Disk
            Capacity: 7580.0 MB = 7.4 GB (15523840 x 512)
Filesystem: FAT32 "NO NAME    "

检查SD/eMMC的启动文件

命令fatls可以列出SD/eMMC设备中的文件系统的文件信息。
命令fatload可以将SD/eMMC设备中的文件系统的文件的内容,读入到内存。

ZynqMP> fatls mmc 0
            System Volume Information/
    59919   system.dtb.dts
     1718   boot.scr
            vcu/
            config/
    68916   system.dtb
      455   autostart.sh
    40048   xyavta
 20621764   BOOT.BIN
 123220436   image.ub

23 file(s), 4 dir(s)

ZynqMP>  fatload mmc 0 0x800000 BOOT.BIN 0x100000
1048576 bytes read in 115 ms (8.7 MiB/s)
ZynqMP> md.b 0x800000
00800000: 00 00 00 14 00 00 00 14 00 00 00 14 00 00 00 14    ................
00800010: 00 00 00 14 00 00 00 14 00 00 00 14 00 00 00 14    ................
00800020: 66 55 99 aa 58 4e 4c 58 00 00 00 00 00 00 fc ff    fU..XNLX........
00800030: 00 28 00 00 e0 fa 01 00 e0 fa 01 00 10 02 02 00    .(..............

eMMC Card Initialize

eMMC的初始化流程请参考 UG1085的Table 26‐23: eMMC Card Initialize。简要描述如下:

  1. Send CMD0 to card with no response expected (see Table 26-17).
  2. Send CMD1 while card is still busy with power up (perform the following two steps).
  3. Send command (CMD1) with options to host high-capacity support and high-voltage window (see Table 26-17).
  4. Read response 0.
  5. Send CMD2 for CARD ID (see Table 26-17).
  6. Send CMD3. Save relative card address in response 0.
  7. Read card specific data in response.
  8. Read card specific data in response.
  9. Read card specific data in response.
  10. Read card specific data in response.
  11. Send CMD9 with relative card address saved in CMD3 response.
  12. Read card specific data in response.
  13. Read card specific data in response.
  14. Read card specific data in response.

检查SD/eMMC的文件读写

命令fatmkdir可以在SD/eMMC设备中的文件系统的中创建文件夹。
命令fatwrite可以将内存内容写入SD/eMMC设备中的文件系统的文件。

ZynqMP> fatmkdir  mmc 0 ubootdir
ZynqMP> fatls mmc 0
            System Volume Information/
    59919   system.dtb.dts
     1718   boot.scr
            vcu/
            config/
    68916   system.dtb
      455   autostart.sh
    40048   xyavta
 20621764   BOOT.BIN
 123220436   image.ub
            ubootdir/

23 file(s), 5 dir(s)

ZynqMP>  fatwrite mmc 0 0x100000 uboot-mem.bin 0x100000
1048576 bytes written
ZynqMP>  fatload mmc 0 0x800000 uboot-mem.bin 0x100000
1048576 bytes read in 115 ms (8.7 MiB/s)
ZynqMP> cmp.b 0x100000 0x800000 0x100000
Total of 1048576 byte(s) were the same

完整记录

下面是完整记录,有删减。

Xilinx Zynq MP First Stage Boot Loader
Release 2020.1   Dec 15 2020  -  09:29:14
NOTICE:  ATF running on XCZU7EV/silicon v4/RTL5.1 at 0xfffea000
NOTICE:  BL31: v2.2(release):v1.1-5588-g5918e656e
NOTICE:  BL31: Built : 09:27:00, Dec 15 2020


U-Boot 2020.01 (Dec 15 2020 - 09:27:30 +0000)

Model: ZynqMP ZCU106 RevA
Board: Xilinx ZynqMP
DRAM:  4 GiB
PMUFW:  v1.1
EL Level:       EL2
Chip ID:        zu7ev
NAND:  0 MiB
MMC:   mmc@ff170000: 0
In:    serial@ff000000
Out:   serial@ff000000
Err:   serial@ff000000
Bootmode: LVL_SHFT_SD_MODE1
Reset reason:   EXTERNAL
Net:
ZYNQ GEM: ff0e0000, mdio bus ff0e0000, phyaddr 12, interface rgmii-id

Warning: ethernet@ff0e0000 using MAC address from ROM
eth0: ethernet@ff0e0000
Hit any key to stop autoboot:  0
ZynqMP> help
?         - alias for 'help'
base      - print or set address offset
bdinfo    - print Board Info structure
bind      - Bind a device to a driver
blkcache  - block cache diagnostics and control
boot      - boot default, i.e., run 'bootcmd'
bootd     - boot default, i.e., run 'bootcmd'
bootefi   - Boots an EFI payload from memory
bootelf   - Boot from an ELF image in memory
booti     - boot Linux kernel 'Image' format from memory
bootm     - boot application image from memory
bootmenu  - ANSI terminal bootmenu
bootp     - boot image via network using BOOTP/TFTP protocol
bootvx    - Boot vxWorks from an ELF image
clk       - CLK sub-system
cmp       - memory compare
coninfo   - print console devices and information
cp        - memory copy
cpu       - Multiprocessor CPU boot manipulation and release
crc32     - checksum calculation
dfu       - Device Firmware Upgrade
dhcp      - boot image via network using DHCP/TFTP protocol
dm        - Driver model low level access
echo      - echo args to console
editenv   - edit environment variable
env       - environment handling commands
erase     - erase FLASH memory
exit      - exit script
ext2load  - load binary file from a Ext2 filesystem
ext2ls    - list files in a directory (default /)
ext4load  - load binary file from a Ext4 filesystem
ext4ls    - list files in a directory (default /)
ext4size  - determine a file's size
ext4write - create a file in the root directory
false     - do nothing, unsuccessfully
fastboot  - run as a fastboot usb or udp device
fatinfo   - print information about filesystem
fatload   - load binary file from a dos filesystem
fatls     - list files in a directory (default /)
fatmkdir  - create a directory
fatrm     - delete a file
fatsize   - determine a file's size
fatwrite  - write file into a dos filesystem
fdt       - flattened device tree utility commands
flinfo    - print FLASH memory information
fpga      - loadable FPGA image support
fstype    - Look up a filesystem type
go        - start application at address 'addr'
gpio      - query and control gpio pins
gpt       - GUID Partition Table
gzwrite   - unzip and write memory to block device
help      - print command description/usage
i2c       - I2C sub-system
iminfo    - print header information for application image
imxtract  - extract a part of a multi-image
itest     - return true/false on integer compare
led       - manage LEDs
ln        - Create a symbolic link
load      - load binary file from a filesystem
loadb     - load binary file over serial line (kermit mode)
loads     - load S-Record file over serial line
loadx     - load binary file over serial line (xmodem mode)
loady     - load binary file over serial line (ymodem mode)
loop      - infinite loop on address range
ls        - list files in a directory (default /)
lzmadec   - lzma uncompress a memory region
md        - memory display
mdio      - MDIO utility commands
mii       - MII utility commands
mm        - memory modify (auto-incrementing address)
mmc       - MMC sub system
mmcinfo   - display MMC info
mtest     - simple RAM read/write test
mw        - memory write (fill)
nand      - NAND sub-system
nboot     - boot from NAND device
nfs       - boot image via network using NFS protocol
nm        - memory modify (constant address)
part      - disk partition related commands
ping      - send ICMP ECHO_REQUEST to network host
poweroff  - Perform POWEROFF of the device
printenv  - print environment variables
protect   - enable or disable FLASH write protection
pxe       - commands to get and boot from pxe files
random    - fill memory with random pattern
reset     - Perform RESET of the CPU
run       - run commands in an environment variable
save      - save file to a filesystem
scsi      - SCSI sub-system
scsiboot  - boot from SCSI device
setenv    - set environment variables
setexpr   - set environment variable as the result of eval expression
sf        - SPI flash sub-system
showvar   - print local hushshell variables
size      - determine a file's size
sleep     - delay execution for some time
source    - run script from memory
sspi      - SPI utility command
sysboot   - command to get and boot from syslinux files
test      - minimal test like /bin/sh
tftpboot  - boot image via network using TFTP protocol
tftpput   - TFTP put command, for uploading files to a server
thordown  - TIZEN "THOR" downloader
time      - run commands and summarize execution time
timer     - access the system timer
true      - do nothing, successfully
ums       - Use the UMS [USB Mass Storage]
unbind    - Unbind a device from a driver
unzip     - unzip a memory region
usb       - USB sub-system
usbboot   - boot from USB device
version   - print monitor, compiler and linker version
zynqmp    - ZynqMP sub-system
ZynqMP> mmcinfo
Device: mmc@ff170000
Manufacturer ID: 3
OEM: 5344
Name: SD08G
Bus Speed: 25000000
Mode: SD Legacy
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.4 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
ZynqMP> help mmc
mmc - MMC sub system

Usage:
mmc info - display info of the current MMC device
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] - show or set current mmc device [partition]
mmc list - lists available devices
mmc hwpartition [args...] - does hardware partitioning
  arguments (sizes in 512-byte blocks):
    [user [enh start cnt] [wrrel {on|off}]] - sets user data area attributes
    [gp1|gp2|gp3|gp4 cnt [enh] [wrrel {on|off}]] - general purpose partition
    [check|set|complete] - mode, complete set partitioning completed
  WARNING: Partitioning is a write-once setting once it is set to complete.
  Power cycling is required to initialize partitions after set to complete.
mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode
 - Set the BOOT_BUS_WIDTH field of the specified device
mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>
 - Change sizes of boot and RPMB partitions of specified device
mmc partconf dev [boot_ack boot_partition partition_access]
 - Show or change the bits of the PARTITION_CONFIG field of the specified device
mmc rst-function dev value
 - Change the RST_n_FUNCTION field of the specified device
   WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values.
mmc setdsr <value> - set DSR register value

ZynqMP> mmc part

Partition Map for MMC device 0  --   Partition Type: DOS

Part    Start Sector    Num Sectors     UUID            Type
  1     2048            4096000         01bdb37b-01     0c
  2     4098048         11425792        01bdb37b-02     06
  
ZynqMP> fatinfo mmc 0
Interface:  MMC
  Device 0: Vendor: Man 000003 Snr cb70de00 Rev: 1.14 Prod: SD08G▒
            Type: Removable Hard Disk
            Capacity: 7580.0 MB = 7.4 GB (15523840 x 512)
Filesystem: FAT32 "NO NAME    "

ZynqMP> fatls mmc 0
            System Volume Information/
    59919   system.dtb.dts
     1718   boot.scr
            vcu/
            config/
    68916   system.dtb
      455   autostart.sh
    40048   xyavta
 20621764   BOOT.BIN
 123220436   image.ub

23 file(s), 4 dir(s)

ZynqMP> fatmkdir  mmc 0 ubootdir
ZynqMP> fatls mmc 0
            System Volume Information/
    59919   system.dtb.dts
     1718   boot.scr
            vcu/
            config/
    68916   system.dtb
      455   autostart.sh
    40048   xyavta
 20621764   BOOT.BIN
 123220436   image.ub
            ubootdir/

23 file(s), 5 dir(s)

ZynqMP>  fatload mmc 0 0x800000 BOOT.BIN 0x100000
1048576 bytes read in 115 ms (8.7 MiB/s)
ZynqMP> md.l 0x800000
00800000: 14000000 14000000 14000000 14000000    ................
00800010: 14000000 14000000 14000000 14000000    ................
00800020: aa995566 584c4e58 00000000 fffc0000    fU..XNLX........
00800030: 00002800 0001fae0 0001fae0 00020210    .(..............
00800040: 00020210 00000800 fd163261 00000000    ........a2......
00800050: 00000000 00000000 00000000 00000000    ................
00800060: 00000000 00000000 00000000 01000020    ............ ...
00800070: 00000000 00000000 00000000 00000000    ................
00800080: 00000000 00000000 00000000 00000000    ................
00800090: 00000000 00000000 000008c0 00001100    ................
008000a0: 00000000 00000000 00000000 00000000    ................
008000b0: 00000000 00000000 ffffffff 00000000    ................
008000c0: ffffffff 00000000 ffffffff 00000000    ................
008000d0: ffffffff 00000000 ffffffff 00000000    ................
008000e0: ffffffff 00000000 ffffffff 00000000    ................
008000f0: ffffffff 00000000 ffffffff 00000000    ................

ZynqMP> md.b 0x800000
00800000: 00 00 00 14 00 00 00 14 00 00 00 14 00 00 00 14    ................
00800010: 00 00 00 14 00 00 00 14 00 00 00 14 00 00 00 14    ................
00800020: 66 55 99 aa 58 4e 4c 58 00 00 00 00 00 00 fc ff    fU..XNLX........
00800030: 00 28 00 00 e0 fa 01 00 e0 fa 01 00 10 02 02 00    .(..............

ZynqMP>  fatwrite mmc 0 0x100000 uboot-mem.bin 0x100000
1048576 bytes written

ZynqMP> help fatload
fatload - load binary file from a dos filesystem

Usage:
fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
    - Load binary file 'filename' from 'dev' on 'interface'
      to address 'addr' from dos filesystem.
      'pos' gives the file position to start loading from.
      If 'pos' is omitted, 0 is used. 'pos' requires 'bytes'.
      'bytes' gives the size to load. If 'bytes' is 0 or omitted,
      the load stops on end of file.
      If either 'pos' or 'bytes' are not aligned to
      ARCH_DMA_MINALIGN then a misaligned buffer warning will
      be printed and performance will suffer for the load.
ZynqMP>  fatload mmc 0 0x800000 uboot-mem.bin 0x100000
1048576 bytes read in 115 ms (8.7 MiB/s)
ZynqMP> cmp.b 0x100000 0x800000 0x100000
Total of 1048576 byte(s) were the same
posted @ 2020-12-16 13:50  HankFu  阅读(1708)  评论(0编辑  收藏  举报