u-boot命令之mmc(emmc和sd卡)操作命令(代码片段)

行稳方能走远 行稳方能走远     2022-12-13     578

关键词:

参考:U-Boot命令之EMMC和SD卡操作命令
作者:一只青木呀
发布时间: 2020-10-20 15:02:16
网址:https://blog.csdn.net/weixin_45309916/article/details/109178989

EMMC和SD卡操作命令

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设备是 SD卡,版本为 3.0,容量为 14.8GiB(EMMC为 4GB),速度为 50000000Hz=50MHz, 4 位宽的总线。还有一个与 mmc info 命令相同功能的命令: mmcinfo,“mmc”和“info”之间没有空格。

2、 mmc rescan 命令

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

3、 mmc list 命令

mmc list 命令用于来查看当前开发板一共有几个 MMC 设备,输入“mmc list”

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

4、 mmc dev 命令

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

mmc dev [dev] [part]

[dev]用来设置要切换的 MMC 设备号, [part]是分区号。如果不写分区号的话默认为分区 0。

使用如下命令切换到 EMMC:

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

结果如下图所示:

从上图可以看出,切换到 EMMC 卡成功, mmc1 为当前的 MMC 设备,输入命令“mmcinfo”即可查看 EMMC 卡的信息,结果如图下所示:

从上图可以看出,EMMC版本为4.0, 容量为 7.3GiB,速度为 52000000Hz=52MHz, 8 位宽的总线。

5、 mmc part 命令

有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区,比如查看 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 read 80800000 600 10 //读取数据

结果如图所示:

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 月 12 日 14:04:37 编译的。我们现在重新编译一下 uboot,然后将编译出来的 u-boot.imx(u-boot.bin 前面加了一些头文件)拷贝到 Ubuntu 中的tftpboot 目录下。最后使用 tftp 命令将其下载到 0x80800000 地址处,命令如下:

tftpboot 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


烧写成功,重启开发板(从 SD 卡启动),重启以后再输入 version 来查看版本号,结果如下图所示:

从上图可以看出,此时的 uboot 是 2020 年 10 月 20 号 14:47:38 编译的,这个时间就是我刚刚编译 uboot 的时间,说明 uboot 更新成功。这里我们就学会了如何在 uboot 中更新 uboot了,如果要更新 EMMC 中的 uboot 也是一样的。

同理,如果要在 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 设备!!!

sd介绍(代码片段)

...是一种非易失性存储器件,有7pin,目前已基本被SD卡代替eMMC,EmbeddedMultimediaCard,内嵌式存储器,以BGA方式封装到SOC上;内置主控制器,以实现统一MMC接口SD,SecureDigitalMemoryCard,即安全数码卡,新一代多媒体储存卡,高速,安全... 查看详情

mmc/emmc/sd-card

转自:http://blog.csdn.net/yazhouren/article/details/46643321MMC(multiMediacard)是一种通信协议,支持两种模式SPI和MMCeMMC是一种支持MMC协议的芯片MMC/e?MMCcommunicationisbasedon anadvanced10-signalbus.Thecommunicationprotocoli 查看详情

[接口]mmc/emmc/sd-card

转自:http://blog.csdn.net/yazhouren/article/details/46643321MMC(multiMediacard)是一种通信协议,支持两种模式SPI和MMCeMMC是一种支持MMC协议的芯片MMC/e?MMCcommunicationisbasedon anadvanced10-signalbus.Thecommunicationprotocoli 查看详情

u-boot常用命令(代码片段)

u-boot常用命令查看u-boot所支持的命令查询命令u-boot版本环境变量板子相关信息环境变量操作内存操作网络操作EMMC和SD卡操作FAT格式文件系统操作EXT格式文件系统操作ubi格式文件系统操作boot操作bootzbootmbootUMS命令常用其他uboot环境... 查看详情

关于arm开发板(rk3399)android系统的emmc进行tuning的次数在源代码中应该在啥地方看

...统太大了,不知道有没查看遗漏的,谢谢回答参考技术AU-boot支持2种方式烧写emmc设备:Fastboot命令:通过usb接口烧写。步骤:1.编写u-boot支持从sd卡启动,里面涉及到文件的修改,下面讲解。2.按照上述方法,把u-boot烧录到sd上,... 查看详情

emmcsd/emmc寄存器介绍

1.SD卡内部架构2.SD/MMC相关寄存器的介绍2.1.CardIdentificationRegister(CID)2.2.CardSpecificDataRegister(CSD)2.3.SDcardConfigurationRegister(SCR)2.4.OperatingConditionsRegister(OCR)2.5.RCA寄存器3.参考文献    熟悉SD/MMC的相关寄存器对 查看详情

