flash 读写demo
时间: 2023-08-22 14:03:51 浏览: 250
下面是一个简单的ESP32 Flash读写的示例代码:
```c
#include <stdio.h>
#include "esp_log.h"
#include "esp_system.h"
#include "nvs_flash.h"
static const char *TAG = "flash_demo";
void app_main()
{
// 初始化NVS闪存
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
// 如果没有可用的页或者发现新版本的NVS,擦除闪存并重新初始化
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
// 打开一个NVS命名空间
nvs_handle_t nvs_handle;
ret = nvs_open("storage", NVS_READWRITE, &nvs_handle);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to open NVS namespace");
return;
}
// 写入数据到NVS
int32_t value = 1234;
ret = nvs_set_i32(nvs_handle, "key", value);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to write data to NVS");
}
// 提交写入操作并关闭NVS
ret = nvs_commit(nvs_handle);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to commit NVS changes");
}
nvs_close(nvs_handle);
// 重新打开NVS
ret = nvs_open("storage", NVS_READWRITE, &nvs_handle);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to open NVS namespace");
return;
}
// 从NVS读取数据
int32_t read_value;
ret = nvs_get_i32(nvs_handle, "key", &read_value);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to read data from NVS");
} else {
ESP_LOGI(TAG, "Read value from NVS: %d", read_value);
}
// 关闭NVS
nvs_close(nvs_handle);
}
```
这个示例代码使用ESP-IDF提供的NVS(Non-volatile storage,非易失性存储)API来读写ESP32的闪存。首先,通过`nvs_flash_init`初始化NVS闪存,然后通过`nvs_open`打开一个NVS命名空间。在这个示例中,命名空间名称为`"storage"`。之后,使用`nvs_set_i32`将一个整数值写入NVS,这里的键名为`"key"`。写入操作完成后,通过`nvs_commit`提交写入操作,并通过`nvs_close`关闭NVS。
接下来,重新打开NVS,使用`nvs_get_i32`从NVS读取之前写入的整数值。最后,再次关闭NVS。
请注意,在使用ESP32进行Flash读写时,需要在配置中指定正确的闪存分区方案,并根据分区方案来操作闪存。可以使用ESP-IDF提供的分区表工具来生成分区表文件。
阅读全文