u-boot使用指令之EMMC 和 SD 卡操作命令

本文详细介绍了U-Boot中用于操作EMMC和SD卡的一系列命令,包括mmcinfo、mmcrescan、mmclist、mmcdev、mmcpart、mmcread、mmcwrite和mmcerase等,讲解了每个命令的功能和使用方法,帮助读者理解如何在U-Boot环境下进行数据读写、设备切换和分区管理等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


uboot 支持 EMMC 和 SD 卡,因此也要提供 EMMC 和 SD 卡的操作命令。一般认为 EMMC和 SD 卡是同一个东西,所以没有特殊说明,本教程统一使用 MMC 来代指 EMMC 和 SD 卡。uboot 中常用于操作 MMC 设备的命令为“mmc”。mmc 是一系列的命令,其后可以跟不同的参数,输入“? mmc”即可查看 mmc 有关的命令,如图 所示:

在这里插入图片描述

从图可以看出, mmc 后面跟不同的参数可以实现不同的功能,如表所示:

命令描述
mmc info输出 MMC 设备信息
mmc read读取 MMC 中的数据。
mmc wirte向 MMC 设备写入数据。
mmc rescan扫描 MMC 设备。
mmc part列出 MMC 设备的分区。
mmc dev切换 MMC 设备。
mmc list列出当前有效的所有 MMC 设备。
mmc hwpartition设置 MMC 设备的分区。
mmc bootbus……设置指定 MMC 设备的 BOOT_BUS_WIDTH 域的值。
mmc bootpart……设置指定 MMC 设备的 boot 和 RPMB 分区的大小。
mmc partconf……设置指定 MMC 设备的 PARTITION_CONFG 域的值。
mmc rst复位 MMC 设备
mmc setdsr设置 DSR 寄存器的值

1、 mmc info 命令

mmc info 命令用于输出当前选中的 mmc info 设备的信息,输入命令“mmc info”即可,如
图所示:
在这里插入图片描述
从图可以看出,当前选中的 MMC设备是 EMMC,版本为 4.0,容量为 7.3GiB(EMMC为 8GB),速度为 52000000Hz=52MHz, 8 位宽的总线。还有一个与 mmc info 命令相同功能的命令: mmcinfo,“mmc”和“info”之间没有空格。

2、 mmc rescan 命令

mmc rescan 命令用于扫描当前开发板上所有的 MMC 设备,包括 EMMC 和 SD 卡,输入“mmc rescan”即可。

3、 mmc list 命令

在这里插入图片描述
可以看出当前开发板有两个 MMC 设备: FSL_SDHC:0 和 FSL_SDHC:1 (eMMC),这是因为我现在用的是 EMMC 版本的核心板,加上 SD 卡一共有两个 MMC 设备, FSL_SDHC:0 是 SD卡, FSL_SDHC:1(eMMC)是 EMMC,。默认会将 EMMC 设置为当前 MMC 设备,这就是为什么输入“mmc info”查询到的是 EMMC 设备信息,而不是 SD 卡。要想查看 SD 卡信息,就要使用命令“mmc dev”来将 SD 卡设置为当前的 MMC 设备。

4、 mmc dev 命令

mmc dev 命令用于切换当前 MMC 设备,命令格式如下:

mmc dev [dev] [part]

[dev]用来设置要切换的 MMC 设备号, [part]是分区号。如果不写分区号的话默认为分区 0。
使用如下命令切换到 SD 卡:

mmc dev 0 //切换到 SD 卡, 0 为 SD 卡, 1 为 eMMC

在这里插入图片描述
从图可以看出,切换到 SD 卡成功, mmc0 为当前的 MMC 设备,输入命令“mmcinfo”即可查看 SD 卡的信息,结果如图所示:
在这里插入图片描述
从图可以看出当前 SD 卡为 3.0 版本的,容量为 14.8GiB(16GB 的 SD 卡), 4 位宽的总线。

5、 mmc part 命令

有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区,比如
查看 EMMC 的分区情况,输入如下命令:

mmc dev 1 //切换到 EMMC
mmc part //查看 EMMC 分区

结果如下:
在这里插入图片描述
从图中可以看出,此时 EMMC 有两个分区,扇区 20480~262144 为第一个分区,扇区 282644~14987264为第二个分区。如果 EMMC 里面烧写了 Linux 系统的话, EMMC 是有3 个分区的,第 0 个分区存放 uboot,第 1 个分区存放 Linux 镜像文件和设备树,第 2 个分区存放根文件系统。但是在图中只有两个分区,那是因为第 0 个分区没有格式化,所以识别不出来,实际上第 0 个分区是存在的。一个新的 SD 卡默认只有一个分区,那就是分区 0。

6、 mmc read 命令

mmc read 命令用于读取 mmc 设备的数据,命令格式如下:

mmc read addr blk# cnt

addr 是数据读取到 DRAM 中的地址, blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区, cnt 是要读取的块数量(十六进制)。比如从 EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的0X80800000 地址处,命令如下:

mmc dev 1 0 //切换到 MMC 分区 0
mmc read 80800000 600 10 //读取数据

结果如图所示:
在这里插入图片描述
这里我们还看不出来读取是否正确,通过 md.b 命令查看 0x80800000 处的数据就行了,查看 16*512=8192(0x2000)个字节的数据,命令如下:

md.b 80800000 2000

在这里插入图片描述
从图可以看到“D$…baudrate=115200.board_name=EVK.board_rev=14X14.”等字样,这个就是 uboot 中的环境变量。 EMMC 核心板 uboot 环境变量的存储起始地址就是1536*512=786432。

7、 mmc write 命令

要将数据写到 MMC 设备里面,可以使用命令“mmc write”,格式如下:

mmc write addr blk# cnt

addr 是要写入 MMC 中的数据在 DRAM 中的起始地址, blk 是要写入 MMC 的块起始地址(十六进制), cnt 是要写入的块大小,一个块为 512 字节。我们可以使用命令“mmc write”来升级 uboot,也就是在 uboot 中更新 uboot。这里要用到 nfs 或者 tftp 命令,通过 nfs 或者 tftp 命令将新的 u-boot.bin 下载到开发板的 DRAM 中,然后再使用命令“mmc write”将其写入到 MMC设备中。我们就来更新一下 SD 中的 uboot,先查看一下 SD 卡中的 uboot 版本号,注意编译时间,输入命令:

mmc dev 0 //切换到 SD 卡
version //查看版本号

在这里插入图片描述

可以看出当前SD卡中uboot 是 2020 年 10月29日01:43:24编译的。我们现在重新编译
一下 uboot,然后将编译出来的 u-boot.imx(u-boot.bin 前面加了一些头文件)拷贝到 Ubuntu 中的
tftpboot 目录下。最后使用 tftp 命令将其下载到 0x80800000 地址处,命令如下:

tftp 80800000 u-boot.imx

在这里插入图片描述
可以看出, u-boot.imx 大小为 379904 字节, 379904/512=742,所以我们要向 SD 卡中写入742 个块,如果有小数的话就要加 1 个块。使用命令“mmc write”从 SD 卡分区 0 第 2 个块(扇区)开始烧写,一共烧写 742(0x2E6)个块,命令如下:

mmc dev 0 0
mmc write 80800000 2 32E

在这里插入图片描述
同理,如果要在 uboot 中更新 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 的前两个块(扇区),里面保存着分区表!

8、 mmc erase 命令

如果要擦除 MMC 设备的指定块就是用命令“mmc erase”,命令格式如下:

mmc erase blk# cnt

blk 为要擦除的起始块, cnt 是要擦除的数量。没事不要用 mmc erase 来擦除 MMC 设备!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值