我需要扩大我的 nvs 分区以存储更多数据。下面是我理想的分区星座:
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x8000,
otadata, data, ota, 0x11000, 0x2000,
app0, app, ota_0, 0x13000, 0x1E0000,
app1, app, ota_1, 0x1F3000,0x1E0000,
spiffs, data, spiffs, 0x3D3000,0x2D000,
但是,在构建时,我收到以下错误:
Partition app0 invalid: Offset 0x13000 is not aligned to 0x10000
*** [.pio/build/esp32dev/partitions.bin] Error 2
现在我的问题是:app0 是否总是必须从 0x10000 开始? 如何应用上面的分区表?
使用 VScode、Platform IO 和框架 arduinoespressif32。我确实需要 OTA,并且我的应用程序部分必须至少为 0x1E0000 大。
参见:乐鑫关于分区表的 API 指南:
app 类型的分区必须放置在与 0x10000 对齐的偏移处 (64 K)。如果将偏移字段留空,gen_esp32part.py 将 自动对齐分区。 如果指定未对齐的偏移量 对于应用程序分区,该工具将返回错误。
我会尝试:
我发现弄乱 Arduino 的默认 NVS 分区会导致无数的问题,我想要一个非常大的 NVS 分区,以便在数字快速变化的情况下实现良好的磨损均衡...由于我没有使用 spiffs,我的解决方案是将 spiffs 更改为 nvs2,如下所示如下..
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x330000,
app1, app, ota_1, 0x340000,0x330000,
nvs2, data, nvs, 0x670000,0x180000,
现在您有 2 个 nvs 分区,您可以在小型默认 nvs 中存储缓慢变化的首选项,并在巨大的 nvs2 中存储快速变化的首选项(如范围跟踪或计数器),以获得最佳磨损均衡!当然,如果需要,您也可以将较大的上部区域拆分为 nvs2 和 spiffs!