Filesystems
exFAT for CircuitPython
You might be surprised to know you can use high capacity SD cards > 32 GB with CircuitPython. These large-capacity cards require exFAT (large filesystem support); exFAT support was added to CircuitPython a while ago, but this was not well publicized.
The only boards that do not support exFAT are boards with very restricted firmware space, like the M0 (SAMD21) boards without extra flash (Trinket M0, GEMMA M0, Feather M0 Basic). M0 Express boards like the Metro M0 do have exFAT support
This means you can use a modern SD card, 64 GB or larger, with great specs like a A2 / U3 rating. Any card greater than 32 GB will need to be formatted with exFAT on your host computer. CircuitPython does not have tools to format these natively: CircuitPython is only able to format FAT12, FAT16 and FAT32.
exFAT provides some wins. Its larger clusters and lack of a FAT chain likely aid performance.
Which FAT?
The storage capacity of your SD card determines the filesystem that gets installed. Yes, you can do wacky things like format a 16GB card with exFAT, but that would be out of compliance with the SD Association capacity standard. This chart is shows how capacity of the SD card dictates the filesystem that is to be used.
| Card Type | Capacity | Default Filesystem | CircuitPython Support |
|---|---|---|---|
| SDSC | ≤ 2 GB | FAT16 | ✓ Fully supported |
| SDHC | 4–32 GB | FAT32 | ✓ Fully supported |
| SDXC | 64 GB–2 TB | exFAT | ⚠ Boards with CIRCUITPY_FULL_BUILD=1 only |
| SDUC | > 2 TB | exFAT | ✗ Not supported |
Slow Startup Due to USB SD Card Presentation
Currently, by default, CircuitPython will present a mounted SD card as a USB drive to the host computer. This is a nice convenience so you do not need to manually move the SD card to an SD card reader to read or write it directly. But this convenience comes at a cost: it causes the program to start slowly, because when the host computer mounts the USB drive, the OS will read a lot of metadata (the FAT tables) from the filesystem. FAT32 in particular has a large amount of metadata. Both FAT16 and exFAT have tiny FAT tables. Using FAT16 or exFAT avoids a 10 - 20 second slow start.
The operating system also typically reads the names of all the files in the top-level directory so it can display it in a file browsing window, and that can also take a while.
You can prevent this slow startup by disabling the presentation of the SD card as a USB drive. Turn it off by adding this line to the settings.toml file on the CIRCUITPY:
CIRCUITPY_SDCARD_USB = false
You can also disable USB presentation entirely if you are building your own CircuitPython from scratch. Most people will not do this, but it is mentioned here for completeness. You would add this setting to mpconfigboard.mk or elsewhere in the build:
CIRCUITPY_SDCARD_USB=0
Page last edited June 09, 2026
Text editor powered by tinymce.