当前位置:   article > 正文

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

rtc sram

承接上文,讲一下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;
  • 1
  • 2
  • 3
  • 4

(二) RTC 慢速存储器

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


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

注:从架构上来说,存储在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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

(二)程序和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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

三、总结

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

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

这次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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/196201
推荐阅读
相关标签
  

闽ICP备14008679号