esp32跑lvgl使用LittleFS文件系统

环境lvgl V9.3+platformio,强烈推荐使用新版本,新版本对于v8集合很多库

IDF可以类似修改库

littlefs介绍:

ESP32之前的文件系统实现通常是SPIFFS(Serial Peripheral Interface Flash File System)。在ESP32的早期版本中,SPIFFS是默认的文件系统,主要用来处理SPI Flash上的文件存储。随着时间的推移,LittleFS被提出并成为了更推荐的替代方案。

LittleFS 与 SPIFFS 的对比

1. 设计目标
  • SPIFFS:最初设计时针对低资源设备,旨在提供简单的文件存储功能。它是一种非常轻量的文件系统,但它的实现没有充分考虑到闪存的长期耐用性和性能。

  • LittleFS:比SPIFFS更加现代化,专门为闪存存储优化,支持日志式写入,能有效地减少闪存的写入次数,从而延长闪存的使用寿命。

2. 闪存友好性
  • SPIFFS:存在闪存擦写问题,特别是当频繁写入时,可能导致闪存出现坏块。SPIFFS的写入方式简单,但在高频写入的情况下并不理想。

  • LittleFS:采用了写入日志和擦除块的方式,有效避免了频繁写入同一区域的闪存,从而减少闪存损耗。它更适合于高频率的读写操作,能更好地处理闪存的磨损问题。

3. 性能
  • SPIFFS:SPIFFS相对于LittleFS来说,在小文件的处理和闪存的管理上表现稍逊。尤其在处理大量小文件或大文件时,性能可能不如LittleFS。

  • LittleFS:LittleFS设计上更适合高效处理小文件,支持更快的读取速度,同时在写入时具有更好的优化,适合在ESP32这类带有闪存的嵌入式系统上使用。

4. 数据完整性与崩溃恢复
  • SPIFFS:SPIFFS对数据完整性的保障比较有限,一旦系统崩溃或重启,可能会导致文件系统损坏。它不像LittleFS那样能够提供有效的崩溃恢复。

  • LittleFS:LittleFS支持日志式写入操作,具有更好的崩溃恢复能力,能够有效防止因为系统崩溃或断电而导致的文件损坏。

5. 兼容性
  • SPIFFS:SPIFFS在早期版本的ESP32中使用较广泛,但随着时间的推移,开发者逐渐发现其不足,尤其是在多次写入闪存时容易导致问题。

  • LittleFS:LittleFS是ESP32开发者社区推荐的新标准,虽然它的兼容性和支持程度稍微逊色于SPIFFS,但在长远来看,LittleFS的优势更加明显。它的兼容性逐渐变得更强,尤其在ESP-IDF 4.x及以上版本中,LittleFS已经成为推荐的文件系统。

6. 内存占用
  • SPIFFS:由于其较为简单的设计,SPIFFS的内存占用较低,但在高频读写和大容量存储时,内存占用会逐渐增加。

  • LittleFS:LittleFS也相对轻量,但在数据管理上进行了更多的优化,因此内存占用可能稍高于SPIFFS,但这种增加是为了提高系统的稳定性和性能。

esp32使用lvgl启动littleFS文件系统

在PlatformIo.中设置littlefs

在platformIo.ini中加入

board_build.filesystem = littlefs

board_build.partitions = default_4MB_spiffs.csv

在platformIo.ini同路径下创建default_4MB_spiffs.csv文件并写入

这里是程序固件4M,littefs也是4M

注意:8Mflash的程序最大4M

# Name,   Type, SubType, Offset,   Size,      Flags
nvs,      data, nvs,     0x9000,   0x5000,
app,      app,  factory, 0x10000,  0x400000,
spiffs,   data, spiffs,  0x410000, 0x3F0000,

然后在src文件夹的同级建立data文件夹,把要的文件放在data文件夹下

上传文件

点蚂蚁头后点Upload Filesystem Image

用下面代码测试是否上传成功,他会串口打印上传了什么文件

 #include <Arduino.h>
#include "LittleFS.h"
void setup() {
  Serial.begin(9600);
  Serial.setDebugOutput(true);
  Serial.println();
if(!LittleFS.begin()){
   Serial.println("Still failed after format");
   return;
 }
  Serial.println("Listing files:");
File root = LittleFS.open("/");
while(File file = root.openNextFile()){
  Serial.println(file.name());
  }
}

如果没有的话可以格式化一下在上传

  // 格式化 LittleFS
  if (LittleFS.format()) {
    Serial.println("LittleFS 格式化成功");
  } else {
    Serial.println("LittleFS 格式化失败");
  }
}

lvgl设置

只要使用lvglv9.30,配置就很简单,已经集合好了

只要在lv_conf.h里修改

/** API for Arduino LittleFs. */
#define LV_USE_FS_ARDUINO_ESP_LITTLEFS 1 //启动esp32的LITTLEFS库已经写好了
#if LV_USE_FS_ARDUINO_ESP_LITTLEFS
    #define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER 'L'  /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */
    #define LV_FS_ARDUINO_ESP_LITTLEFS_PATH ""      /**< Set the working directory. File/directory paths will be appended to it. */
#endif

如果要显示图像打开这个宏

#define LV_USE_TJPGD 1

测试

 lv_fs_arduino_esp_littlefs_init();//初始化littlefs        
lv_obj_t * img = lv_img_create(lv_scr_act());
lv_img_set_src(img, "L:/xx.jpg");//修改图片名称,或者使用bin文件
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值