esp32s3 内部flash读取写入
时间: 2025-02-16 08:43:52 浏览: 68
### ESP32-S3 内部 Flash 读取写入方法
对于 ESP32-S3 设备而言,内部 Flash 的访问主要通过特定 API 函数来完成。这些函数允许开发者轻松地执行诸如擦除、写入以及从指定地址处读取数据的操作。
#### 使用 `esp_flash` 库进行基本操作
为了简化对 Flash 存储器的操作过程,Espressif 提供了一个名为 `esp_flash` 的库[^1]。此库包含了用于管理 Flash 操作的各种接口,使得用户可以方便地调用相应的方法来进行所需的数据处理工作。
#### 示例代码展示
下面给出一段简单的 C++ 程序片段作为例子,展示了怎样利用上述提到的功能去往 Flash 中存储一些信息,并随后将其取出显示出来:
```cpp
#include "esp_system.h"
#include "nvs_flash.h"
#define EXAMPLE_NVS_NAMESPACE "storage"
#define EXAMPLE_KEY "example_key"
void setup() {
Serial.begin(115200);
// 初始化 NVS
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
// 如果 NVS 分区为空,则恢复默认设置
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
writeDataToFlash();
readDataFromFlash();
}
void loop(){}
// 向 Flash 写入数据
void writeDataToFlash(){
nvs_handle my_handle;
err = nvs_open(EXAMPLE_NVS_NAMESPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK){
printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));
return;
}
const char* data = "Hello World";
size_t length = strlen(data)+1; // 加一表示字符串结尾符 '\0'
err = nvs_set_str(my_handle, EXAMPLE_KEY, data);
if (err != ESP_OK){
printf("Error (%s) writing to NVS!\n", esp_err_to_name(err));
nvs_close(my_handle);
return;
}
// 提交更改到闪存中
err = nvs_commit(my_handle);
if (err != ESP_OK){
printf("Error (%s) committing updates.\n", esp_err_to_name(err));
}
nvs_close(my_handle);
printf("Write Success\n");
}
// 从 Flash 读取数据
void readDataFromFlash(){
nvs_handle my_handle;
err = nvs_open(EXAMPLE_NVS_NAMESPACE, NVS_READONLY, &my_handle);
if (err != ESP_OK){
printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));
return;
}
size_t required_size;
err = nvs_get_str(my_handle, EXAMPLE_KEY, NULL, &required_size);
if (err != ESP_OK && err != ESP_ERR_NVS_NOT_FOUND){
printf("Error (%s) reading from NVS!\n", esp_err_to_name(err));
nvs_close(my_handle);
return;
}
char *value = new char[required_size];
err = nvs_get_str(my_handle, EXAMPLE_KEY, value, &required_size);
if (err != ESP_OK){
delete[] value;
printf("Error (%s) getting string from flash.\n", esp_err_to_name(err));
nvs_close(my_handle);
return;
}
printf("Read Value: %s\n", value);
delete[] value;
nvs_close(my_handle);
}
```
这段程序首先初始化了非易失性存储服务(Non-Volatile Storage Service),接着定义两个辅助函数分别用来向 Flash 写入一条消息和从中检索该条目。注意这里采用了命名空间的概念以便更好地组织不同种类的信息项;同时也体现了错误检测机制的重要性,在实际应用环境中应当始终考虑异常情况下的妥善处理方式。
阅读全文
相关推荐


















