Accessing files on external SD cards is currently only supported from the file
module. This imposes the same overall restrictions of internal SPIFFS to SD cards:
- limited support for sub-folders
- no timestamps
- no file attributes (read-only, system, etc.)
Work is in progress to extend the file
API with support for the missing features.
The FAT file system is implemented by Chan's FatFs version R0.13c. It's disabled by default to save memory space and has to be enabled before compiling the firmware:
Enable "Support for FAT filesystems" in Comoponent config ---> Platform config and enable the sdmmc module for low-level control.
Refer to the sdmmc
module documentation.
Before mounting the volume(s) on the SD card, you need to initialize the SDMMC interface from Lua.
-- for SDMMC mode:
card = sdmmc.init(sdmmc.HS2, {width = sdmmc.W1BIT})
-- for SD SPI mode:
card = sdmmc.init(sdmmc.VSPI, {sck_pin = 18, mosi_pin = 23, miso_pin = 19, cs_pin = 22})
-- then mount the sd
-- note: the card initialization process during `card:mount()` will set spi divider temporarily to 200 (400 kHz)
-- it's reverted back to the current user setting before `card:mount()` finishes
card:mount("/SD0")
file.open("/SD0/path/to/somefile")
print(file.read())
file.close()
The logical drives are mounted at the root of a unified directory tree where the mount points distinguish between internal flash (/FLASH
) and the card's paritions (/SD0
to /SD3
). Files are accessed via either the absolute hierarchical path or relative to the current working directory. It defaults to /FLASH
and can be changed with file.chdir(path)
.
Subdirectories are supported on FAT volumes only.
The mapping from logical volumes (eg. /SD0
) to partitions on an SD card is defined in fatfs_config.h
. More volumes can be added to the VolToPart
array with any combination of physical drive number (aka SDMMC slots) and partition number. Their names have to be added to _VOLUME_STRS
in ffconf.h
as well.