SD cards are the literal worst.

they've expanded to be the size of small hard drives, and devices like the rpi keep using them as boot media, but they:

- use garbage tier low endurance flash cells internally
- have little to no overprovisioning for wear
- perform only the most basic wear levelling
- have no protocol level integrity checking
- have few internal error correction features, if any
- decay comparatively quickly without patrol scrubs
- do not perform patrol scrubs
- cannot do PLP

I've been mad about this pretty much forever. Don't use SD cards for stuff where there's literally any other option.
@gsuberland I agree with you, but what other options are there at the moment? I guess USB drives might work.

@kelpana @gsuberland USB-attached SATA or NVMe SSDs.

USB flash drives are the exact same (or often worse). Don't use them either.

@manawyrm @gsuberland I know some USB flash drives are bad, or even just SD cards. But what can be used to interface to a microcontroller project? Is it even possible to interface NVMe in a small system?
@kelpana @manawyrm @gsuberland wouldn't NAND or NOR flash be better? If you have a Linux kernel, you have UBIFS
@kelpana @manawyrm @gsuberland (also: are eMMC as bad as SD cards? I felt like they had better properties)
@raito @kelpana @manawyrm eMMC is a bit better, but more than anything the manufacturers are just more transparent about their performance.

@gsuberland @raito @kelpana
Look at this datasheet: https://wmsc.lcsc.com/wmsc/upload/file/pdf/v2/lcsc/2007301503_Samsung-KLM8G1GETF-B041_C499918.pdf

You can also often configure/partition eMMC flash to work in pseudo SLC mode (trading size for reliability).

I know that at least some Micron eMMC has working built-in data refresh... Not sure about other vendors.

@manawyrm oh neat. I know the eMMC protocol has much better guarantees about operation timings and caching, so that helps a lot with designing stuff for data integrity.