MMC
概述
MMC(MultiMediaCard)是一种存储卡标准,涵盖多种产品形态:
- eMMC:嵌入式存储,直接焊接在电路板上,常用于手机、平板等设备,具有集成控制器和闪存。
- SD 卡:可移动存储卡,广泛应用于数码相机、笔记本等,分为标准、mini、micro 等尺寸。
- SDIO:基于 SD 卡接口扩展的设备,不仅用于存储,还能实现无线网卡、蓝牙模块等功能。
关键特性
MTT E300 板级支持 MMC(MultiMediaCard)存储卡标准。
- 支持两路 mmc 控制器
- mmc0 支持 emmc,电压为 1.8V
- mmc1 支持 sd 卡和 sdio 设备,默认电压为 3.3V,可以切换为 1.8V
- 支持 emmc legacy speed、high speed、ddr、hs200、hs400、hs400es 速度模式
- 支持 sd 卡和 sdio legacy speed、high speed、uhs sdr50、sdr104、ddr50 等速度模式
- 支持 amda 传输方式
- 寄存器接口兼容 SDHCI 6.00 标准
- 兼容 SD Specifications - Part 1 Physical Layer Specification 6.10 标准
- 兼容 SD Specifications - Part E1 SDIO Specification 4.10 标准
- 兼容 Embedded Multi-Media Card (eMMC) Electrical Standard 5.1 标准
配置流程
步骤 1:配置 U-Boot 设备树
MTT E300 的设备树文件路径为:arch/arm/dts/。下面以 MTT E300 配置作为板级设备树文件示例。
- 打开
mthreads-m1000-aimodule.dts,找到emmc节点。 mmc-hs400-enhanced-strobe;表示支持 hs400es 速度模式mmc-hs400-1_8v;表示支持 hs400 速度模式mmc-hs200-1_8v;表示支持 hs200 速度模式mmc-ddr-1_8v;表示支持 ddr 速度模式sdhci-caps = <0x0 0x40000>;表示支持 8 线模式。如果使用 4 线或 1 线模式,可以屏蔽掉这一行。- 默认使用 8 线模式。若使用 4 线模式,配置
bus-width = <4>;若使用 1 线模式,配置bus-width = <1>。 - 在同一文件中找到
sd节点:sd;表示 sd 卡或 sdio。- 默认使用 4 线模式,如果想使用 1 线模式,配置
bus-width = <1>;
步骤 2:配置 Linux 设备树
linux 中 MTT E300 的设备树文件路径为:arch/arm64/boot/dts/m1000/。下面以 t021 配置作为板级设备树文件示例。
打开 m1000-t021.dtsi 文件:
-
找到
mmc0节点,mmc0支持emmc。-
no-sdio;表示不支持sdio。 -
no-sd;表示不支持sd卡。 -
bus-width = <8>;表示使用 8 线模式。 如果想使用 4 线模式,配置bus-width = <4>;如果想使用 1 线模式,配置bus-width = <1>; -
cap-mmc-highspeed;表示支持high speed速度模式。 -
mmc-ddr-1_8v;表示支持ddr速度模式。 -
mmc-hs200-1_8v;表示支持hs200速度模式。 -
mmc-hs400-1_8v;表示支持hs400速度模式。 -
mmc-hs400-enhanced-strobe;表示支持hs400es速度模式。
-
-
找到
mmc1节点,mmc1支持sd卡和sdio。sd-uhs-sdr12;表示支持uhs sdr12速度模式。sd-uhs-sdr25;表示支持uhs sdr25速度模式。sd-uhs-sdr50;表示支持uhs sdr50速度模式。sd-uhs-ddr50;表示支持uhs ddr50速度模式。sd-uhs-sdr104;表示支持uhs sdr104速度模式。disable-wp;表示禁止写保护功能。bus-width = <4>;表示支持 4 线模式。 如果想使用 1 线模式,配置bus-width = <1>;sdhci-caps-mask = <0x0 0x0>;表示不禁止sd的多种速度模式。power-gpios用于配置sd卡和sdio的电源使能管脚。vol-switch-gpios用于配置sd卡和sdio的电压切换管脚。
打开 m1000-t021.dts 文件,找到 mmc0 和 mmc1 节点,如下图所示:

以上管脚分别是 mmc0 和 mmc1 所用管脚,保持默认配置即可正常使用。
步骤 3:配置内核
在 Linux 内核的配置菜单中要选中 MTT E300 mmc 的驱动,路径如下:

在 MMC/SD/SDIO card support 菜单中,需要选中以下多个选项:
- HW reset support for eMMC:支持 eMMC 复位。
- MMC block device driver:支持 MMC 驱动模型。
- Secure Digital Host Controller Interface support:支持兼容 SDHCI 标准的 MMC。
- SDHCI support for ACPI enumerated SDHCI controllers:支持使用 ACPI 的 MMC 驱动。
- SDHCI platform and OF driver helper:支持使用设备树的 MMC 驱动。
- SDHCI support for the Cadence SD/SDIO/eMMC controller:支持 MTT E300 的 MMC 驱动。
调试方法说明
MMC 常用调试工具包括 dd,fio 等。
-
dd是 Linux 系统中一个功能强大且低级别的命令行工具,主要用于复制和转换文件数据(尤其是块设备或原始数据)。基本用法:dd if=输入文件 of=输出文件 [选项]常用选项:
if=FILE 输入文件(Input File)of=FILE 输出文件(Output File)bs=BYTES 单次读写块的大小(Block Size),如 bs=4M(默认 512B)count=N 仅复制 N 个块(按 bs 指定的大小)skip=N 跳过输入文件的前 N 个块seek=N 跳过输出文件的前 N 个块status=LEVEL 输出状态信息,如 status=progress(显示进度) -
fio(Flexible I/O Tester)是一个功能强大的 I/O 性能测试工具。常用选项:
--rw=模式--bs=块大小--iodepth=N I/O 队列深度(控制并发请求数)--numjobs=N 并发线程/进程数--runtime=秒 测试时长--size=大小 每个线程处理的数据总量(如 1G, 500M)--filename=路径 试文件或设备路径(如 /dev/sdb, /mnt/testfile)--direct=1 绕过系统缓存(直接访问磁盘)group_reporting 合并所有线程的结果报告
常见问题
Q:为什么 mmc1 支持 3.3V 电压,但是又支持 1.8V 电压切换?
A:
mmc1 支持 SD 卡和 SDIO 设备。当运行在 Legacy Speed 和 High Speed 模式时,使用 3.3V 电压
即可。
但若使用较高速度模式(如 UHS SDR50、SDR104 等),则需切换到 1.8V 模式。
一旦电压从 3.3V 切换至 1.8V,若需再切回 3.3V,必须先给 SD 卡或 SDIO 设备断电,否则可能导致设备无法正常识别或工作。

