Troubleshooting MicroSD Card Performance and Recommended MicroSD Cards

We recommend Samsung or SanDisk cards with A2 or A1 rating. Make sure that it is “Sold by Amazon.com” or else it could be a fake card. Samsung has been the most reliable in our experience with over 50 different MicroSD cards models.

Recommended A2 Rated Cards:

  1. Samsung Pro Plus
  2. Samsung Evo Plus (64GB is A1)
  3. SanDisk Extreme

Recommended A1 Rated Cards:

  1. Samsung Evo Select
  2. SanDisk Ultra

We do not recommend any other manufacturer because they have consistently proven themselves to put out unreliable products.

Our images are designed to detect silent MicroSD card corruption and lengthen MicroSD card life.

  1. If you suspect data corruption, run sudo dmesg | grep mmc and look for errors. Feel free to post your output below if you are not sure what counts as an error.
  2. To test read speed, run sudo dd if=$(findmnt -nvo SOURCE /) of=/dev/null bs=1M iflag=direct status=progress. Press Control+C to end. If this drops below 20MB/s, we recommend another card.
  3. To test write speed, run openssl enc -aes-128-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | dd of=test.file iflag=fullblock oflag=direct bs=1M status=progress. Press Control+C to end. If this drops below 15MB/s, we recommend another card for best experience.

For unpowered long term archival on the order of a decade, all flash storage devices will lose data. For applications that are expected to run for years, we recommend endurance or even industrial MicroSD cards. These MicroSD card internal controllers will fresh data cells periodically if powered and offer higher reliability.

2 Likes

I have legit Samsung EVO cards that do not work with Alta. They work with RP4, however. I was able to get Alta to work with Samsung Ultra, however

There’s a power cycle issue due to how the SD card handles VDDIO that we are in the process of fixing. It should be fixed/mitigated in the next firmware release.

Card 1 - Inland (Micro Center) 64GB

root@potato1:~# sudo dmesg | grep mmc
[ 2.837612] meson-gx-mmc d0074000.mmc: Looking up vmmc-supply from device tree
[ 2.837768] meson-gx-mmc d0074000.mmc: Looking up vqmmc-supply from device tree
[ 2.837952] meson-gx-mmc d0074000.mmc: allocated mmc-pwrseq
[ 2.878308] meson-gx-mmc d0074000.mmc: no support for card’s volts
[ 2.878870] mmc0: error -22 whilst initialising SDIO card
[ 3.682232] meson-gx-mmc d0072000.mmc: Looking up vmmc-supply from device tree
[ 3.683669] meson-gx-mmc d0072000.mmc: Looking up vqmmc-supply from device tree
[ 3.685559] meson-gx-mmc d0072000.mmc: Got CD GPIO
[ 3.842217] mmc1: new ultra high speed SDR104 SDXC card at address 0001
[ 3.845727] mmcblk1: mmc1:0001 00000 58.2 GiB
[ 3.851947] mmcblk1: p1 p2
[ 3.907894] mmc0: Card stuck being busy! __mmc_poll_for_busy
[ 4.479281] BTRFS: device label writable devid 1 transid 1291 /dev/mmcblk1p2 scanned by systemd-udevd (198)
[ 5.216547] BTRFS info (device mmcblk1p2): first mount of filesystem 29d512f7-4728-44f2-9070-cc9e4c3592bd
[ 5.220731] BTRFS info (device mmcblk1p2): using crc32c (crc32c-generic) checksum algorithm
[ 5.228917] BTRFS info (device mmcblk1p2): disk space caching is enabled
[ 5.252030] BTRFS info (device mmcblk1p2): enabling ssd optimizations
[ 7.652165] BTRFS info (device mmcblk1p2: state M): use zstd compression, level 3

Card 2 - Inland (Micro Center) 64GB

root@potato2:~ $ sudo dmesg | grep mmc
[ 3.511856] meson-gx-mmc d0074000.mmc: Looking up vmmc-supply from device tree
[ 3.512520] meson-gx-mmc d0074000.mmc: Looking up vqmmc-supply from device tree
[ 3.512778] meson-gx-mmc d0074000.mmc: allocated mmc-pwrseq
[ 3.553417] meson-gx-mmc d0074000.mmc: no support for card’s volts
[ 3.553979] mmc0: error -22 whilst initialising SDIO card
[ 4.351765] meson-gx-mmc d0072000.mmc: Looking up vmmc-supply from device tree
[ 4.353157] meson-gx-mmc d0072000.mmc: Looking up vqmmc-supply from device tree
[ 4.355088] meson-gx-mmc d0072000.mmc: Got CD GPIO
[ 4.509527] mmc1: new ultra high speed SDR104 SDXC card at address 0001
[ 4.513917] mmcblk1: mmc1:0001 00000 58.2 GiB
[ 4.519483] mmcblk1: p1 p2
[ 4.664518] mmc0: Card stuck being busy! __mmc_poll_for_busy
[ 5.215853] BTRFS: device label rootfs devid 1 transid 1750 /dev/mmcblk1p2 scanned by (udev-worker) (200)
[ 5.798797] BTRFS info (device mmcblk1p2): first mount of filesystem 283cfb79-a50f-43ab-bc96-42f866f8d541
[ 5.807782] BTRFS info (device mmcblk1p2): using crc32c (crc32c-generic) checksum algorithm
[ 5.815198] BTRFS info (device mmcblk1p2): disk space caching is enabled
[ 5.834691] BTRFS info (device mmcblk1p2): enabling ssd optimizations
[ 8.429912] BTRFS info (device mmcblk1p2: state M): use zstd compression, level 3

If we buy a SDHC it’s ok or we need to buy a SDXC ?

Either will work fine. Brand and legitimate supply chain matters more than XC or HC. HC means it’s most likely FAT32 formatted out of the box while XC means it’s EXFAT formatted. Neither matters since you are flashing a new image onto the card to replace the initial data on the MicroSD card.

At the beginning I didn’t consider these recommendations about buying either Samsung or SanDisk cards and I went for other brands such as Adata or Silicon Power. This led to killing the uSD cards I used. I’ve killed at least 1 or 2. IMO, if you are on Alta, a 3.5" HDD will prove more reliable than a uSD. And a SSD with USB 3.0 is far more faster than a typical uSD.