OTA升级后nvs储存的数据部分被破坏
Posted: Tue Sep 19, 2023 4:04 am
by bifenggang
idf5.1,外部flash 16MB,分区表如下
# 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, , 1M,
otadata, data, ota, , 8K,
phy_init, data, phy, , 4K,
factory, app, factory, , 4M,
ota_0, app, ota_0, , 4M,
ota_1, app, ota_1, , 4M,
发现OTA后会有些储存数据损坏,请问有办法解决吗?
Re: OTA升级后nvs储存的数据部分被破坏
Posted: Tue Sep 19, 2023 4:46 am
by ESP_Penguin_Helper
请问具体是如何损坏的。按理说 OTA 升级只会涉及 OTA 分区,不会影响到 NVS。
Re: OTA升级后nvs储存的数据部分被破坏
Posted: Tue Sep 19, 2023 7:20 am
by bifenggang
就是升级后储存的数有的会变成乱码,现在发现有时候重启也会造成数据损坏,请问可以从那些方面查找问题呢
Re: OTA升级后nvs储存的数据部分被破坏
Posted: Tue Sep 19, 2023 7:25 am
by bifenggang
我发现,为了减少不同组件之间键名的潜在冲突,NVS 将每个键值对分配给一个命名空间。命名空间的命名规则遵循键名的命名规则,例如,最多可占 15 个字符。此外,单个 NVS 分区最多只能容纳 254 个不同的命名空间。命名空间的名称在调用 nvs_open() 或 nvs_open_from_partition 中指定,调用后将返回一个不透明句柄,用于后续调用 nvs_get_*、nvs_set_* 和 nvs_commit 函数。这样,一个句柄关联一个命名空间,键名便不会与其他命名空间中相同键名冲突。请注意,不同 NVS 分区中具有相同名称的命名空间将被视为不同的命名空间。请问单个NVS分区代表时partitions里面的分区还是#define STORAGE_NAMESPACE "storage"这个分区呢?
Re: OTA升级后nvs储存的数据部分被破坏
Posted: Tue Sep 19, 2023 9:36 am
by ESP_Penguin_Helper
单个NVS分区代表的是分区表里面的一个 NVS 分区。
比如分区表里有 aaa 和 bbb 两个 NVS 分区,则你可以分别在这两个 NVS 分区里使用同名的如 ccc 的命名空间。
Code: Select all
#define STORAGE_NAMESPACE "storage"
指的是一个叫做 "storage" 命名空间。通过 nvs_open 指定他后,可以通过 nvs 的函数来进行调用。类似于一个文件夹的名字,这个 "storage" 的命名可以自行更改。
Re: OTA升级后nvs储存的数据部分被破坏
Posted: Wed Sep 20, 2023 2:40 am
by bifenggang
你好,最终还是没有解决我最初的问题,就是NVS分区在OTA时遭到损坏,我怀疑是不是flash擦除是按页导致的擦除过界呢?或者还有其他方面的原因,麻烦给个查找的方向建议
Re: OTA升级后nvs储存的数据部分被破坏
Posted: Wed Sep 20, 2023 3:30 am
by ESP_Penguin_Helper
可以提供 OTA 进程以及 OTA 完成后固件重启运行的完整日志吗?