924860a78f
Separate method to initialize SPIFFS memory buffers. REDME.md for spiffs component. Simplify spiffs example. |
||
---|---|---|
.. | ||
mkspiffs | ||
spiffs@c6e94fdca5 | ||
component.mk | ||
esp_spiffs.c | ||
esp_spiffs.h | ||
README.md | ||
spiffs_config.h |
SPIFFS ESP8266 File system
This component adds file system support for ESP8266. File system of choice for ESP8266 is SPIFFS. It was specifically designed to use with SPI NOR flash on embedded systems. The main advantage of SPIFFS is wear leveling, which prolongs life time of a flash memory.
Features
- SPIFFS - embedded file system for NOR flash memory.
- POSIX file operations.
- Static files upload to ESP8266 file system within build process.
- SPIFFS singleton configuration. Only one instance of FS on a device.
Usage
In order to use file system in a project the following steps should be made:
- Add SPIFFS component in a project Makefile
EXTRA_COMPONENTS = extras/spiffs
- Specify your flash size in the Makefile
FLASH_SIZE = 32
- Specify the start address of file system region on the flash memory
SPIFFS_BASE_ADDR = 0x200000
- If you want to upload files to a file system during flash process specify
the directory with files
$(eval $(call make_spiffs_image,files))
In the end the Makefile should look like:
PROGRAM=spiffs_example
EXTRA_COMPONENTS = extras/spiffs
FLASH_SIZE = 32
SPIFFS_BASE_ADDR = 0x200000
SPIFFS_SIZE = 0x100000
include ../../common.mk
$(eval $(call make_spiffs_image,files))
Note: Macro call to prepare SPIFFS image for flashing should go after
include common.mk
Files upload
To upload files to a file system during flash process the following macro is used:
$(eval $(call make_spiffs_image,files))
It enables the build of a helper utility mkspiffs. This utility creates an SPIFFS image with files in the specified directory.
The SPIFFS image is created during build stage, after make
is run.
The image is flashed into the device along with firmware during flash stage,
after make flash
is run.
mkspiffs utility uses the same SPIFFS source code and the same configuration as ESP8266. So the created image should always be compatible with SPIFFS on a device.
The build process will catch any changes in files directory and rebuild the
image each time make
is run.
The build process will handle SPIFFS_SIZE change and rebuild mkspiffs
utility and the image.
Example
Mount
esp_spiffs_init(); // allocate memory buffers
if (esp_spiffs_mount() != SPIFFS_OK) {
printf("Error mounting SPIFFS\n");
}
Format
Formatting SPIFFS is a little bit awkward. Before formatting SPIFFS must be mounted and unmounted.
esp_spiffs_init();
if (esp_spiffs_mount() != SPIFFS_OK) {
printf("Error mount SPIFFS\n");
}
SPIFFS_unmount(&fs); // FS must be unmounted before formating
if (SPIFFS_format(&fs) == SPIFFS_OK) {
printf("Format complete\n");
} else {
printf("Format failed\n");
}
esp_spiffs_mount();
POSIX read
Nothing special here.
const int buf_size = 0xFF;
uint8_t buf[buf_size];
int fd = open("test.txt", O_RDONLY);
if (fd < 0) {
printf("Error opening file\n");
}
read(fd, buf, buf_size);
printf("Data: %s\n", buf);
close(fd);
SPIFFS read
SPIFFS interface is intended to be as close to POSIX as possible.
const int buf_size = 0xFF;
uint8_t buf[buf_size];
spiffs_file fd = SPIFFS_open(&fs, "other.txt", SPIFFS_RDONLY, 0);
if (fd < 0) {
printf("Error opening file\n");
}
SPIFFS_read(&fs, fd, buf, buf_size);
printf("Data: %s\n", buf);
SPIFFS_close(&fs, fd);
POSIX write
uint8_t buf[] = "Example data, written by ESP8266";
int fd = open("other.txt", O_WRONLY|O_CREAT, 0);
if (fd < 0) {
printf("Error opening file\n");
}
write(fd, buf, sizeof(buf));
close(fd);