Electronic – Most reliable Flash memory for an embedded Linux system


What would be the most reliable Flash memory hardware to use for an embedded Linux system? I.e. one that has the least chance of losing data or getting corrupt when the power goes down? The Flash would be for a Linux system so it would need to be at least 2GB in size. Speed is not super important. Cost is somewhat important, but not as important as reliability. Candidate parts would be Compact Flash, raw NAND Flash, eMMC or some other type I'm not aware of.

We currently use micro SD cards but I don't like them, they seem too unreliable and I've had several either become corrupted or just completely die. Another aspect I don't like is you don't get any visibility into what the card is doing at the lower levels, e.g. how many ECC errors are occurring, how many spare blocks are left etc.

We have a design re-fresh coming up so I wanted to see what the best hardware options would be.

Best Answer

If you want to see what is done inside, you have already answered your question : you can't use managed flash, your only solution is raw NAND flash.

As you want reliability, you can't have 2 pages corrupted when a write fails, this excludes MLC and TLC flash. Go for 2GB SLC NAND flash (BeNAND doesn't fit your requirements). It's expensive, but it's your requirement.

But let's be a little more pragmatic, you need your system to boot and to avoid to be fully corrupted by a sudden power loss. This excludes SD cards, but it allows eMMC : eMMC were specified for embedded environments. Manufacturers like Micron and Toshiba offer eMMC that you can partially use as pseudo SLC to increase reliability for your boot partition, that use buffering to reduce data loss and prevent filesystem corruption, without handling all the ECC correction/page relocation/Bad block handling/wear-leveling stuff by yourself, and, with JEDEC eMMC standard, you can learn about the number of available blocks, the mean/max age of your blocks, and you have dedicated commands to stop background operations, which allow you to perform a clean shutdown in about 20ms, instead of an indeterminate time with SD card. And this does not require a NAND controller with heavy ECC capabilities.