NVS is used to store PHY calibration data, WiFi configuration, and BT configuration. Previously BT examples did not call nvs_flash_init, relying on the fact that it is called during PHY init. However PHY init did not handle possible NVS initialization errors. This change moves PHY init procedure into the application, and adds diagnostic messages to BT config management routines if NVS is not initialized.
85 lines
2.7 KiB
C
85 lines
2.7 KiB
C
/* Non-Volatile Storage (NVS) Read and Write a Value - Example
|
|
|
|
For other examples please check:
|
|
https://github.com/espressif/esp-idf/tree/master/examples
|
|
|
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
|
|
|
Unless required by applicable law or agreed to in writing, this
|
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
CONDITIONS OF ANY KIND, either express or implied.
|
|
*/
|
|
#include <stdio.h>
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
#include "esp_system.h"
|
|
#include "nvs_flash.h"
|
|
#include "nvs.h"
|
|
|
|
void app_main()
|
|
{
|
|
// Initialize NVS
|
|
esp_err_t err = nvs_flash_init();
|
|
if (err == ESP_ERR_NVS_NO_FREE_PAGES) {
|
|
// NVS partition was truncated and needs to be erased
|
|
// Retry nvs_flash_init
|
|
ESP_ERROR_CHECK(nvs_flash_erase());
|
|
err = nvs_flash_init();
|
|
}
|
|
ESP_ERROR_CHECK( err );
|
|
|
|
// Open
|
|
printf("\n");
|
|
printf("Opening Non-Volatile Storage (NVS) handle... ");
|
|
nvs_handle my_handle;
|
|
err = nvs_open("storage", NVS_READWRITE, &my_handle);
|
|
if (err != ESP_OK) {
|
|
printf("Error (%d) opening NVS handle!\n", err);
|
|
} else {
|
|
printf("Done\n");
|
|
|
|
// Read
|
|
printf("Reading restart counter from NVS ... ");
|
|
int32_t restart_counter = 0; // value will default to 0, if not set yet in NVS
|
|
err = nvs_get_i32(my_handle, "restart_conter", &restart_counter);
|
|
switch (err) {
|
|
case ESP_OK:
|
|
printf("Done\n");
|
|
printf("Restart counter = %d\n", restart_counter);
|
|
break;
|
|
case ESP_ERR_NVS_NOT_FOUND:
|
|
printf("The value is not initialized yet!\n");
|
|
break;
|
|
default :
|
|
printf("Error (%d) reading!\n", err);
|
|
}
|
|
|
|
// Write
|
|
printf("Updating restart counter in NVS ... ");
|
|
restart_counter++;
|
|
err = nvs_set_i32(my_handle, "restart_conter", restart_counter);
|
|
printf((err != ESP_OK) ? "Failed!\n" : "Done\n");
|
|
|
|
// Commit written value.
|
|
// After setting any values, nvs_commit() must be called to ensure changes are written
|
|
// to flash storage. Implementations may write to storage at other times,
|
|
// but this is not guaranteed.
|
|
printf("Committing updates in NVS ... ");
|
|
err = nvs_commit(my_handle);
|
|
printf((err != ESP_OK) ? "Failed!\n" : "Done\n");
|
|
|
|
// Close
|
|
nvs_close(my_handle);
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
// Restart module
|
|
for (int i = 10; i >= 0; i--) {
|
|
printf("Restarting in %d seconds...\n", i);
|
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
|
}
|
|
printf("Restarting now.\n");
|
|
fflush(stdout);
|
|
esp_restart();
|
|
}
|