SSD, SD, eMMC, Raw NAND what are the differences?

NAND stands for Negated AND. It often refers to the way the a logic gate is build from silicon.

Flash memory is also built from silicon chips and uses NAND gates. This leads to the term NAND flash. I suspect that this is the NAND you refer to, but for completeness sake I wanted to mention the background.

You can build storage with NAND flash, but you will need some way to access it.

E.g. you can put a NAND flash chip on a PCB, add a controller chip and some USB logic and you get a USB pen drive. Or you can add a SD controller and put it in this format and you get a SD card.

enter image description here

Both of these are relative simple devices and when you store information on them you will write to a fixed location. This is a bad thing, because the number of writes to NAND flash is limited.

You can add a controller to the device which makes sure that all writes are spread evenly across the NAND, while providing a consistent image to the computer. This requires a lot more intelligence on the device part and is done in SSDs. (SSDs are supposed to replace mechanical harddisks and thus are expected to get a lot of writes).

Is the difference between all of them just the way controllers are implemented?

For SD/USB pendive: mostly the same, just with a different interface.
For SSDs: completely different controllers.

Or are the technologies different all together?

There are several ways to implement nand storage. The main implemented differences seem to come down to:

  • Single cells in which you can store a high voltage or a low one (SLC, or Single level). Basically either 'on' or 'off', or '1' or '0'.
  • chips which allow multiple levels of power. (off, slightly charged, mostly charged, fully charged. Compare it to signaling with a stereo. SLC would be music on or music off. MLC would be 'off, soft music, loud music, and extra-deaf-mode).

That leaves eMMC.

I never heard of it before, but according to Wikipedia it is a a flash memory memory card standard.


NAND - raw flash memory

Raw flash uses its own protocol, and this protocol includes reading pages, writing pages, and erasing blocks. It does not work like disks - disks are able to read blocks and write blocks, flash is able to read and write pages - and a set of pages called a block must be erased before you can write new data. You can only erase a limited number of times before the block wears out and won't fully erase anymore.

SD - "Secure Digital"

It's a memory card format. SD cards contain a tiny microcontroller and NAND. The microcontroller implements a FTL (Flash Translation Layer) that takes disk-like block accesses and translates it into meaningful NAND operations, as well as performing wear-leveling and block sparing. SD cards use the SPI protocol on the "host" side. USB SD card readers convert from USB mass storage commands to SPI SD commands.

eMMC - embedded MMC

This refers to basically what you can think of as an SD card that's built into a motherboard (SD and MMC standards are very similar - enough that SD card readers can typically read MMC cards) - typically soldered in and non-removeable. Typically it is connected to the rest of the hardware via an internal SPI bus. Cell phones and ARM hardware, and other embedded-type devices (i.e. routers) may have this. UPDATE: Some newer value-priced Windows netbooks are starting to have these too. SD cards and eMMC are slower than SSDs because the SPI bus is not as fast as the SATA bus.

SSD - "Solid State Drive"

A controller + a bunch of NAND placed into a hard drive case. The controller implements a FTL (Flash Translation Layer) that takes disk-like block accesses and translates it into meaningful NAND operations, as well as performing wear-leveling and block sparing. Some controller types like "Sandforce", etc. are well known. SSDs use the SATA protocol and connector on the "host" side.


If you are in a situation where you are dealing with raw NAND, such as the Guruplug, you are responsible for doing wear leveling and block sparing. Linux filesystems like jffs2 and such do this, but aren't needed where a FTL does that work like on most SD cards, USB cards, etc.