ESP32 NVS获取存储值失败,ESP_ERR_NVS_NOT_FOUND (0x1102) &g



主板:ESP32-WROOM, Flash大小为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

分区:

# expressif ESP32分区表#名称,类型,子类型,偏移量,大小,标志神、数据nvs 0 x9000 16 k,otadata、数据在线旅行社0 xd000 8 k,phy_init、数据、phy 0 xf000 4 k,工厂,工厂应用,0 x10000 8 m,ota_0,应用,ota_0 0 x810000 1 m,ota_1,app,ota_1,0x910000,1M,

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

谢谢!

更新:似乎测试板闪存损坏。我试了另一个,代码工作得很好。

看一下文档中nvs_set_u8()的注释:

注意,在调用nvs_commit函数之前,实际存储不会更新。

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

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

最新更新