ESP32入门-NVS的flash读写测试
硬件
① 开发板型号:ESP32-WROOM-32
2.软件设计
2.1代码逻辑
①初始化NVS —> ②创建数据表 —> ③ 读写对应数据表中数据
2.1 软件应用说明
1.NVS使用说明
NVS官方说明
NVS 最适合存储一些较小的数据,而非字符串或二进制大对象 (BLOB) 等较大的数据。如需存储较大的 BLOB 或者字符串,请考虑使用基于磨损均衡库的 FAT 文件系统。
2.函数介绍
① NVS 初始化函数: nvs_flash_init(void);
② NVS 擦除函数: nvs_flash_erase(void);
③ NVS 打开命名空间函数: nvs_open();
//name:命名空间名称,最长 15 字符
//open_mode:打开模式 NVS_READWRITE :读写模式 NVS_READONLY:只读模式
//out_handle:NVS 句柄
//return : ESP_OK:打开成功nvs_open(const char* name, nvs_open_mode_t open_mode, nvs_handle_t *out_handle);
3.初始化NVS,如果失败则先擦除再初始化
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_initESP_ERROR_CHECK(nvs_flash_erase());err = nvs_flash_init();}
4.通过Ctrl+Shift+P创建新的NVS组件(命名自己定义)我的组件mins
可能会出现无法找到nvs_flash.h头文件问题
我是在创建的组件的中的CMakeLists.txt中改
idf_component_register(SRCS "flash.c" //改为对应的自己的.c文件INCLUDE_DIRS "include"PRIV_REQUIRES nvs_flash)
5.flash.c文件内容,在main.c中调用void flash_NVS_init(void)函数就好了;
#include <stdio.h>
#include "esp_err.h"
#include "flash.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_spi_flash.h"void flash_NVS_init(void)
{//打印系统信息printf("[APP] Startup..\n");printf("[APP] Free memory: %d bytes\n", esp_get_free_heap_size());printf("[APP] IDF version: %s\n", esp_get_idf_version());//初始化NVS,如果失败则先擦除再初始化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_initESP_ERROR_CHECK(nvs_flash_erase());err = nvs_flash_init();} ESP_ERROR_CHECK( err );//新建一个表的句柄nvs_handle_t my_handle;//打开当前的表err = nvs_open("storage", NVS_READWRITE, &my_handle);if (err != ESP_OK) {printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));} else {printf("Done\n");//读数据操作int32_t restart_counter = 0; // value will default to 0, if not set yet in NVSerr = nvs_get_i32(my_handle, "restart_counter", &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 (%s) reading!\n", esp_err_to_name(err));}// 写数据操作restart_counter++;err = nvs_set_i32(my_handle, "restart_counter", restart_counter);//提交并保存表的内容err = nvs_commit(my_handle);//关闭nvs_close(my_handle);}printf("\n");//这里是我添加的,使能这个会擦除NVS刚写入的数据,如果不使能,默认会一直写//ESP_ERROR_CHECK(nvs_flash_erase());// Restart module//设置10s后模块重启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();}
6.实验说明
ESP32入门-NVS的flash读写测试相关推荐
- 基于STM32F429IGT6的NAND FLASH读写测试(CUBEMX)
本文基于W29N01HV这款NAND FLASH芯片进行讲解,这款芯片的讲解在网上的资料真的很少,关于这款flash的datasheet我会免费共享出来.(如果觉得本文对你没什么帮助可参考:NAND ...
- ESP32 通过NVS存储WiFi账号和密码至Flash
前言 项目需求:在ESP32板子重启之后,自动从Flash中寻找已经存储好的WiFi账号和秘密,连接到网络. 要想能够很好的理解如何将WiFi的账号和密码如何写入到Flash的什么地方,首先需要了解下 ...
- 【ZYNQ】从入门到秃头07 FPGA 片内 RAM ROM 读写测试实验
文章目录 FPGA 片内RAM读写测试实验 实验原理 创建Vivado工程 RAM的端口定义和时序 测试程序编写 Verilog IO约束 Testbeach simulation仿真 板上验证 添加 ...
- 使用FIO对SATA、SSD和PCIe Flash进行测试
使用FIO对SATA.SSD和PCIe Flash进行测试 首先声明,同事做的实验 使用fio对SATA.SSD.PCIE进行了测试 测试说明: 1.测试命名 sync_write_4k_32 s ...
- matlab画扇区,NFCDemo NFC读写测试 ,自动读取每个扇区 块的值 matlab 238万源代码下载- www.pudn.com...
文件名称: NFCDemo下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 66 KB 上传时间: 2013-12-13 下载次数: 24 提 供 者: wuze ...
- ESP32 入门教学,不入门,不教学
1. Internet of things (iot)这个概念非常火,物联网是什么?把所有物品通过射频识别等信息传感设备与互联网连接起来,实现智能化识别和管理. 物联网通过智能感知.识别技术与普适计算 ...
- 模拟NAND FLASH 读写BCH ECC校验
一.模拟NAND FLASH 读写BCH ECC校验 将内核源码里的bch校验程序分离出来,从而可以手动修改原始数据和bch校验码,达到模拟出错纠正过程. 源码 bch.c.bch.h.types.h ...
- NAND FLASH 读写操作 简介
NAND FLASH 内存详解与读写寻址方式 一.内存详解 NAND闪存阵列分为一系列128kB的区块(block),这些区块是 NAND器件中最小的可擦除实体.擦除一个区块就是把所有的位(bit)设 ...
- 通过mtd读写flash_NOR Flash读写原理及驱动
本文主要是关于NOR Flash的相关介绍,并着重对NOR Flash读写原理及驱动进行了详尽的阐述. NOR Flash NOR Flash是现在市场上两种主要的非易失闪存技术之一.Intel于19 ...
最新文章
- maven在idea的配置
- Python设计模式-桥接模式
- 什么是外函数,什么是内函数?闭包(Closure)是什么?说说你对闭包(Closure)的理解?
- 超神线段树 山海经
- 派生类构造的时候一定要调用_夏天使用电蚊香的时候一定要注意这几点
- 使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置
- android git 版本管理,Android版本管理(git 和 repo)
- java linux解压_linux整套java环境解压版
- 【翻译自mos文章】rman 备份时报:ORA-02396: exceeded maximum idle time
- JavaWeb POI 将数据从数据库导出到Excel表 实例(亲测有效!)
- Linux安装和卸载MySQL数据库
- 去空格 html,javascript怎么去空格?
- 如何完成一款游戏? | 独立游戏制作
- 7、STC12C5A60S2核心芯片说明文档
- Android开发-视图view讲解
- java cookie全解析(session与cookie的机制和原理)
- 计算机CPU指令的32位、64位是如何区分呢?
- android crt证书,如何在android手机安装数字证书 crt和p12
- 需求工程软件建模与分析阅读笔记01
- x86\x64\ia64的区别