* Shouldn't SD cards have an expiration date? What if you buy a card that's been sitting on the shelf for a year?
* What is the proper maintenance procedure? Like should I let it sit in the reader for an a minute, 15 minutes, an hour for the controller do its magic?
* Are the translation tables better protected? Does the card return to full working order when reformatted?
* Are there testing tools for this? I remember CDs had tools that could tell you how much error correction the drive had to do.
If the flash was blank at manufacturing, it would remain blank after a year as there would be no charge to leak out. The problem is when the controller also stores its firmware on the main NAND, but AFAIK that isn't the case for SD cards (which have very little in the way of firmware compared to SSDs.)
And I'm pretty sure even SD cards have a translation layer.
From the linked pdf:
>In MLC and SLC, this can be as low as 3 months and best case can be more than 10 years. The retention is highly dependent on temperature and workload.
Interestingly, while heat can increase the rate of information loss (when drive is worn out), it can also decrease wear on the drive by making writes easier and less destructive to flash cells. The controller is still going to hate heat though.
Yeah, MLC already losing data after 3 months doesn't really surprise me that much. If you play with a raw MLC chip and turn off the ECC engine, the amount of bit flips you get from reading on some chips isn't even funny anymore. With one chip I tried, even with ECC, I managed to induce persistent bit flips fairly quickly just by reading the same physical page over-and-over. For extra fun: those bit flips can happen in another page that you didn't touch, because the bits are paired :-)
What actually still does surprise me sometimes, is how reliable those things can work after all, if you just pile enough software abstraction and management on top.
Are there tools available to a normal person to take a look at this stuff? Eg, is there some way I can evaluate a not yet failing SD card? CDs had tools to check for C1 and C2 errors, is there a way to do the same with a SD card or SSD?
I know that on Linux, there are mmc-utils, but I only used those with eMMC so far.
I just tried to read out some general status information on uSD cards I have around: it didn't work for 2 Kingston and Acon cards (command timeout). But for a Swissbit card (industrial), it took some solid 10 seconds before reporting back that it's doing ok and is ready for data. Looks like it depends heavily on vendor support, possibly also undocumented/non-standard command sequences?