uboot 支持 EMMC 和 SD 卡, 因此也要提供 EMMC 和 SD 卡的操作命令。
一般认为 EMMC和 SD 卡是同一个东西,所以没有特殊说明,本教程统一使用 MMC 来代指 EMMC 和 SD 卡。
uboot 中常用于操作 MMC 设备的命令为“mmc” 。
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_开发板](https://file.cfanz.cn/uploads/png/2022/10/31/14/86c720XPW9.png)
1、mmc info 命令
mmc info 命令用于输出当前选中的 mmc info 设备的信息,输入命令“mmc info”即可,如图所示:
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_linux_02](https://file.cfanz.cn/uploads/png/2022/10/31/14/28965T3IIC.png)
2、mmc rescan 命令
mmc rescan 命令用于扫描当前开发板上所有的 MMC 设备,包括 EMMC 和 SD 卡,输入“mmc rescan”即可。
3、mmc list 命令
mmc list 命令用于来查看当前开发板一共有几个 MMC 设备,输入“mmc list” ,结果如图所示:
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_u-boot_03](https://file.cfanz.cn/uploads/png/2022/10/31/14/1cQ658c25E.png)
可以看出当前开发板有两个 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
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_linux_04](https://file.cfanz.cn/uploads/png/2022/10/31/14/0cV5P3e7f2.png)
从图可以看出,切换到 SD 卡成功,mmc0 为当前的 MMC 设备,输入命令“mmc info”即可查看 SD 卡的信息,结果如图所示:
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_ubuntu_05](https://file.cfanz.cn/uploads/png/2022/10/31/14/Rd9f331LZc.png)
5、mmc part 命令
有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区,比如查看 EMMC 的分区情况,输入如下命令:
mmc dev 1 // 切换到 EMMC
mmc part // 查看 EMMC 分区
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_linux_06](https://file.cfanz.cn/uploads/png/2022/10/31/14/ea8S8SK527.png)
6、mmc read 命令
mmc read 命令用于读取 mmc 设备的数据,命令格式如下:
mmc read addr blk# cnt
- addr 是数据读取到 DRAM 中的地址
- blk 是要读取的块起始地址(十六进制) 一个块是 512字节
- cnt 是要读取的块数量(十六进制)
这里的块和扇区是一个意思, 在 MMC 设备中我们通常说扇区。
比如从EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的0X80800000 地址处,命令如下:
mmc dev 1 0 //切换到 MMC 分区 0
mmc read 80800000 600 10 //读取数据
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_u-boot_07](https://file.cfanz.cn/uploads/png/2022/10/31/14/2X17TdVYb3.png)
7、mmc write 命令
要将数据写到 MMC 设备里面,可以使用命令“mmc write” ,格式如下:
mmc write addr blk# cnt
- addr 是要写入 MMC 中的数据在 DRAM 中的起始地址
- blk 是要写入 MMC 的块起始地址
- cnt 是要写入的块大小
演示烧录uboot: 1、需要具备nfs或tftcp功能。 2、准备 u-boot.imx
将编译出来的 u-boot.imx(u-boot.bin 前面加了一些头文件)拷贝到 Ubuntu 中的tftpboot 目录下。
cp u-boot.imx …/…/tftpboot/
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_开发板_08](https://file.cfanz.cn/uploads/png/2022/10/31/14/21CeYYTV3D.png)
最后在uboot环境中使用 tftp 命令将其下载到 0x80800000 地址处,命令如下:
tftp 80800000 u-boot.imx
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_u-boot_09](https://file.cfanz.cn/uploads/png/2022/10/31/14/26405eA9ZG.png)
可以看出,u-boot.imx 大小为 416768 字节,416768/512=814,所以我们要向 SD 卡中写入814 个块,如果有小数的话就要加 1 个块。使用命令“mmc write”从 SD 卡分区 0 第 2 个块(扇区)开始烧写,一共烧写814(0x32E)个块,命令如下:
mmc dev 0 0
mmc write 80800000 2 32E
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_数据_10](https://file.cfanz.cn/uploads/png/2022/10/31/14/015UW9OC65.png)
重启uboot:reset
查看版本:version
![在这里插入图片描述 [I.MX6UL] U-Boot 命令使用(五) EMMC 和 SD 卡操作命令_ubuntu_11](https://file.cfanz.cn/uploads/png/2022/10/31/14/F74fX1B49K.png)
同理,如果要在 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 设备! ! !










