esp32-S3专题二:内存2之RTC内存、FLASH使用

2023-11-13

承接上文,讲一下esp32上剩下的几个存储空间的用途

一、RTC存储器

esp32-S3分为有两个RTC存储器,是比较特别的SRAM存储器。RTC存储器在设备深度休眠时不掉电,一般比较多配合设备的深度休眠模式的业务场景使用。使能(一般默认使能) CONFIG_SOC_RTC_FAST_MEM_SUPPORTEDCONFIG_SOC_RTC_SLOW_MEM_SUPPORTED后,即可以通过定义变量,直接操作RTC内存。
在这里插入图片描述

(一)RTC 快速存储器,

8 KB 的 SRAM,可以在 Deep-sleep 模式下 RTC 启动时用于数据存储以及被主CPU 访问。除非禁用CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP 选项,否则剩余的 RTC FAST memory 会被添加到堆中。该部分内存可以和 DRAM(数据 RAM) 互换使用,但是访问速度稍慢一点。
使用方式:

#include <esp_attr.h>

RTC_IRAM_ATTR uint32_t rtc_iram_data;
RTC_FAST_ATTR uint32_t rtc_fast_data;

(二) RTC 慢速存储器

也是为 8 KB 的 SRAM,可以在 Deep-sleep 模式下被协处理器访问。
使用方式:


#include <esp_attr.h>
//RTC_NOINIT_ATTR 属性宏可以用来将数据放入 RTC Slow memory。放入此类型存储器的值从深度睡眠模式中醒来后会保持值不变。
RTC_NOINIT_ATTR uint32_t rtc_data;

注:从架构上来说,存储在RTC慢速存储器存储的数据,除非模块掉电,否则不会丢失。就算系统调用软件esp_restart()重启也能保留。但实际使用中V4.4.0版本的架构,esp_restart()重启后偶尔也会发生数据丢失,不知道具体原因。

二、Flash

由于flash具有掉电不丢失特性,所有许多业务场景经常结合flash的使用。而esp32-s3上的用途比较多,主要分为3个方面。围绕flash进行分区,使用partitions.csv文件划分功能。具体配置:在 menuconfig 中选择了 “Custom partition table CSV”,手动编辑partitions.csv文件,可以分配片上flash的4-8M给不同的功能使用。下表一:
在这里插入图片描述

(一) NVS 表

通过esp_partition API 使用flash上分区定义的名字为nvs的区域空间,存储的方式类似哈希表,即索引和存储内容一 一对应,NVS区域大小则视具体业务在.csv文件中自行定义。
使用方式:

#include <stdio.h>
#include <string.h>
#include "sdkconfig.h"
#include "esp_log.h"
#include "nvs_flash.h"

#define NVS_NAME    "mesh_example"  //表名
static const char *NVS_INDEX="nvs_data";// 索引规矩16个字符内有效

//存数据
void setNvsData(uint32_t data){
	nvs_handle nvs_handle;
	nvs_open(NVS_NAME, NVS_READWRITE, &nvs_handle);
	nvs_set_u32(nvs_handle,NVS_INDEX, data);
	nvs_commit(nvs_handle);
	nvs_close(nvs_handle);
}

//读数据
void getNvsData(uint32_t data){
    nvs_handle nvs_handle;
    nvs_open(NVS_NAME, NVS_READWRITE, &nvs_handle);
    nvs_get_i32(nvs_handle, NVS_INDEX, &data);
    nvs_close(nvs_handle);
}

(二)程序和OTA分区

otadata,factory,ota_0,ota_1这4个分区是存储当前程序和ota下载新版本程序使用的功能,主要为上电后程序映射区和系统ota时使用,不展开讲解了。区域大小一般3-6M,视OTA场景而定,以后专题有机会可以讲讲。

(三)SPIFFS 文件系统

SPIFFS 是一个官方开发的片上flash 设备的嵌入式文件系统,支持磨损均衡、文件系统一致性检查等功能。对应的是表一中的storage分区,区域大小视具体业务自行定义。特点:使用fopen、fclose等标准C文件接口进行文件标准操作。

