硬件

① 开发板型号: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读写测试相关推荐

  1. 基于STM32F429IGT6的NAND FLASH读写测试(CUBEMX)

    本文基于W29N01HV这款NAND FLASH芯片进行讲解,这款芯片的讲解在网上的资料真的很少,关于这款flash的datasheet我会免费共享出来.(如果觉得本文对你没什么帮助可参考:NAND ...

  2. ESP32 通过NVS存储WiFi账号和密码至Flash

    前言 项目需求:在ESP32板子重启之后,自动从Flash中寻找已经存储好的WiFi账号和秘密,连接到网络. 要想能够很好的理解如何将WiFi的账号和密码如何写入到Flash的什么地方,首先需要了解下 ...

  3. 【ZYNQ】从入门到秃头07 FPGA 片内 RAM ROM 读写测试实验

    文章目录 FPGA 片内RAM读写测试实验 实验原理 创建Vivado工程 RAM的端口定义和时序 测试程序编写 Verilog IO约束 Testbeach simulation仿真 板上验证 添加 ...

  4. 使用FIO对SATA、SSD和PCIe Flash进行测试

    使用FIO对SATA.SSD和PCIe Flash进行测试 首先声明,同事做的实验 使用fio对SATA.SSD.PCIE进行了测试 测试说明: 1.测试命名   sync_write_4k_32 s ...

  5. matlab画扇区,NFCDemo NFC读写测试 ,自动读取每个扇区 块的值 matlab 238万源代码下载- www.pudn.com...

    文件名称: NFCDemo下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 66 KB 上传时间: 2013-12-13 下载次数: 24 提 供 者: wuze ...

  6. ESP32 入门教学,不入门,不教学

    1. Internet of things (iot)这个概念非常火,物联网是什么?把所有物品通过射频识别等信息传感设备与互联网连接起来,实现智能化识别和管理. 物联网通过智能感知.识别技术与普适计算 ...

  7. 模拟NAND FLASH 读写BCH ECC校验

    一.模拟NAND FLASH 读写BCH ECC校验 将内核源码里的bch校验程序分离出来,从而可以手动修改原始数据和bch校验码,达到模拟出错纠正过程. 源码 bch.c.bch.h.types.h ...

  8. NAND FLASH 读写操作 简介

    NAND FLASH 内存详解与读写寻址方式 一.内存详解 NAND闪存阵列分为一系列128kB的区块(block),这些区块是 NAND器件中最小的可擦除实体.擦除一个区块就是把所有的位(bit)设 ...

  9. 通过mtd读写flash_NOR Flash读写原理及驱动

    本文主要是关于NOR Flash的相关介绍,并着重对NOR Flash读写原理及驱动进行了详尽的阐述. NOR Flash NOR Flash是现在市场上两种主要的非易失闪存技术之一.Intel于19 ...

最新文章

  1. maven在idea的配置
  2. Python设计模式-桥接模式
  3. 什么是外函数,什么是内函数?闭包(Closure)是什么?说说你对闭包(Closure)的理解?
  4. 超神线段树 山海经
  5. 派生类构造的时候一定要调用_夏天使用电蚊香的时候一定要注意这几点
  6. 使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置
  7. android git 版本管理,Android版本管理(git 和 repo)
  8. java linux解压_linux整套java环境解压版
  9. 【翻译自mos文章】rman 备份时报:ORA-02396: exceeded maximum idle time
  10. JavaWeb POI 将数据从数据库导出到Excel表 实例(亲测有效!)
  11. Linux安装和卸载MySQL数据库
  12. 去空格 html,javascript怎么去空格?
  13. 如何完成一款游戏? | 独立游戏制作
  14. 7、STC12C5A60S2核心芯片说明文档
  15. Android开发-视图view讲解
  16. java cookie全解析(session与cookie的机制和原理)
  17. 计算机CPU指令的32位、64位是如何区分呢?
  18. android crt证书,如何在android手机安装数字证书 crt和p12
  19. 需求工程软件建模与分析阅读笔记01
  20. x86\x64\ia64的区别

热门文章

  1. Android开发实例-自动生成题库的数独
  2. flutter 开发中问题盘锦
  3. 基于spring boot的奖助学金评审系统毕业设计源码031035
  4. 查看webpack版本
  5. LabVIEWCNN基础
  6. 自己动手用3D打印出你的个人数学科技馆
  7. c++ opengl 三维图形中显示文字_为什么使用GPU渲染图形图像,而不使用CPU呢?
  8. js中几种对数值取整数和小数部分的方法
  9. 即席和即兴_即席和即兴_新员工参加会议,即兴发言赢得好感
  10. 不重装系统,如何将系统从SSD迁移到M2固态硬盘