set(image ../fatfs_image)
if(CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY)
fatfs_create_rawflash_image(vfs ${image} FLASH_IN_PROJECT PRESERVE_TIME)
else()
fatfs_create_spiflash_image(vfs ${image} FLASH_IN_PROJECT PRESERVE_TIME)
endif()
编译之后,就能够看到生成了fastfs的bin文件
vfs-flash_args则是包含烧录的参数
--flash_mode dio --flash_freq 80m --flash_size 16MB
0x3f0000 vfs.bin
err = esp_vfs_fat_spiflash_mount_ro(base_path, "vfs", &mount_config);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err));
return;
} else {
ESP_LOGI(TAG, "FATFS mounted successfully");
}
参数解释
base_path: 挂载点路径,比如 “/spiflash”,挂载后文件路径是 /spiflash/xxx.txt。
“vfs”: 分区标签,必须是 partitions.csv 中定义的分区名。
&mount_config: esp_vfs_fat_mount_config_t 类型,配置文件系统挂载行为(例如是否格式化等)。
函数用途
这个函数的作用是:
✅ 将 SPI Flash 中的 FAT 文件系统挂载为只读
将提前烧录好数据文件(图片、字库、配置等)到 SPI Flash 的情况。
比如你将 .bin 字库或 .jpg 图片打包成 FAT 镜像写入 SPI Flash,然后用 LVGL+FatFS 动态加载。
需要将路径,在前面加上fatfs文件系统挂载点的路径。
/**
* Open a file
* @param drv pointer to a driver where this function belongs
* @param path path to the file beginning with the driver letter (e.g. S:/folder/file.txt)
* @param mode read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | FS_MODE_WR
* @return pointer to FIL struct or NULL in case of fail
*/
static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode)
{
LV_UNUSED(drv);
uint8_t flags = 0;
char full_path[256];
if(mode == LV_FS_MODE_WR) flags = FA_WRITE | FA_OPEN_ALWAYS;
else if(mode == LV_FS_MODE_RD) flags = FA_READ;
else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) flags = FA_READ | FA_WRITE | FA_OPEN_ALWAYS;
FIL * f = lv_malloc(sizeof(FIL));
if(f == NULL) return NULL;
snprintf(full_path, sizeof(full_path), "/spiflash/%s", path);
FRESULT res = f_open(f, full_path, flags);
if(res == FR_OK) {
return f;
}
else {
lv_free(f);
return NULL;
}
}
load_file_and_display("A:/hellolongname.txt", screen);
void load_file_and_display(const char *file_path, lv_obj_t *parent) {
// 打开文件
lv_fs_file_t file;
if (lv_fs_open(&file, file_path, LV_FS_MODE_RD) != LV_FS_RES_OK) {
printf("Failed to open file: %s\n", file_path);
return;
}
}
fatfsgen