如何扩大ESP32-WROOM32 4MB中的nvs分区

问题描述 投票:0回答:2

我需要扩大我的 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 大。

esp32 arduino-esp32 espressif-idf
2个回答
0
投票

参见:乐鑫关于分区表的 API 指南

app 类型的分区必须放置在与 0x10000 对齐的偏移处 (64 K)。如果将偏移字段留空,gen_esp32part.py 将 自动对齐分区。 如果指定未对齐的偏移量 对于应用程序分区,该工具将返回错误

我会尝试:

  • 让 ota_0 从 0x20000 开始,看看您是否可以接受剩余空间,或者;
  • 将代码从需要 nvs 更改为使用 spiffs,或者;
  • 使用 OTA 删除,或者;
  • 看看是否可以将 CONFIG_PARTITION_TABLE_OFFSET 从 0x8000 更改为更早的值。这是存储分区表的位置,也是该表从 0x9000 开始的原因。但是这里有一个人在PIO中对此有疑问......

0
投票

我发现弄乱 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!

© www.soinside.com 2019 - 2024. All rights reserved.