ذخیره سازی داده های یک struct در nvs

این فایل رو تست کنید. این برای من کار می کنه. 1M برای nvs و ۲ تا 1M برای ota گذاشتم. اگر این هم به مشکل خورد، مشکل از کدتون هست چون من با آخرین نسخه esp-idf دارم از این فایل استفاده می کنم.

[upl-file uuid=8a0674b4-4c7c-49e7-964d-8b06b078ffa9 size=202B]partitions.txt[/upl-file]

آیا برای قسمت nvs یک پارتیشن داخل flash ساختید؟ داخل menuconfig یک قسمت هست که می تونید flash رو تکه تکه کنید و باید یک قسمت رو به nvs تخصیص بدید. از طرف دیگه داخل کد باید nvs رو برای اون پارتیشن init کنید و بعد با set blob می تونید داده ها رو ذخیره کنید و بعدا هم بخونیدشون. مدل ذخیره سازی هم به صورت key value pair هست.

من نوشتن دیتا به حجم حدودا 700 بایت روری فلش رو انجام داده بودم و اوکی بود. منتهی حجم که رفت بالا و نزدیک 13000 بایت شد ، دیگه نتونست بنویسه و خطای ESP_ERR_NVS_NOT_ENOUGH_SPACE میده. ولی نمیدونم چه کنم.

من فایل درست نکرده بودم. اومدم فایل رو ساختم ولی خطا میده از ساختار فایل. بیزحمت شما هم یه نگاه بندازید.

[upl-file uuid=5e5c8f4e-7561-45e6-94f2-3e0e12b20b40 size=240B]partitions.txt[/upl-file]

وقتی با این فایل میخوام کامپایل کنم و یا فایل sdkconfig رو داخل eclipse باز کنم این خطا رو میده :

