arduino - ESP32 NVS 获取存储值失败,并显示 ESP_ERR_NVS_NOT_FOUND (0x1102)

标签 arduino esp32 persistent-storage esp-idf

开发板:ESP32-WROOM,具有 16MB 闪存

如标题:读取写入 ESP32 板 NVS 分区的值失败,错误代码 4354 (0x1102),对应 ESP_ERR_NVS_NOT_FOUND。

官方 ESP API 页面错误: ESP_ERR_NVS_NOT_FOUND = Id 命名空间尚不存在,模式为 NVS_READONLY

我无法理解为什么,因为我使用正确的命名空间和 NVS_READWRITE 标志进行初始化。

代码:

esp_err_t ret = 0;
nvs_handle handler = 0;
ret = nvs_flash_init_partition("nvs");
log_e("nvs_flash_init_partition CODE: %d", ret);

delay(500);

ret = nvs_open_from_partition("nvs", "tele", NVS_READWRITE, &handler);
log_e("nvs_open CODE: %d", ret);

delay(500);

ret = nvs_set_u8(handler, "kk", 7);
log_e("nvs_set_u8 CODE: %d", ret);

delay(500);

ret = nvs_commit(handler);
log_e("nvs_commit CODE: %d", ret);

delay(500);


int8_t max_buffer_size = 256; 
ret = nvs_get_i8(handler, "kk", &max_buffer_size);
log_e("nvs_get_u8 CODE: %d", ret);
log_e("nvs_get_u8 STORED: %d", max_buffer_size);

delay(500);

ret = nvs_flash_deinit_partition("nvs");
log_e("nvs_flash_deinit_partition CODE: %d", ret);

nvs_close(handler);

注意:我也尝试过,没有延迟:结果相同。

输出:

begin(): nvs_flash_init_partition CODE: 0
begin(): nvs_open CODE: 0
begin(): nvs_set_u8 CODE: 0
begin(): nvs_commit CODE: 0
begin(): nvs_get_u8 CODE: 4354
begin(): nvs_get_u8 STORED: 0
begin(): nvs_flash_deinit_partition CODE: 0

分区:

 # Espressif ESP32 Partition Table
# Name, Type, SubType, Offset, Size, Flags

nvs,data,nvs,0x9000,16K,
otadata,data,ota,0xd000,8K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,8M,
ota_0,app,ota_0,0x810000,1M,
ota_1,app,ota_1,0x910000,1M,

我做错了什么吗?我错过了什么吗?

谢谢!

更新:测试板闪存似乎已损坏。我尝试了另一个代码,代码运行良好。

最佳答案

查看 nvs_set_u8() 文档中的此注释:

Note that actual storage will not be updated until nvs_commit function is called.

因此,在 nvs_set_u8() 之后立即添加对 nvs_commit() 的调用:

ret = nvs_commit(handler);
log_e("nvs_commit CODE: %d", ret);

关于arduino - ESP32 NVS 获取存储值失败,并显示 ESP_ERR_NVS_NOT_FOUND (0x1102),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66121308/

相关文章:

macos - 写入 MAC 的串行端口以与 Arduino 通信(fopen(/dev/tty.usbmodem1431)永远挂起)

c++ - 从数组类属性填充并执行回调

esp32 - `Brownout detector was trigerred`的异常处理

redis - esp32和esp8266客户端如何连接redis数据库

docker - Zookeeper Pod无法访问已安装的持久卷声明

C++,如何在结构中引用类方法?

android-webview - ESP32 httpd : Header fields are too long for the server to interpret

kubernetes - 如何在kubeflow中为用户pvc指定存储类

database - 图数据库如何将数据存储到持久存储中?

arduino - 如何通过 ESP8266 创建 TCP 服务器?