使用方式:

#include <stdio.h>
#include <string.h>
#include "sdkconfig.h"
#include "fat_flash.h"

//挂载点
#define FLASH_MOUNT_POINT "/spiflash"

static wl_handle_t wlHandle = WL_INVALID_HANDLE;
int mountFlashInit(void){
	int ret=0;
    const esp_vfs_fat_mount_config_t mount_config = {
        .max_files = 5,
        .format_if_mount_failed = true,
        .allocation_unit_size = CONFIG_WL_SECTOR_SIZE
    };
    esp_err_t err = esp_vfs_fat_spiflash_mount(FLASH_MOUNT_POINT, "storage", &mount_config, &wlHandle);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "mount flash  fail:%s", esp_err_to_name(err));
        return -1;
    }
    ESP_LOGI(TAG, "mount flash  suceess");
     return ret;
}

// 写文件
void writeFile()
{
	FILE * ini ;
	if ((ini=fopen("/spiflash/sys/text.txt", "w"))==NULL) {
		ESP_LOGW(TAG, "iniparser: cannot %s\n",g_file_path);
	}
	fprintf(ini, "test123456\n" "\n");
	fprintf(ini, "\n");
	fclose(ini);
}

三、总结

使用合理使用片内SRAM、PSRAM、RTC存储器、Flash存储器,可以在各种场景下对业务数据进行存储

名称 使用方式 轻度休眠 深度休眠 esp_restar() 掉电
片内SRAM 程序定义数据 保留 丢失 丢失 丢失
PSRAM 主动申请:malloc 保留(可配置) 丢失 丢失 丢失
RTC RTC RTC_NOINIT_ATTR 保留 保留 丢失 丢失
FLASH NVS或者文件系统 保留 保留 保留 保留

这次esp-s3的内存专题的分享到处结束,以后其他专题可能会开始给大家讲讲各种外设的用法,觉得有帮助可以点个赞,谢谢大家。

参考:

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-guides/memory-types.html#iram-ram
https://www.espressif.com.cn/sites/default/files/documentation/esp32-s3_technical_reference_manual_cn.pdf
https://blog.csdn.net/qq_41741344/article/details/116380816

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

esp32-S3专题二:内存2之RTC内存、FLASH使用 的相关文章