[0/1] Re-running CMake...
-- ccache will be used for faster recompilation
-- Project is not inside a git repository, or git repository has no commits; will not use 'git describe' to determine PROJECT_VER.
-- Project version: 1
-- Building ESP-IDF components for target esp32
Loading defaults file E:/My_Projects/eclipse_workspace/RestFul_Server_V1.0/sdkconfig.defaults...
Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 438, in parse_int
return int(v, 0)
ValueError: invalid literal for int() with base 0: 'gw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 443, in parse_int
return keywords[v.lower()]
KeyError: 'gw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 109, in from_csv
res.append(PartitionDefinition.from_csv(line, line_no + 1))
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 286, in from_csv
res.subtype = res.parse_subtype(fields[2])
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 338, in parse_subtype
return parse_int(strval, SUBTYPES.get(self.type, {}))
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 445, in parse_int
raise InputError("Value '%s' is not valid. Known keywords: %s" % (v, ", ".join(keywords)))
gen_esp32part.InputError: Value 'gw' is not valid. Known keywords: ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 347, in <module>
main()
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 316, in main
target = ParttoolTarget(**target_args)
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 106, in __init__
partition_table = gen.PartitionTable.from_csv(f.read())
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 111, in from_csv
raise InputError("Error at line %d: %s" % (line_no + 1, e))
gen_esp32part.InputError: Error at line 4: Value 'gw' is not valid. Known keywords: ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs
Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 438, in parse_int
return int(v, 0)
ValueError: invalid literal for int() with base 0: 'gw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 443, in parse_int
return keywords[v.lower()]
KeyError: 'gw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 109, in from_csv
res.append(PartitionDefinition.from_csv(line, line_no + 1))
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 286, in from_csv
res.subtype = res.parse_subtype(fields[2])
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 338, in parse_subtype
return parse_int(strval, SUBTYPES.get(self.type, {}))
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 445, in parse_int
raise InputError("Value '%s' is not valid. Known keywords: %s" % (v, ", ".join(keywords)))
gen_esp32part.InputError: Value 'gw' is not valid. Known keywords: ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 347, in <module>
main()
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 316, in main
target = ParttoolTarget(**target_args)
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 106, in __init__
partition_table = gen.PartitionTable.from_csv(f.read())
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 111, in from_csv
raise InputError("Error at line %d: %s" % (line_no + 1, e))
gen_esp32part.InputError: Error at line 4: Value 'gw' is not valid. Known keywords: ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs
-- Could NOT find Perl (missing: PERL_EXECUTABLE)
-- Adding linker script E:/My_Projects/eclipse_workspace/RestFul_Server_V1.0/build/esp-idf/esp32/esp32_out.ld
-- Adding linker script C:/Users/AmiR/Desktop/esp-idf/components/esp32/ld/esp32.project.ld.in
-- Adding linker script C:/Users/AmiR/Desktop/esp-idf/components/esp32/ld/esp32.peripherals.ld
-- Adding linker script C:/Users/AmiR/Desktop/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-time.ld
-- Adding linker script C:/Users/AmiR/Desktop/esp-idf/components/esp_rom/esp32/ld/esp32.rom.ld
-- Adding linker script C:/Users/AmiR/Desktop/esp-idf/components/esp_rom/esp32/ld/esp32.rom.libgcc.ld
-- Adding linker script C:/Users/AmiR/Desktop/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-data.ld
-- Adding linker script C:/Users/AmiR/Desktop/esp-idf/components/esp_rom/esp32/ld/esp32.rom.syscalls.ld
-- Adding linker script C:/Users/AmiR/Desktop/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-funcs.ld
Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 438, in parse_int
return int(v, 0)
ValueError: invalid literal for int() with base 0: 'gw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 443, in parse_int
return keywords[v.lower()]
KeyError: 'gw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 109, in from_csv
res.append(PartitionDefinition.from_csv(line, line_no + 1))
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 286, in from_csv
res.subtype = res.parse_subtype(fields[2])
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 338, in parse_subtype
return parse_int(strval, SUBTYPES.get(self.type, {}))
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 445, in parse_int
raise InputError("Value '%s' is not valid. Known keywords: %s" % (v, ", ".join(keywords)))
gen_esp32part.InputError: Value 'gw' is not valid. Known keywords: ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 347, in <module>
main()
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 316, in main
target = ParttoolTarget(**target_args)
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 106, in __init__
partition_table = gen.PartitionTable.from_csv(f.read())
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 111, in from_csv
raise InputError("Error at line %d: %s" % (line_no + 1, e))
gen_esp32part.InputError: Error at line 4: Value 'gw' is not valid. Known keywords: ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs
CMake Error at C:/Users/AmiR/Desktop/esp-idf/components/esptool_py/project_include.cmake:223 (file):
file RELATIVE_PATH must be passed a full path to the file: FLASH_IN_PROJECT
Call Stack (most recent call first):
C:/Users/AmiR/Desktop/esp-idf/components/esptool_py/CMakeLists.txt:62 (esptool_py_flash_project_args)

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 438, in parse_int
return int(v, 0)
ValueError: invalid literal for int() with base 0: 'gw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 443, in parse_int
return keywords[v.lower()]
KeyError: 'gw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 109, in from_csv
res.append(PartitionDefinition.from_csv(line, line_no + 1))
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 286, in from_csv
res.subtype = res.parse_subtype(fields[2])
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 338, in parse_subtype
return parse_int(strval, SUBTYPES.get(self.type, {}))
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 445, in parse_int
raise InputError("Value '%s' is not valid. Known keywords: %s" % (v, ", ".join(keywords)))
gen_esp32part.InputError: Value 'gw' is not valid. Known keywords: ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 347, in <module>
main()
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 316, in main
target = ParttoolTarget(**target_args)
File "C:/Users/AmiR/Desktop/esp-idf/components/partition_table/parttool.py", line 106, in __init__
partition_table = gen.PartitionTable.from_csv(f.read())
File "C:UsersAmiRDesktopesp-idfcomponentspartition_tablegen_esp32part.py", line 111, in from_csv
raise InputError("Error at line %d: %s" % (line_no + 1, e))
gen_esp32part.InputError: Error at line 4: Value 'gw' is not valid. Known keywords: ota, phy, nvs, coredump, nvs_keys, efuse, esphttpd, fat, spiffs
-- Components: app_trace app_update asio bootloader bootloader_support bt cbor coap console cxx driver efuse esp-tls esp32 esp_adc_cal esp_common esp_eth esp_event esp_gdbstub esp_http_client esp_http_server esp_https_ota esp_https_server esp_local_ctrl esp_netif esp_ringbuf esp_rom esp_serial_slave_link esp_websocket_client esp_wifi espcoredump esptool_py expat fatfs freemodbus freertos heap idf_test jsmn json libsodium log lwip main mbedtls mdns mqtt newlib nghttp nvs_flash openssl partition_table perfmon protobuf-c protocol_examples_common protocomm pthread sdmmc soc spi_flash spiffs tcp_transport tcpip_adapter ulp unity vfs wear_levelling wifi_provisioning wpa_supplicant xtensa
-- Component paths: C:/Users/AmiR/Desktop/esp-idf/components/app_trace C:/Users/AmiR/Desktop/esp-idf/components/app_update C:/Users/AmiR/Desktop/esp-idf/components/asio C:/Users/AmiR/Desktop/esp-idf/components/bootloader C:/Users/AmiR/Desktop/esp-idf/components/bootloader_support C:/Users/AmiR/Desktop/esp-idf/components/bt C:/Users/AmiR/Desktop/esp-idf/components/cbor C:/Users/AmiR/Desktop/esp-idf/components/coap C:/Users/AmiR/Desktop/esp-idf/components/console C:/Users/AmiR/Desktop/esp-idf/components/cxx C:/Users/AmiR/Desktop/esp-idf/components/driver C:/Users/AmiR/Desktop/esp-idf/components/efuse C:/Users/AmiR/Desktop/esp-idf/components/esp-tls C:/Users/AmiR/Desktop/esp-idf/components/esp32 C:/Users/AmiR/Desktop/esp-idf/components/esp_adc_cal C:/Users/AmiR/Desktop/esp-idf/components/esp_common C:/Users/AmiR/Desktop/esp-idf/components/esp_eth C:/Users/AmiR/Desktop/esp-idf/components/esp_event C:/Users/AmiR/Desktop/esp-idf/components/esp_gdbstub C:/Users/AmiR/Desktop/esp-idf/components/esp_http_client C:/Users/AmiR/Desktop/esp-idf/components/esp_http_server C:/Users/AmiR/Desktop/esp-idf/components/esp_https_ota C:/Users/AmiR/Desktop/esp-idf/components/esp_https_server C:/Users/AmiR/Desktop/esp-idf/components/esp_local_ctrl C:/Users/AmiR/Desktop/esp-idf/components/esp_netif C:/Users/AmiR/Desktop/esp-idf/components/esp_ringbuf C:/Users/AmiR/Desktop/esp-idf/components/esp_rom C:/Users/AmiR/Desktop/esp-idf/components/esp_serial_slave_link C:/Users/AmiR/Desktop/esp-idf/components/esp_websocket_client C:/Users/AmiR/Desktop/esp-idf/components/esp_wifi C:/Users/AmiR/Desktop/esp-idf/components/espcoredump C:/Users/AmiR/Desktop/esp-idf/components/esptool_py C:/Users/AmiR/Desktop/esp-idf/components/expat C:/Users/AmiR/Desktop/esp-idf/components/fatfs C:/Users/AmiR/Desktop/esp-idf/components/freemodbus C:/Users/AmiR/Desktop/esp-idf/components/freertos C:/Users/AmiR/Desktop/esp-idf/components/heap C:/Users/AmiR/Desktop/esp-idf/components/idf_test C:/Users/AmiR/Desktop/esp-idf/components/jsmn C:/Users/AmiR/Desktop/esp-idf/components/json C:/Users/AmiR/Desktop/esp-idf/components/libsodium C:/Users/AmiR/Desktop/esp-idf/components/log C:/Users/AmiR/Desktop/esp-idf/components/lwip E:/My_Projects/eclipse_workspace/RestFul_Server_V1.0/main C:/Users/AmiR/Desktop/esp-idf/components/mbedtls C:/Users/AmiR/Desktop/esp-idf/components/mdns C:/Users/AmiR/Desktop/esp-idf/components/mqtt C:/Users/AmiR/Desktop/esp-idf/components/newlib C:/Users/AmiR/Desktop/esp-idf/components/nghttp C:/Users/AmiR/Desktop/esp-idf/components/nvs_flash C:/Users/AmiR/Desktop/esp-idf/components/openssl C:/Users/AmiR/Desktop/esp-idf/components/partition_table C:/Users/AmiR/Desktop/esp-idf/components/perfmon C:/Users/AmiR/Desktop/esp-idf/components/protobuf-c C:/Users/AmiR/Desktop/esp-idf/examples/common_components/protocol_examples_common C:/Users/AmiR/Desktop/esp-idf/components/protocomm C:/Users/AmiR/Desktop/esp-idf/components/pthread C:/Users/AmiR/Desktop/esp-idf/components/sdmmc C:/Users/AmiR/Desktop/esp-idf/components/soc C:/Users/AmiR/Desktop/esp-idf/components/spi_flash C:/Users/AmiR/Desktop/esp-idf/components/spiffs C:/Users/AmiR/Desktop/esp-idf/components/tcp_transport C:/Users/AmiR/Desktop/esp-idf/components/tcpip_adapter C:/Users/AmiR/Desktop/esp-idf/components/ulp C:/Users/AmiR/Desktop/esp-idf/components/unity C:/Users/AmiR/Desktop/esp-idf/components/vfs C:/Users/AmiR/Desktop/esp-idf/components/wear_levelling C:/Users/AmiR/Desktop/esp-idf/components/wifi_provisioning C:/Users/AmiR/Desktop/esp-idf/components/wpa_supplicant C:/Users/AmiR/Desktop/esp-idf/components/xtensa
-- Configuring incomplete, errors occurred!
See also "E:/My_Projects/eclipse_workspace/RestFul_Server_V1.0/build/CMakeFiles/CMakeOutput.log".
FAILED: build.ninja
C:UsersAmiR.espressif oolscmake.13.4incmake.exe -SE:My_Projectseclipse_workspaceRestFul_Server_V1.0 -BE:My_Projectseclipse_workspaceRestFul_Server_V1.0uild
ninja: error: rebuilding 'build.ninja': subcommand failed
Adding "flash"'s dependency "all" to list of commands with default set of options.
Executing action: all (aliases: build)
Running ninja in directory e:My_projectseclipse_workspace estful_server_v1.0uild
Executing "ninja all"...
ninja failed with exit code 1

