ESP32-IDF给FATFS添加长文件名支持,更改_USE_LFN以支持大于8.3格式的文件名

ESP-IDF 框架下的 FATFS,默认使用的文件名格式是8.3短文件名
8.3格式,即文件名为8个字节,.后的后缀为3个字节。
所以一旦文件名称超出长度限制,就会造成如下显示。
在这里插入图片描述


配置IDF工程,以使FATFS支持长文件名


8个字节长度的文件名,用起来实在不够,起码命名起来不大方便。

IDF框架的文件系统,内嵌了开源的FATFSFatFs 是面向小型嵌入式系统的一种通用的 FAT 文件系统。其程序和工作区的资源占用都非常小,可以轻松被整合到资源有限的小型微控制器中。

我们知道,FATFS长文件名的支持,需要更改 _USE_LFN为 2/3。其被定义在 ffconf.h 文件内。

而万能的IDF框架早已考虑到了这些,其对 FATFS 的代码进行部分修改,以能够使用ESP32堆/栈,来支持长文件名。

想要FF_USE_LFN 的值为2,只需要在工程中定义CONFIG_FATFS_LFN_STACK即可。
在这里插入图片描述


IDF工程中,CONFIG_开头的宏定义,通常存在于sdkconfig配置文件中,其可通过SDK Configuration Editor (menuconfig)来进行图形化配置,而用不着拿手敲。

现在搜索整个工程,因为 CONFIG_FATFS_LFN_STACK是未定义的,所以编译的时候会按照FF_USE_LFN 为0来处理,自然不支持长文件名。

下面配置IDF工程,使CONFIG_FATFS_LFN_STACKsdkconfig中被定义。

  • 点击Vscode左下角的图标,SDK Configuration Editor (menuconfig)
    在这里插入图片描述
  • 搜索 CONFIG_FATFS_LFN_STACK,将匹配到的设置项勾选,最后点击保存。
    在这里插入图片描述
  • 进行编译。等待编译完成。
  • 编译完成后搜索 CONFIG_FATFS_LFN_STACK,可以看到其已经存在。长文件名已被支持。
    在这里插入图片描述
  • 下载、运行。现在看到的就是完整的长文件名
    在这里插入图片描述

测试代码


完整工程*:Easyio 开源库工程的 Demo - 37_JPG_LCD_DMA_SD_PHOTO_ALBUM

Demo 功能为:制作一个用SD卡存储照片的电子相册,它会读取SD卡/pic目录下的所有jpg图片,依次进行解码并显示在320x240分辨率的液晶屏上。

因为使用了IDF虚拟文件系统 (VFS),所以其接口格式与标准c文件IO几乎一样,使用起来更为方便。

第三方IDF工程如何使用 EasyioESP32开源驱动库Easyio的使用

主要功能片段:

    #include "easyio.h"
    
    // SD卡初始化、FATFS文件系统挂载。总线使用SPI模式,20MHz。
    sdmmc_card_t* card = sd_card_fatfs_spi_init();
    while (!card) { // 验证错误,如果返回值为0,则SD卡初始化及FATFS挂载失败,重试
        ESP_LOGE(TAG, "Failed !! %d Retry!!", false);
        vTaskDelay(200 / portTICK_PERIOD_MS);
        card = sd_card_fatfs_spi_init();
    }

    DIR *dir;
    struct dirent *ptr;
    // 列表显示 /pic目录下所有文件的文件名
    // 如需>8.3的长文件名,需要设置SDK Configuration中的CONFIG_FATFS_LFN_STACK
    dir = opendir(MOUNT_POINT"/pic");
    printf("file list:\n");
    while((ptr = readdir(dir)) != NULL) {
        printf("\t%s\n", ptr->d_name);
    }
    closedir(dir);

更多内容,在同专栏 ESP32Easyio 使用教程:ESP32开源驱动库Easyio的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值