U-Boot命令之EMMC和SD卡操作命令 客官°小女子只卖身不卖艺 2022-12-16 13:06 1612阅读 0赞 ### EMMC和SD卡操作命令 ### * EMMC和SD卡操作命令 * * 1、 mmc info 命令 * 2、 mmc rescan 命令 * 3、 mmc list 命令 * 4、 mmc dev 命令 * 5、 mmc part 命令 * 6、 mmc read 命令 * 7、 mmc write 命令 * 8、 mmc erase 命令 # EMMC和SD卡操作命令 # uboot 支持 EMMC 和 SD 卡,因此也要提供 EMMC 和 SD 卡的操作命令。一般认为 EMMC和 SD 卡是同一个东西,所以没有特殊说明,统一使用 MMC 来代指 EMMC 和 SD 卡。 uboot 中常用于操作 MMC 设备的命令为“mmc” mmc 是一系列的命令,其后可以跟不同的参数,输入“? mmc”即可查看 mmc 有关的命令,如下图所示: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTkxNg_size_16_color_FFFFFF_t_70_pic_center] 从上图可以看出, mmc 后面跟不同的参数可以实现不同的功能,如下表所示: <table> <thead> <tr> <th>命令</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>mmc info</td> <td>输出 MMC 设备信息</td> </tr> <tr> <td>mmc read</td> <td>读取 MMC 中的数据。</td> </tr> <tr> <td>mmc wirte</td> <td>向 MMC 设备写入数据。</td> </tr> <tr> <td>mmc rescan</td> <td>扫描 MMC 设备。</td> </tr> <tr> <td>mmc part</td> <td>列出 MMC 设备的分区。</td> </tr> <tr> <td>mmc dev</td> <td>切换 MMC 设备。</td> </tr> <tr> <td>mmc list</td> <td>列出当前有效的所有 MMC 设备。</td> </tr> <tr> <td>mmc hwpartition</td> <td>设置 MMC 设备的分区。</td> </tr> <tr> <td>mmc bootbus……</td> <td>设置指定 MMC 设备的 BOOT_BUS_WIDTH 域的值。</td> </tr> <tr> <td>mmc bootpart……</td> <td>设置指定 MMC 设备的 boot 和 RPMB 分区的大小。</td> </tr> <tr> <td>mmc partconf……</td> <td>设置指定 MMC 设备的 PARTITION_CONFG 域的值。</td> </tr> <tr> <td>mmc rst</td> <td>复位 MMC 设备</td> </tr> <tr> <td>mmc setdsr</td> <td>设置 DSR 寄存器的值。</td> </tr> </tbody> </table> ## 1、 mmc info 命令 ## mmc info 命令用于输出当前选中的 mmc info 设备的信息,输入命令“mmc info”即可,如下图所示: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTkxNg_size_16_color_FFFFFF_t_70_pic_center 1] 从上图可以看出,当前选中的 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”即可。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTkxNg_size_16_color_FFFFFF_t_70_pic_center 2] ## 3、 mmc list 命令 ## mmc list 命令用于来查看当前开发板一共有几个 MMC 设备,输入“mmc list” ![在这里插入图片描述][20201020130707824.png_pic_center] 可以看出当前开发板有两个 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 结果如下图所示: ![在这里插入图片描述][20201020131000439.png_pic_center] 从上图可以看出,切换到 EMMC 卡成功, mmc1 为当前的 MMC 设备,输入命令“mmcinfo”即可查看 EMMC 卡的信息,结果如图下所示: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTkxNg_size_16_color_FFFFFF_t_70_pic_center 3] 从上图可以看出,EMMC版本为4.0, 容量为 7.3GiB,速度为 52000000Hz=52MHz, 8 位宽的总线。 ## 5、 mmc part 命令 ## 有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区,比如查看 EMMC 的分区情况,输入如下命令: mmc part //查看 EMMC 分区 结果如下图所示: ![在这里插入图片描述][20201020131336938.png_pic_center] 从上图中可以看出,此时 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 //读取数据 结果如图所示: ![在这里插入图片描述][20201020131828514.png_pic_center] ## 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 //查看版本号 ![在这里插入图片描述][20201020132122622.png_pic_center] 可以看出当前 SD 卡中的 uboot 是 2020 年 10 月 12 日 14:04:37 编译的。我们现在重新编译一下 uboot,然后将编译出来的 u-boot.imx(u-boot.bin 前面加了一些头文件)拷贝到 Ubuntu 中的tftpboot 目录下。最后使用 tftp 命令将其下载到 0x80800000 地址处,命令如下: tftpboot 80800000 u-boot.imx ![在这里插入图片描述][20201020145430626.png_pic_center] 可以看出, 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 ![在这里插入图片描述][20201020145755315.png_pic_center] 烧写成功,重启开发板(从 SD 卡启动),重启以后再输入 version 来查看版本号,结果如下图所示: ![在这里插入图片描述][20201020145842393.png_pic_center] 从上图可以看出,此时的 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 设备!!! [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTkxNg_size_16_color_FFFFFF_t_70_pic_center]: /images/20221123/b1883a314e8e4c66a2982ad99a784dd0.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTkxNg_size_16_color_FFFFFF_t_70_pic_center 1]: /images/20221123/c05d634324d340e49a7be22d31ba0e3f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTkxNg_size_16_color_FFFFFF_t_70_pic_center 2]: /images/20221123/b4b0b6822b2242fc951cd40fb1c1dd5f.png [20201020130707824.png_pic_center]: /images/20221123/fab303f2cd3c492498a4812f21a78d1a.png [20201020131000439.png_pic_center]: /images/20221123/73e52857e0eb47598af61aa727e83f54.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTkxNg_size_16_color_FFFFFF_t_70_pic_center 3]: /images/20221123/1fc8961c4611443fb5cb4f3bef0552f1.png [20201020131336938.png_pic_center]: /images/20221123/e0037d00fe2e40f7a5d9c7f8bff135cd.png [20201020131828514.png_pic_center]: /images/20221123/59aa05e5c39448f2ba06486be50dedfd.png [20201020132122622.png_pic_center]: /images/20221123/69c86781b9c54c878dbc1fab0daf7194.png [20201020145430626.png_pic_center]: /images/20221123/4a6e5a58226f4c79998d8e02453cfb1d.png [20201020145755315.png_pic_center]: /images/20221123/7330a126a4494acb8d49dfc27cb18f82.png [20201020145842393.png_pic_center]: /images/20221123/5434f75bb25f4a6aa5a7b68ea3616f8d.png
还没有评论,来说两句吧...