Difference between MicroSD cards and eMMC Modules

eMMC and MicroSD cards both fall under the MMC subsystem in Linux. Both are derived from similar underlying technologies and protocols. Usually eMMC is faster than MicroSD cards but this can vary depending on the manufacturer.

eMMC stands for Embedded MultiMedia Card. It is the soldered (non-removable) equivalent of the MMC removable flash storage standard. It communicates over a 8 bit bus and can be clocked up to 200MHz half duplex with transfers occurring at both edges of the clock. eMMC modules that we provide have the eMMC soldered to a PCB and attached to our boards via a custom connector as there’s no standard for removable eMMC modules. Typically, eMMC offers 50MB/s to 300MB/s read speed and up to 200MB/s sequential write speed. However this depends on the eMMC controller design and the flash that is used so not all eMMC modules are designed the same. Typically, larger modules offer faster performance and eMMC modules can be ordered up to 256GB in size.

SD stands for Secure Digital and it is designed to be removable. It communicates over a 4 bit half duplex bus and can be clocked up to 208MHz (SDR104) but only features half the bandwidth of eMMC modules. Our boards feature MicroSD card slots with spring. MicroSD cards typically operate on dual voltage for the data pins and dynamically switch between 3.3V and 1.8V after enumeration. When operating on 3.3V mode only, it is designed to operate at 50MHz which translates to 25MB/s over a 4 bit bus. For boards with UHS capability, the MicroSD card will switch to 1.8V mode and operate at up to 208MHz for 50MB/s-100MB/s maximum transfer speed. Like eMMC, this is impacted by the actual controller and flash used within the MicroSD card. Only the very premium MicroSD cards like Samsung Pro and SanDisk Extreme can provide sustained read and write performance over 50MB/s.

On Linux, both show up as MMC block devices in /dev/mmcblkX where X is a number 0 or 1. Typically on our software images, we keep eMMC as /dev/mmcblk0 and MicroSD card slots (if present) as /dev/mmcblk1. These are block devices meaning that they store continuous 512B sector addressable data. You can read and write to them just like computer hard drives (/dev/sdX). You can use any Linux tool to read and write to them. Through command line, typically dd is used. If you want to install any of our operating system images on the eMMC, you can just extract the images xz -dk IMAGE_FILE.xz and write them to the eMMC via sudo dd if=IMAGE_FILE of=/dev/mmcblk0 bs=1M. The eMMC must be present already and detected properly before you run that command ls /dev/mmcblk0.