ممنون دیروز درست شد. فقط فراموش کردم اینجا بنویسم.

سلام دوستان. من میخوام داخل فلش Esp32 ، دیتای یک استراکچر که حدودا 13 کیلو بایت هست رو ذخیره کنم. یوقتایی انجام میده، یوقتایی انجام نمیده و خطا میده. با eclipse کد میزنم براش. تو خود سایت در مورد ذخیره سازی اطلاعات فقط گفته اینا توابعش هستن ولی نگفته کدومها برای کار لازم و ضروری هست و کدومها انتخابی هستن. تو مثالها هم فقط مثال blob بدرد میخوره که اونم درست جواب نمیده.
از دوستان درخواست دارم اگر تابعی که درست جواب داده برای خوندن و نوشتن ، لطفا راهنمایی کنند.

` //===============================================================================================================
void InitUserKeyValues()
{
ESP_LOGI(TAG,"

InitUserKeyValues

");
esp_err_t err = nvs_flash_init_partition(PARTITION_NAME);
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
ESP_ERROR_CHECK(nvs_flash_erase_partition(PARTITION_NAME));
err = nvs_flash_init_partition(PARTITION_NAME);
}
}
//===============================================================================================================
bool ReadDataIn_NVS()
{
nvs_handle_t my_handle;
esp_err_t err = nvs_open(PARTITION_NAME, NVS_READWRITE, &my_handle);
if (err != ESP_OK)
{
ESP_LOGI(TAG,"Error (%s) opening NVS handle!
", esp_err_to_name(err));
}
else
{
size_t required_size = 0;
nvs_get_blob(my_handle, “_app_setting”, NULL, &required_size);
err = nvs_get_blob(my_handle , “_app_setting”,&_app_setting, &required_size);
//*_alldata = *_data;
ESP_LOGI(TAG,"required_size=%i
",required_size);
switch (err)
{
case ESP_OK:
ESP_LOGI(TAG,"Done
");
//printf("A Bandwidth = %d
", _alldata._user_data[0].Bandwidth);
break;
case ESP_ERR_NVS_NOT_FOUND:
ESP_LOGI(TAG,"A The value is not initialized yet!
");
InitDefaultValues();
esp_restart();
break;
default :
ESP_LOGI(TAG,"A Error (%s) reading!
", esp_err_to_name(err));
}
}
nvs_close(my_handle);
//ShowAllData();
return true;
}
//===============================================================================================================
bool SaveDataIn_NVS()
{
nvs_handle_t my_handle;
ShowAllData();
size_t required_size = sizeof(_app_setting);
ESP_LOGI(TAG,"AAA required_size=%i
",required_size);
esp_err_t err = nvs_open(PARTITION_NAME, NVS_READWRITE, &my_handle);
if (err != ESP_OK)
{
ESP_LOGI(TAG,“Error (%s) opening NVS handle!
“, esp_err_to_name(err));
}
else
{
nvs_get_blob(my_handle, “_app_setting”, NULL, &required_size);
err = nvs_set_blob(my_handle , “_app_setting”,&_app_setting, required_size);
ESP_LOGI(TAG,”%s”,(err != ESP_OK) ? "Failed!
" : "Done
");
ESP_LOGI(TAG,“Committing updates in NVS … “);
err = nvs_commit(my_handle);
ESP_LOGI(TAG,”%s”,(err != ESP_OK) ? "Failed!
" : "Done
");
}
// Close
nvs_close(my_handle);
return true;
} `

