嵌入式技术
嗨喽,大家好,我是程序猿老王,程序猿老王就是我。
今天给大家详细的介绍一下u-boot命令之EMMC和SD卡操作的mmc命令使用。希望这篇文章对大家有所帮助。
uboot 支持 EMMC 和 SD 卡,因此也要提供 EMMC 和 SD 卡的操作命令。一般认为 EMMC和 SD 卡是同一个东西,所以没有特殊说明,统一使用 MMC 来代指 EMMC 和 SD 卡。
uboot 中常用于操作 MMC 设备的命令为“mmc”。
mmc 是一系列的命令,其后可以跟不同的参数,在u-boot的命令行输入“?mmc”即可查看 mmc 有关的命令,如下:
= > ? 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 [mode]
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] [mode] - show or set current mmc device [partition] and set mode
- the required speed mode is passed as the index from the following list
[MMC_LEGACY, MMC_HS, SD_HS, MMC_HS_52, MMC_DDR_52, UHS_SDR12, UHS_SDR25,
UHS_SDR50, UHS_DDR50, UHS_SDR104, MMC_HS_200, MMC_HS_400, MMC_HS_400_ES]
mmc list - lists available devices
mmc wp [PART] - power on write protect boot partitions
arguments:
PART - [0|1]
: 0 - first boot partition, 1 - second boot partition
if not assigned, write protect all boot partitions
mmc hwpartition < USER > < GP > < MODE > - does hardware partitioning
arguments (sizes in 512-byte blocks):
USER - < user > < enh > < start > < cnt > < wrrel > < {on|off} >
: sets user data area attributes
GP - < {gp1|gp2|gp3|gp4} > < cnt > < enh > < wrrel > < {on|off} >
: general purpose partition
MODE - < {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 setdsr < value > - set DSR register value
从上面列出的参数详情可以看出, mmc 后面跟不同的参数可以实现不同的功能,如下所示:
命令 | 功能 |
---|---|
mmc info | 显示MMC/SD卡设备的详细信息,包括容量、速度等 |
mmc read | 从MMC/SD卡读取数据到指定的加载地址 |
mmc wirte | 将指定加载地址的数据写入MMC/SD卡的指定扇区 |
mmc erase | 擦除MMC/SD卡上指定扇区的数据 |
mmc rescan | 重新扫描MMC/SD卡设备,以便在U-Boot中重新识别它们mmc part显示当前选择的MMC/SD卡设备的分区表信息 |
mmc dev | 选择并初始化指定编号的MMC/SD卡设备 |
mmc list | 列出系统中检测到的所有MMC设备的信息 |
mmc wp | 设置 MMC/SD卡的写保护状态 |
mmc hwpartition | MMC/SD卡上进行分区操作 |
mmc setdsr | 设置MMC/SD卡的数据寄存器(DSR)的值 |
mmc命令中最常用的8个命令如下:
mmc info命令用于显示当前选定的 MMC 设备的相关信息,包括设备编号、制造商 ID、OEM、卡名称、总容量、总扇区数、块大小、传输速度、版本信息、是否支持高容量(High Capacity)等,如下所示:
= > mmc info
Device: FSL_SDHC
Manufacturer ID: 3
OEM: 5344
Name: SC16G
Bus Speed: 49500000
Mode: SD High Speed (50MHz)
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 14.8 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
每个字段的解释如下:
输出中的信息可能会有所不同,具体取决于系统中存在的 MMC 设备和 U-Boot 版本。
mmc rescan命令用于重新扫描系统中的 MMC 设备,并更新设备的编号、容量、速度等信息。这对于在 U-Boot 中添加或移除 MMC 设备后进行设备状态更新很有用。
mmc rescan
mmc list命令用于列出检测到的 MMC 设备,如下所示:
= > mmc list
FSL_SDHC: 0 (SD)
FSL_SDHC: 1
从上面可以看出,当前开发板有两个 MMC 设备:
mmc dev命令用于将所选的 MMC 设备设置为当前设备,并在后续的操作中使用该设备。这对于在多个 MMC 设备存在的系统中选择要操作的设备非常有用。命令用法如下:
mmc dev [dev] [part]
参数含义如下:
[part]分区号也可以不写,不写的话默认为0分区,如下所示:
= > mmc dev 1 /*切换到EMMC,0为SD卡, 1为eMMC*/
switch to partitions #0, OK
mmc1(part 0) is current device
切换到 eMMC 成功, mmc0 为当前的 MMC 设备,输入命令“mmc info”可查看 eMMC 的信息,如下所示:
= > mmc dev 1
switch to partitions #0, OK
mmc1(part 0) is current device
= > mmc info
Device: FSL_SDHC
Manufacturer ID: 15
OEM: 0
Name: 8GTF4R
Bus Speed: 49500000
Mode: MMC High Speed (52MHz)
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 7.3 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 7.3 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 512 KiB ENH
Boot area 0 is not write protected
Boot area 1 is not write protected
每个字段的解释如下:
mmc part命令用于查看当前 MMC 设备的分区信息,可以看到每个分区的起始扇区、大小和类型,如下所示:
= > mmc part
Partition Map for MMC device 1 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 20480 262144 e94b5ec8-01 0c
2 282624 14987264 e94b5ec8-02 83
输出中的每一行表示一个分区的信息,包括以下字段:
从上面可以看出,此时 EMMC 有两个分区:
如果 EMMC 里面烧写了 Linux 系统的话, EMMC 是有3 个分区:
但是在上图中只有两个分区,那是因为第 0 个分区没有格式化,所以识别不出来,实际上第 0 个分区是存在的。一个新的 SD 卡默认只有一个分区,那就是分区 0。
mmc read命令用于从 MMC(多媒体卡)设备读取数据并将其加载到指定的内存地址。通过执行 mmc read 命令,您可以从 MMC 设备的指定扇区开始读取指定长度的数据,并将其加载到内存中供后续使用。命令如下所示:
mmc read addr blk# cnt
每个参数的含义如下:
示例如下:
= > mmc read 0x80800000 0x600 0x10
MMC read: dev # 1, block # 1536, count 16 ... 16 blocks read: OK
从 EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的0X80800000 地址处。
mmc write命令用于将数据从内存写入到 MMC 设备的指定扇区中。通过执行 mmc write 命令,您可以将指定内存地址处的数据写入到 MMC 设备的指定扇区中。命令如下所示:
mmc write addr blk# cnt
每个参数的含义如下:
示例如下:
= > mmc write 0x80800000 0x2 0x32E
MMC write: dev # 1, block # 2, count 814 ... 814 blocks written: OK
向 eMMC 中写入742 个块,如果有小数的话就要加 1 个块。使用命令“mmc write”从 eMMC 分区 0 第 2 个块(扇区)开始烧写,一共烧写 742(0x2E6)个块。扩展一下,u-boot可以利用 mmc write更新eMMC中的uboot,可以使用如下命令:
mmc dev 1 0 //切换到 EMMC 分区 0
tftp 80800000 u-boot.imx //下载 u-boot.imx 到 DRAM
mmc write 80800000 2 32E //烧写 u-boot.imx 到 EMMC 中
mmc partconf 1 1 0 0 //分区配置, EMMC 需要这一步!
注:没事千万不要写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表!
mmc erase命令用于在 MMC 设备上执行擦除操作。通过执行 mmc erase 命令,您可以擦除 MMC 设备上的指定扇区或分区。命令如下:
mmc erase blk# cnt
每个参数的含义如下:
注:没事不要用 mmc erase 来擦除 MMC 设备!!!
请注意,具体可用的命令和选项可能会根据所使用的 U-Boot 版本和硬件平台而有所不同。某些平台和版本可能不支持此命令。在使用此命令之前,请确保您的 U-Boot 版本和硬件平台支持它。您可以使用 U-Boot 的 help mmc 命令来获取更多关于 mmc 命令的详细信息和可用选项。
今天的内容到这就结束了,感谢大家的收看,如果觉得文章写的还不错,可以点击“赞赏”,来鼓励一下老王哦,当然,也可以点赞,收藏加关注哦!我们下期再见!
全部0条评论
快来发表一下你的评论吧 !