RMUL2025/hw/bsp/esp32-c3-idf/drivers/bsp_flash.c

76 lines
1.6 KiB
C

#include "bsp_flash.h"
#include "nvs.h"
#include "nvs_flash.h"
#define STORAGE_NAMESPACE "storage"
bsp_status_t bsp_flash_init() {
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES ||
err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
// 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);
return err == ESP_OK ? BSP_OK : BSP_ERR;
}
size_t bsp_flash_check_blog(const char* name) {
nvs_handle_t my_handle = 0;
esp_err_t err = ESP_OK;
size_t required_size = 0;
// Open
err = nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
return err;
}
nvs_get_blob(my_handle, name, NULL, &required_size);
nvs_close(my_handle);
return required_size;
}
void bsp_flash_get_blog(const char* name, uint8_t* buff, uint32_t len) {
nvs_handle_t my_handle = 0;
esp_err_t err = ESP_OK;
if (bsp_flash_check_blog(name) != len) {
return;
}
// Open
err = nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
return;
}
nvs_get_blob(my_handle, name, buff, (size_t*)(&len));
nvs_close(my_handle);
}
void bsp_flash_set_blog(const char* name, const uint8_t* buff, uint32_t len) {
nvs_handle_t my_handle = 0;
esp_err_t err = ESP_OK;
size_t required_size = 0;
// Open
err = nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
return;
}
nvs_set_blob(my_handle, name, buff, len);
err = nvs_commit(my_handle);
nvs_close(my_handle);
}