همونطور که اینجا میبینید (اطلاعات خود ماژول موقع بوت شدن هست :
I (58) boot: Partition Table:
I (62) boot: ## Label Usage Type ST Offset Length
I (69) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (77) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (84) boot: 2 factory factory app 00 00 00010000 00100000
I (92) boot: End of partition table

سه تا بخش داره و من یک بخش دیگه میخوام بهش اضافه کنم به نام gwdata با سایز 16 کیلو بایت. ولی تو فایل csv که میسازم ، از ساختار فایل خطا میگیره. درصورتیکه من از نمونه های خودش استفاده کردم و تغییرش دادم.

هر خط فایل partitions.csv به صورت زیر هست:
#Name, Type, SubType, Offset, Size
شما اول باید مقدار flash ای که esp32 تون داره رو مشخص کنید. (اگر از wroom32 استفاده می کنید، معمولا ۴مگ هست)
بعد مشخص کنید که برای هر قسمت چقدر احتیاج به فضا دارید.
لطفا فایل partitions.csv رو به صورت یک فایل برای من اینجا ارسال کنید. اینطوری که محتویاتش رو ارسال کردید، من متوجه نشدم چون بهم ریخته شده. (دقت کنید که وقتی فایل رو انتخاب می کنید اون پایین، آپلود فایل شروع میشه و قبل از زدن دکمه 'ارسال پاسخ'، صبر کنید تا آپلود تمام بشه و در پیشنمایش اون فایل رو ببینید.)

این پارتیشن تیبل منه :
I (58) boot: Partition Table:
I (62) boot: ## Label Usage Type ST Offset Length
I (69) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (77) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (84) boot: 2 factory factory app 00 00 00010000 00100000
I (92) boot: End of partition table

حالا چجوری میتونم یه پارتیشن بهش اضافه کنم که حجمش حداقل 15 کیلو باشه؟

تو تنظیمات بخش Partition Table سه تا گزینه هست :Single factory app , no OTA و گزینه دوم Factory app,tow OTA definitions و نهایتا گزینه سوم :Custom partition table CVS
پیشفرض روی گزینه اول هست. حالا برای اینکار که من بخوام 13000 بایت ذخیره کنم باید کدوم گزینه رو انتخاب کنم و مرحله بعدش چیه؟ ممنون میشم توضیح بدین.

نه با همون esp-idf

سلام دوست عزیز، برای پروگرم کردن و بیلد گرفتن، از arduino bootloader استفاده می کنید یا esp-idf ؟

این لینک رو هم اگر قبلا مطالعه نکردید یک سری بهش بزنید :

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/storage/nvs_flash.html

والا دیده بودم ولی خیلی با دقت نخونده بودم. من از مثالهای خودش بیشتر استفاده کردم.