Last edited one year ago

MMC overview

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Applicable for STM32MP13x lines, STM32MP15x lines

The MMC (MultiMediaCard) / SD (secure digital) / SDIO (secure digital input/output) subsystem implements a standard Linux® host driver to interface with MMC / SD memory cards or SDIO cards.

1 Framework purpose[edit source]

The purpose of this article is to introduce the MMC Linux® subsystem (MMC / SD) by:

  • providing general information
  • describing the main components/stakeholders

The SDIO is addressed in the WLAN overview.

2 System overview[edit source]

MMC overview.png

2.1 Component description[edit source]

  • User space applications handle file I/O management to view the card memory as a disk, whereas programs that perform raw I/O accesses see the memory as a block device[1].
  • VFS (Kernel space)

Virtual File System. Please refer to the VFS documentation [2].

  • MMC core/SD/MMC/SDIO (Kernel space)

The MMC core ensures compliance with MultiMediaCard (MMC)[3] / secure digital (SD)[4] / secure digital input/output (SDIO)[5].

  • SDMMC driver (Kernel space) / SDMMC (hardware)

The SDMMC driver handles:

  • the registers, the clock, the interrupt and the IDMA control.
  • the communications over the bus based on command/response and data transfers.

Please refer to the SDMMC internal peripheral.

2.2 API description[edit source]

The MMC core handles the file system read/write calls.

3 Configuration[edit source]

3.1 Kernel configuration[edit source]

The MMC framework is activated by default in ST deliveries. If a specific configuration is needed, this section indicates how the MMC framework can be activated/inactivated in the kernel.

The MMC framework can be activated in the kernel configuration via Linux® Menuconfig tool: Menuconfig or how to configure kernel

[*] Device Drivers
    [*] MMC/SD/SDIO card support
        <*> HW reset support for eMMC
        <*> Simple HW reset support for MMC
        <*> MMC block device driver
            (16) Number of minors per block device
        ...
        <*> ARM AMBA Multimedia Card Interface support
        [*] STMicroelectronics STM32 SDMMC Controller

3.2 Device tree configuration[edit source]

DT configuration can be done thanks to STM32CubeMX.

Please refer to the SDMMC device tree configuration.

4 How to use the framework[edit source]

A file system, which handles read/write/erase operations, can be used with the MMC framework. Please refer to the EXT4 support through MMC.


5 How to trace and debug the framework[edit source]

5.1 How to monitor[edit source]

The sysfs interface provides detailed information on each mmc device:

root:~# cat /sys/kernel/debug/mmc0/ios
clock:          50000000 Hz
vdd:            21 (3.3 ~ 3.4 V)
bus mode:       2 (push-pull)
chip select:    0 (don't care)
power mode:     2 (on)
bus width:      2 (4 bits)
timing spec:    2 (sd high-speed)
signal voltage: 0 (3.30 V)
driver type:    0 (driver type B)

5.2 How to trace[edit source]

For details on dynamic trace usage, refer to How to use the kernel dynamic debug.

root:~# echo "file drivers/mmc/* +p" > /sys/kernel/debug/dynamic_debug/control

6 Source code location[edit source]

The MMC framework is available here .

7 References[edit source]

Please refer to the following links for a full description of the MMC framework:

  1. https://en.wikipedia.org/wiki/Device_file#Block_devices
  2. VFS
  3. MultiMediaCard, embedded MultiMediaCard specification
  4. Secure Digital, secure digital specification
  5. Secure Digital Input Output, Secure Digital Input Output specification