FatFs на ESP32 с esp-idf не может создать файл с расширением * .json

#fatfs #esp-idf #spiffs

#fatfs #esp-idf #spiffs

Вопрос:

Я хочу переключиться с SPIFFS на FAT в своих проектах Esp32 из-за шифрования. В моем примере проекта у меня есть это.

 esp_vfs_spiffs_conf_t conf = {
  .base_path = "/spiffs",
  .partition_label = NULL,
  .max_files = 5,   // This decides the maximum number of files that can be created on the storage
  .format_if_mount_failed = true
};
esp_err_t ret = esp_vfs_spiffs_register(amp;conf);

...

ESP_LOGI(TAG, "Opening file 1");
FILE *f = fopen("/spiffs/hello.json", "w");
if (f == NULL) {
    ESP_LOGE(TAG, "Failed to open file 1 for writing test");
}
ESP_LOGI(TAG, "Opening file 2");
FILE *f2 = fopen("/spiffs/hello.txt", "w");
if (f2 == NULL) {
    ESP_LOGE(TAG, "Failed to open file 2 for writing test");
    return ESP_FAIL;
}
  

Он работает нормально и создает оба файла, как и ожидалось, но это:

 esp_vfs_fat_mount_config_t conf = {
     .format_if_mount_failed = true,
     .max_files = 5,
     .allocation_unit_size = CONFIG_WL_SECTOR_SIZE
   };
esp_err_t ret = esp_vfs_fat_spiflash_mount("/fatfs", "storage", amp;conf, amp;s_wl_handle);    

ESP_LOGI(TAG, "Opening file 1");
FILE *f = fopen("/fatfs/hello.json", "w");
if (f == NULL) {
    ESP_LOGE(TAG, "Failed to open file 1 for writing test");
}
ESP_LOGI(TAG, "Opening file 2");
FILE *f2 = fopen("/fatfs/hello.txt", "w");
if (f2 == NULL) {
    ESP_LOGE(TAG, "Failed to open file 2 for writing test");
    return ESP_FAIL;
}
  

сбой для файла json.

 I (3672) example: Opening file 1
E (3672) example: Failed to open file 1 for writing test
I (3682) example: Opening file 2
...
  

Google до сих пор не дал мне ничего о FatFs, имеющих какие-либо проблемы с расширениями файлов. Может кто-нибудь помочь мне понять это?

Комментарии:

1. Можете ли вы изменить уровень отладки на Debug и опубликовать журналы?

2. Также проверьте, что esp_vfs_fat_spiflash_mount возвращает ESP_OK, возможно, fs не смонтирован…

Ответ №1:

Я надеюсь, что проблема уже решена, но я все равно отвечу, чтобы поддержать других разработчиков в подобной борьбе.

Я полагаю, это может произойти из-за того, что вы не включили длинные имена файлов для FATFS. Без поддержки LFN у вас может быть только три символа в расширении (и 8 в имени файла). Чтобы исправить это, пожалуйста, вызовите menuconfig using idf.py menuconfig , а затем перейдите в Component config -> FAT Filesystem support -> Long filename support -> Long filename buffer {in heap|on stack} .

Затем перестройте проект и проверьте, работает ли он сейчас.

Комментарии:

1. Я давно не работал над этим. Но, я думаю, это не было решено. Как можно скорее я перепроверю, но я думаю, что LFN был включен. Будет обновляться здесь, когда появятся новости. Спасибо.