乐鑫技术交流
直播中

klysa

14年用户 1336经验值
私信 关注
[问答]

ESP32-WROVER-B spiffs初始化失败,报错ESP_ERR_INVALID_ARG怎么解决?

芯片:ESP32-WROVER-B
IDF版本:release/v4.3
开发环境:Windows10

各位好,我遇到spiffs初始化失败的问题,但我感觉我给的config应该没啥问题?
esp_vfs_spiffs_conf_t conf = {
        .base_path = "/abcdefghi_files", .partition_label = NULL, .max_files = 4, .format_if_mount_failed = false};
整段代码如下
void storageInit() {    static const char* tag = "storageInit";    ESP_LOGD(tag, "storageInit() called");    esp_vfs_spiffs_conf_t conf = {        .base_path = "/abcdefghi_files", .partition_label = NULL, .max_files = 4, .format_if_mount_failed = false};    // Use settings defined above to initialize and mount SPIFFS filesystem.    // Note: esp_vfs_spiffs_register is an all-in-one convenience function.    esp_err_t ret = esp_vfs_spiffs_register(&conf);    if (ret != ESP_OK) {        if (ret == ESP_FAIL) {            ESP_LOGE(tag, "Failed to mount or format filesystem");            throw std::runtime_error("fail to mount");        } else if (ret == ESP_ERR_NOT_FOUND) {            ESP_LOGE(tag, "Failed to find SPIFFS partition");            throw std::runtime_error("no partition");        } else {            ESP_LOGE(tag, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));            throw std::runtime_error("fail to init");        }        return;    }    size_t total = 0, used = 0;    ret = esp_spiffs_info(NULL, &total, &used);    if (ret != ESP_OK) {        ESP_LOGE(tag, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));    } else {        ESP_LOGD(tag, "Partition size: total: %d, used: %d", total, used);    }}
然后串口打印如下
D (1823) storageInit: storageInit() called
D (1833) partition: Loading the partition table
D (1843) SPIFFS: SPIFFS_mount  sz:0 logpgsz:0 logblksz:0 perasz:0 addr:00000000 fdsz:192 cachesz:1124

D (1923) SPIFFS: page index byte len:         256

D (1923) SPIFFS: object lookup pages:         1

D (1923) SPIFFS: page pages per block:        16

D (1923) SPIFFS: page header length:          5

D (1933) SPIFFS: object header index entries: 87

D (1933) SPIFFS: object index entries:        124

D (1943) SPIFFS: available file descriptors:  4

D (1943) SPIFFS: free blocks:                 255

D (1953) SPIFFS: SPIFFS_unmount

E (1953) storageInit: Failed to initialize SPIFFS (ESP_ERR_INVALID_ARG)
请问这个ESP_ERR_INVALID_ARG是怎么导致的?

我的sdkconfig里spiffs相关的内容如下
#
# SPIFFS Configuration
#
CONFIG_SPIFFS_MAX_PARTITIONS=3

#
# SPIFFS Cache Configuration
#
CONFIG_SPIFFS_CACHE=y
CONFIG_SPIFFS_CACHE_WR=y
# CONFIG_SPIFFS_CACHE_STATS is not set
# end of SPIFFS Cache Configuration

CONFIG_SPIFFS_PAGE_CHECK=y
CONFIG_SPIFFS_GC_MAX_RUNS=10
# CONFIG_SPIFFS_GC_STATS is not set
CONFIG_SPIFFS_PAGE_SIZE=256
CONFIG_SPIFFS_OBJ_NAME_LEN=128
# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set
CONFIG_SPIFFS_USE_MAGIC=y
CONFIG_SPIFFS_USE_MAGIC_LENGTH=y
CONFIG_SPIFFS_META_LENGTH=4
CONFIG_SPIFFS_USE_MTIME=y

#
# Debug Configuration
#
CONFIG_SPIFFS_DBG=y
CONFIG_SPIFFS_API_DBG=y
CONFIG_SPIFFS_GC_DBG=y
# CONFIG_SPIFFS_CACHE_DBG is not set
CONFIG_SPIFFS_CHECK_DBG=y
CONFIG_SPIFFS_TEST_VISUALISATION=y
# end of Debug Configuration
# end of SPIFFS Configuration
partition如下:
# Name,   Type, SubType, Offset,  Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,      data, nvs,     0x9000,  0x6000,
phy_init, data, phy,     0xf000,  0x1000,
factory,  app,  factory, 0x10000, 1M,
storage,  data, spiffs,  ,        1M,
storage里面只有一个文件,文件名长度24字节,文件大小46字节
                          

回帖(1)

王浩

2024-6-22 15:22:56
从您提供的信息来看,您在使用ESP32-WROVER-B时遇到了SPIFFS初始化失败的问题,错误代码为ESP_ERR_INVALID_ARG。以下是一些建议来解决这个问题:

1. 检查SPIFFS分区配置:请确保您在`menuconfig`中正确配置了SPIFFS分区。您可以在`menuconfig`的`Component config` -> `SPIFFS`部分进行配置。确保选择了正确的分区大小和分区表。

2. 检查`esp_vfs_spiffs_conf_t`结构体的配置:您提供的配置看起来没有问题,但请确保`base_path`的长度不超过8个字符,因为SPIFFS的路径长度限制为8个字符。

3. 检查分区表:请确保您的分区表包含SPIFFS分区,并且分区大小足够。您可以使用`esptool.py`查看分区表:

```
esptool.py --port COMx partition_table
```

4. 检查SPIFFS初始化代码:请确保您在`storageInit()`函数中正确调用了`esp_vfs_spiffs_register()`和`esp_spiffs_mount()`函数。以下是一个示例:

```c
void storageInit() {
    static const char* tag = "storageInit";
    ESP_LOGD(tag, "storageInit() called");

    esp_vfs_spiffs_conf_t conf = {
        .base_path = "/spiffs",
        .partition_label = NULL,
        .max_files = 5,
        .format_if_mount_failed = false
    };

    // 初始化SPIFFS文件系统
    esp_err_t ret = esp_vfs_spiffs_register(&conf);
    if (ret != ESP_OK) {
        if (ret == ESP_FAIL) {
            ESP_LOGE(tag, "Failed to mount or format filesystem");
        } else if (ret == ESP_ERR_NOT_FOUND) {
            ESP_LOGE(tag, "Failed to find SPIFFS partition");
        } else {
            ESP_LOGE(tag, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));
        }
        return;
    }

    size_t total = 0, used = 0;
    ret = esp_spiffs_info(NULL, &total, &used);
    if (ret != ESP_OK) {
        ESP_LOGE(tag, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));
    } else {
        ESP_LOGI(tag, "Partition size: total: %d, used: %d", total, used);
    }
}
```

5. 检查日志输出:如果问题仍然存在,请检查您的日志输出,看看是否有其他错误或警告信息。

6. 更新IDF版本:虽然您使用的是release/v4.3版本,但建议您尝试更新到最新版本的IDF,以确保所有功能和修复都是最新的。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分