完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们团队的项目使用 wear_levelling 示例项目中演示的 FatFs 文件系统来嵌入三个文本文件,每个文件最大 4KB。在 FAT 数据分区上启用闪存加密后,我们注意到第二个或第三个文件会周期性地完全损坏小字符串,或者在大文件的后半部分损坏。每次擦除并重新格式化闪存分区后都会出现这种情况,删除和替换文件后偶尔也会出现这种情况。对于给定的文件,损坏的值似乎是一致的 在启用闪存加密和安全启动 v2 的 ESP32-PICO-MINI-02 devkit 上进行一些修改后,在 wear_levelling 示例中重新创建了此行为。进一步的实验表明,当在 sdkconfig 中将 WL_SECTOR_SIZE 设置为 4096 或 0xB1000 字节(扇区大小为 512)时,当 FAT 分区大小至少为 0x84000 字节大时,该问题将消失。 闪存加密文档中指出,NVS存储库与闪存加密不兼容,但我们找不到对 FatFs 库的直接引用。闪存加密与 FAT 文件系统兼容吗?如果是这样,除了 FatFs 文档中描述的要求之外,是否还有其他最小分区大小要求以确保正常运行? 修改后的 wear_levelling 示例代码: 代码:全选 void app_main(void) { ESP_LOGI(TAG, "Mounting FAT filesystem"); // To mount device we need name of device partition, define base_path // and allow format partition in case if it is new one and was not formated before const esp_vfs_fat_mount_config_t mount_config = { .max_files = 4, .format_if_mount_failed = true, .allocation_unit_size = CONFIG_WL_SECTOR_SIZE }; esp_err_t err = esp_vfs_fat_spiflash_mount(base_path, "storage", &mount_config, &s_wl_handle); if (err != ESP_OK) { ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err)); return; } ESP_LOGI(TAG, "Opening file"); FILE *f = fopen("/spiflash/hello.txt", "wb"); if (f == NULL) { ESP_LOGE(TAG, "Failed to open file for writing"); return; } fprintf(f, "written using ESP-IDF %sn", esp_get_idf_version()); fclose(f); ESP_LOGI(TAG, "File written"); // Open file for reading ESP_LOGI(TAG, "Reading file"); f = fopen("/spiflash/hello.txt", "rb"); if (f == NULL) { ESP_LOGE(TAG, "Failed to open file for reading"); return; } char line[128]; fgets(line, sizeof(line), f); fclose(f); // strip newline char *pos = strchr(line, 'n'); if (pos) { *pos = ' |