文件系统

  • filesystem
  • FS
  • esp_mmap_assets
  • LVGL
  • font
  • ESP32-P4
  • SDIO
  • SDMMC
  • SD card
  • GPIO43
  • GPIO44
  • 存储
  • SD卡
  • 固定引脚

LittleFS 分区 8MB,但实际只能写入约 6.6MB,是否异常?

不是异常,这是 LittleFS 的正常设计行为。
LittleFS 会预留一部分空间用于文件系统自身管理,包括:

  • 元数据(metadata)
  • block / page 管理结构
  • 磨损均衡(wear leveling)
  • 文件系统冗余与一致性保障

因此,LittleFS 的可用数据空间小于分区总大小,通常会预留约 15%~25% 的空间用于上述用途。

补充说明:

  • 8MB 分区实际可用约 6.5~7MB 属于正常范围
  • 该预留空间有助于提高 Flash 寿命和文件系统稳定性

ESP-IDF中如何挂载SD卡为littlefs文件系统?

​ 需要在代码中先初始化文件系统为littlefs;

esp_vfs_littlefs_conf_t conf = {
        .base_path = "/littlefs",
        .partition_label = "storage",
        .format_if_mount_failed = true,
        .dont_mount = false,
    };

​ 配置中选择littlefs支持。

menuconfig_SDMMC_support

LittleFS 的 “block_cycles” 默认值为 500;如果每个 block 擦写次数都超过该阈值,是否只能格式化分区来恢复?

block_cycles 是一个可配置的软件层阈值,用于主动触发块替换和磨损均衡操作,并不等同于 Flash 物理块的实际寿命上限。

当各个块的擦写次数都达到这个阈值后,文件系统确实可能更频繁地进行磨损均衡和垃圾回收,从而带来一定的性能下降;但这并不意味着只能通过格式化分区来“恢复”。

  • 如果硬件还没有达到寿命极限,格式化只能算是短期缓解手段,可能暂时减少均衡触发频率。
  • 如果硬件本身已经接近或达到寿命极限,格式化也无法从根本上解决问题。
  • 实际使用中也可以根据场景适当调大 block_cycles 的配置值。

如何使用 esp_mmap_assets 文件系统存储 .ttf 字体文件,并在 LVGL 中加载?

可以把字体资源放到单独目录中,并在 main 目录下的 CMakeLists.txt 中添加 spiffs_create_partition_assets,将字体目录打包为文件系统分区。

示例:

spiffs_create_partition_assets(fonts "../font_assets" FLASH_IN_PROJECT)

其中 ../font_assets 是 .ttf 字体文件所在目录。

esp_mmap_assets

ESP32-P4 的 SDIO 接口是否使用固定引脚?

解决方案:

ESP32-P4 提供两路 SDIO 接口,可连接两张 SD 卡:

  1. 卡 1 的 SDIO 接口使用固定引脚:CLK 为 GPIO43,CMD 为 GPIO44,DAT0 为 GPIO39,DAT1 为 GPIO40,DAT2 为 GPIO41,DAT3 为 GPIO42,DAT4 至 DAT7 为 GPIO45 至 GPIO48。
  2. 卡 2 的 SDIO 接口可配置为任意 GPIO。