esp32使用内部flash创建文件系统

文章目录

  • ESP32使用内部flash创建文件系统
    • 声明
    • 简介
    • 参考资料
    • 环境
    • 硬件
    • 步骤
      • 修改flash大小
        • 查看硬件flash大小
        • 复制工程
        • 修改flash大小
      • 添加分区表
        • 复制分区表
        • 修改分区表
        • 修改工程配置
      • 修改源码
    • 心路历程

ESP32使用内部flash创建文件系统

声明

个人学习笔记,仅做参考,能力有限,如有错误请不吝赐教

简介

去年的时候,在B站看到了大佬稚晖君的视频,瞬间变成小迷弟,奢望以后能有稚晖君百分之一的成就

(感觉没啥希望)

新的一年准备做人生第一个开源项目(鸡汤闹钟)

因为是刚接触esp32,很多东西不懂,每次遇到问题的时候记录一下,争取养成写博客的习惯

esp32使用内部flash创建文件系统_第1张图片

参考资料

  1. 官方文档https://docs.espressif.com/projects/esp-idf/zh_CN/v4.2-beta1/esp32/api-guides/partition-table
  2. 官方例程 esp-idf\examples\storage\ext_flash_fatfs
  3. 官方例程esp-idf\examples\system\console

环境

idf+vscode+wsl

硬件

WROOM-32D

步骤

修改flash大小

查看硬件flash大小

官方文档

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/get-started/get-started-devkitc.html

esp32使用内部flash创建文件系统_第2张图片

复制工程

拷贝 esp-idf\examples\storage\ext_flash_fatfs工程到任意一个位置,当然你硬要在原来工程上修改我也拦不住你

修改flash大小

终端执行idf.py menuconfig,第一次执行可能会报错,在执行一次就可以了

idf.py menuconfig

选择serial flasher config

esp32使用内部flash创建文件系统_第3张图片

官方默认的是2MB,如果你的也是2MB就不用修改了

esp32使用内部flash创建文件系统_第4张图片

修改为对应硬件大小,退出时会有提示按Y保存

添加分区表

复制分区表

从官方例程esp-idf\examples\system\console下面找到partitions_example.csv并刚才复制到工程文件夹下

esp32使用内部flash创建文件系统_第5张图片

修改分区表

修改分区大小,自己需要多少就给多少,注意总和不能超过flash大小,偏移地址可以不填,系统会自动计算

esp32使用内部flash创建文件系统_第6张图片

修改工程配置

终端执行idf.py menuconfig,选择partition table

esp32使用内部flash创建文件系统_第7张图片

选择第一项

esp32使用内部flash创建文件系统_第8张图片

选择最后一项

esp32使用内部flash创建文件系统_第9张图片

选择后会回到上个界面,选择第二项,修改名字,修改完按回车确认

esp32使用内部flash创建文件系统_第10张图片

退出并保存

生成二进制分区表

idf.py partition_table

成功截图

esp32使用内部flash创建文件系统_第11张图片

分区表官方参考资料

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/partition-tables.html

修改源码

1.取消外部flash初始化

esp32使用内部flash创建文件系统_第12张图片

2.添加文件系统初始化(初始化函数是从官方例程esp-idf\examples\system\console拷贝的)

#define MOUNT_PATH "/extflash"
static void initialize_filesystem(void)
{
    static wl_handle_t wl_handle;
    const esp_vfs_fat_mount_config_t mount_config = {
        .max_files = 4,
        .format_if_mount_failed = true};
    esp_err_t err = esp_vfs_fat_spiflash_mount(MOUNT_PATH, "storage", &mount_config, &wl_handle);
    if (err != ESP_OK)
    {
        ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err));
        return;
    }
}

过程只为快速演示效果,工程不规范的地方请自行修改

过程只为快速演示效果,工程不规范的地方请自行修改

过程只为快速演示效果,工程不规范的地方请自行修改

3.调用初始化

esp32使用内部flash创建文件系统_第13张图片

成功截图

esp32使用内部flash创建文件系统_第14张图片

心路历程

(题外话:一说心里历程就想起了当初大学的时候,十几个窝在一个宿舍里面玩狼人杀,悍跳预言家的时候老是讲验人的心路历程)

搜了一圈网上没有相关资料(2021,1,4),不知道是我姿势不对还是压根就没有

不要问我为什么不自己写,问就是因为菜

既然面向百度失败,我就去官方历程里面找,然后就找到了ext_flash_fatfs历程

esp32使用内部flash创建文件系统_第15张图片

这就非常棒,我感觉这就是我苦苦寻找的她,一行源码我都不可能看,但凡看一眼都是对她的不信任

我编译下载一顿操作,满怀期待的等待着她即将给我的惊喜,结果狠狠给了我一个大嘴巴子,事实证明我在想屁吃

被迫无奈,看了看readme在瞅瞅源码,好把他的外部是指模组外

问题不大,把外部改成内部就可以了,接着就是看官方文档

看着看着就悟了,,彻底悟了,大彻大悟,先这样,再那样就可以了,很简单

第一步是先搞一个分区表,官方文档我看懂了,明白了,但是我不知道表咋弄,路径咋写

但是重点我抓住了,就是csv,我直接在例程里面找,果不其然被我找到了console例程

感觉这就是另一个她阿,文件系统初始化也有了

esp32使用内部flash创建文件系统_第16张图片

写不会写,抄我还不会吗,cv工程师上线
加一下初始化函数,改一下挂载地址,perfect

你可能感兴趣的:(ESP32)