随机推荐

  • CVPR 2022

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 作者 轻尘一笑 已授权转载 源 知乎 编辑 CVer https zhuanlan zhihu com p 489839282 导读 在CVPR 2022上 新加坡南洋
  • 【H5】canvas画布像素的设置与获取:

    H5 canvas画布像素的设置与获取 getImageData 从Canvas画板上取得指定位置的像素数据 putImageData 将所得到的像素数据描画到Canvas画板上 createImageData 方法创建新的空白像素 Ima
  • IPSec基础知识

    文章目录 IPSec基础知识 IPSec特性 IPSec组成部分 IPSec对等体 IPSec隧道 安全联盟 Security Association AH安全协议 AH包结构 ESP安全协议 ESP包结构 AH和ESP比较 封装模式 传输
  • 解决Rational Rose找不到suite objects.dll文件的问题

    问题描述 打开Rational Rose 2007时 发现有以下问题 提示找不到suite objects dll文件 需要重装软件 但是查看Rational Rose 2007安装文件夹 发现Common文件夹下有suite object
  • Windows系统管理七:本地组策略&注册表及其维护与优化

    本地组策略 概述 组策略 英语 Group Policy 是微软 Windows NT 家族操作系统的一个特性 它可以控制用户帐户和计算机帐户的工作环境 组策略提供了操作系统 应用程序和活动目录中用户设置的集中化管理和配置 组策略的其中个版
  • Ceph 集群在线迁移方案

    一 环境准备 1 1 场景介绍 最近收到一个需求 客户希望将运行了多年的ceph集群服务器全部更换掉 因为这些老服务器性能和容量都已经无法满足当前业务的需求 并希望在迁移到新服务器的过程中 业务不中断 在参考一些网上的方案后 选择了一个方案
  • 解决Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/问题

    昨天在使用docker 时 将 image 文件从仓库抓取到本地一直报错 经过尝试 终于得以解决 错误信息如下 root archlinux docker image pull library hello world Using defau
  • ROS仿真机器人(安装、配置、测试、建图、定位、路径规划)

    ROS机器人仿真 安装 配置 测试 建图 定位 路径规划 1 ROS安装与配置 1 1 安装虚拟机软件 1 2 虚拟一台主机 1 3 安装ubuntu 1 4 在ubuntu中安装ROS机器人操作系统 1 4 1 配置ubuntu的软件和更
  • Exams/m2014 q4k

    Implement the following circuit module top module input clk input resetn synchronous reset input in output out reg 2 0 t
  • 香港经典古装电视剧

    楚留香 射雕英雄传 倚天屠龙记 金枝欲孽 大唐双龙传 寻秦记 萧十一郎 小李飞刀 云海玉弓缘 西游记 封神榜 洗冤录 锦绣前程 杨门女将 杨家将 笑傲江湖 苏乞儿 绝代双骄 鹿鼎记 成吉思汗 神雕侠侣 陆小凤 书剑恩仇录 啼笑姻缘 http
  • Java I/O (第二版) I/O基础 I/O概述

    第一部分 第一章 介绍I O 输入和输出 的简写I O 它是任何操作系统和程序设计语言所必须的基础功能 只有空想家才会喜欢没有输入输出的程序 同时 IO的话题似乎对程序员没有什么吸引力 其实不然 我们应该有很多有趣的东西需要学习在IO中 J
  • react从入门到精通总结(一)

    React简介 React 是一个用于构建用户界面的 JS 库 主要用于构建UI React由美国的公司Facebook在2011年诞生并于2013年开源发布 特点 1 声明式设计 React采用声明范式 可以轻松描述应用 2 高效使用虚拟
  • Django 连接redis

    安装 pip install django redis redis安装 docker pull redis latest docker run d name redis p 6379 6379 redis requirepass passw
  • STL容器

    这里写目录标题 三大组件介绍 1 容器 2 算法 3 迭代器 STL容器 string容器 vector容器 deque容器 stack容器 queue容器 list容器 set multiset容器 map multimap容器 常见面试
  • 【LeetCode第1场双周赛】

    第 1 场双周赛 A 模拟 class Solution public int fixedPoint vector
  • 计算机网络设备子系统,网络综合布线七大子系统详细讲解

    打开APP 查看更多精彩图片 在实施时主要注意以下几点 1 确定介质布线方法和线缆走向 2 双绞线的长度一般不超过90m 3 尽量避免水平线路长距离与供电线路平行走线 应保持一定的距离 非屏蔽缆线一般为30cm 屏蔽缆线一般为7cm 4 线
  • 基于STM32的LVGL的实时日历设置界面

    基于STM32的LVGL的实时日历设置界面 提示 STM32 RTC littlevgl GUI 设置时间代码 if obj Set time btn 点击对象为设置按钮 if event LV EVENT RELEASED uint8 t
  • 轻量级Transformer模型ConvBERT架构及完整源码实现

    第28章 使用Local dependency轻量级Transformer模型ConvBERT架构内幕及完整源码实现 1 BERT依赖global self attention而带来的问题分析 2 BERT不同Layer的computati
  • 向电脑(windows11 OS环境)的所有外挂移动硬盘写入数据提示目标文件夹访问被拒绝的解决方法

    向电脑 windows11 OS环境 的所有外挂移动硬盘写入数据 就是在粘贴文件 出现以下提示框 解决办法流程如下 运行窗口 输入 gpedit msc 命令 按 确定或回车 快速打开本地组策略编辑器 本地组策略编辑器窗口 依次展开 计算机
  • esp32-S3专题二:内存2之RTC内存、FLASH使用

    承接上文 讲一下esp32上剩下的几个存储空间的用途 目录 一 RTC存储器 一 RTC 快速存储器 二 RTC 慢速存储器 二 Flash 一 NVS 表 二 程序和OTA分区 三 SPIFFS 文件系统 三 总结 一 RTC存储器 es