linux怎么读取sd卡cid?

要在Linux系统上读取SD卡CID,可以使用以下命令:首先,使用以下命令查看SD卡设备名称:sudofdisk-l这将列出所有已连接的设备,包括SD卡。请注意SD卡的设备名称,例如/dev/sdc。然后,使用以下命令读取SD卡CID:sudocat/sys/class/mmc_host... 查看详情

烧录乌班图系统的sd卡怎么格式化

...明输入界面输入用户名:ORBBEC输入密码:ORBBECe.进入系统命令行模式f.输入命令:sudoarmbian-config参考技术A若您想要在手机上格式化SD卡,请参考以下步骤操作:设定-(更多/一般)存储-SD卡-格式化SD卡。1、格式化emmc:使用空的emmc存储... 查看详情

linux系统移植:u-boot常用指令(上)(代码片段)

文章目录Linux系统移植:U-Boot常用指令(上)一、U-Boot命令行二、U-Boot常用命令(上)2.1help帮助命令2.2信息查询命令2.3环境变量修改命令2.4内存操作命令2.5网络操作命令Linux系统移植:U-Boot常用指令(... 查看详情

inand和emmc是什么东西

...ent/13/1231/16/11948835_341531661.shtml  首先明确的一点是eMMC只是一种接口标准,而iNand是符合eMMC标准的由Sandisk公司生产的一款芯片,Samsung公司生产的符合eMMC标准的芯片是moviNand。eMMC可以看作是SD/MMC卡的芯片化,其接口和SD/MMC... 查看详情

linux系统下怎么查看sd卡cid信息?

参考技术A使用以下命令:cat/sys/devices/platform/jz-msc.0/mmc_host/mmc0/mmc0:1234/cid或者使用通配符cat/sys/devices/platform/jz-msc.0/mmc_host/mmc0/mmc0:*/cid追问提示没有那个目录🤔 参考技术B使用以下命令:cat/sys/devices/platform/jz-msc.0/mmc_host/mmc0/mmc0... 查看详情

tiny4412标准版,编译u-boot并烧录到sd卡,从sd卡启动后只打印‘ok’两个字符

本人开发板是tiny4412(1G+4G)的标准版,由于开发板自带的光盘资料无法读取,所以就从友善官网下载到最新的资料;然而在做uboot烧录实验的时候,发现烧录完成从SD卡启动后只打印“OK”两个字符,无法正常... 查看详情

stm32l476应用开发之五:数据保存与sd卡操作

...该读卡器摸块通讯协议比较简单,本模块的通讯协议分为命令发送和命令的应答两部分,其中命令格式 查看详情

[imx6dl]fastbooterasesd分区实现

u-boot:v2009.08系统默认只支持nand的fastbooterase功能,而我们用的是SD,当使用fastbooterase时,会提示:“NotsupporterasecommandforEMMC”SD和EMMC都是基于MMC,u-boot本身有实现mmc的blockerase功能,因此我们利用它来擦写对应的块即可。在擦写之... 查看详情

14020.petalinux之platform-auto.h和platform-top.h(代码片段)

...filename,从服务器下载文件到addr地址。mmc主要是SD卡和EMMC操作指令 查看详情

stm32开发_利用spi协议读写sd卡介绍sd卡spi时序(代码片段)

...间区别2.2SD卡版本说明2.3SD卡常用的指令表三、向SD卡发送命令的步骤介绍(SendSDCardCmd)3.1取消选中SD卡(SDCardCancelCS)3.2选中SD卡(SDCardSelectCS)3.3向SD卡发送操作命令cmd3.4向SD卡发送命令参数3.5发送CRC校验3.6等待SD卡响应四、SD卡的寄存器... 查看详情

stm32cubemx之sd卡驱动

STM32CubeMx之SD卡驱动1.SD卡简介   SD存储卡(SecureDigitalMemoryCard)是一种基于半导体快闪存储器的新一代高速存储设备。SD存储卡的技术是从MMC卡(MultiMediaCard)格式上发展而来,在兼容SD存储卡基础上发展了SDIO(SDInput/Output)卡,... 查看详情

先在sd卡上启动u-boot,再烧写新的u-boot进nandflash

...一样),和烧写SD卡的工具write_sd以及需要烧写到SD卡中的u-boot-movi.bin。将SD卡格式化后连接到Ubuntu虚拟机中,注意在SD卡需要插入到读卡器中,不能用电脑自带的SD卡槽,否则在Ubuntu下认不到。先执行ls/dev/sdb*,能够看见有一个/dev... 查看详情