单片机/MCU论坛
直播中

HonestQiao

8年用户 520经验值
擅长:嵌入式技术
私信 关注

【FireBeetle 2 ESP32-S3开发板体验】在Arduino中充分利用FireBeetle 2 ESP32-S3的16MB Flash做SPIFFS

DFRobot提供的这款 FireBeetle 2 ESP32-S3 开发板,从官方WiKi上,可以了解到详细的硬件信息:

  • 处理器:Xtensa® 双核32位LX7微处理器
  • 主频:240 MHz
  • SRAM:512KB
  • ROM:384KB
  • Flash:16MB
  • PSRAM: 8MB
  • RTC SRAM:16KB
  • USB: USB 2.0 OTG全速接口

我要完成的下一个小项目,需要使用SPIFFS,得需要相对大一些的SPIFFS空间。而该开发板板载16MB的Flash,相当地大,得好好利用起来。

另外,本文使用的Arduino开发工具为 Arduino IDE 1.8.19,因为 Arduino IDE2.0尚不支持插件,不能使用 ESP32 Filesystem Uploader 。

一、Arduino IDE中现有的分区方案

当使用Arduino IDE作为开发工具时,选择开发板为 FireBeetle 2 ESP32-S3:
image.png

然后设置Flash Size为16MB:(后面的128Mb,是因为1B=8b)
image.png
特别提醒:PSRAM需要选择 OPI PSRAM

再从Partition Scheme中查看分区方案:

image.png

从上图中可以看到,能够使用16M Flash的,只有使用FATFS的方案。我后面的项目中,需要用到SPIFFS,而使用SPIFFS的方案,都没有充分利用起来。

关于存储分区的资料,可以查看乐鑫官方文档:存储 API - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com)

既然没有,那我们可以进行自定义,使得 FireBeetle 2 ESP32-S3 开发板 能够应用更多的分区方案。

二、为 FireBeetle 2 ESP32-S3 添加分区方案

Arduino IDE安装后,通常有3个目录分别为:

  • Arduino IDE 程序目录

  • 开发板支持包目录

  • 扩展库目录

    我使用的是macOS系统,所以以上的目录分别为:

    • 开发工具目录:/Applications/Arduino.app
    • 开发板支持目录:/Users/HonestQiao/Library/Arduino15
    • 扩展库目录:/Users/HonestQiao/Documents/Arduino/libraries
    • 扩展库目录:/Users/HonestQiao/Documents/Arduino/tools

如果是在Windows系统,通常目录如下:

  • 开发工具目录:C:\Program Files (x86)\Arduino
  • 开发板支持目录:C:\Users\Administrator\AppData\Local\Arduino15
  • 扩展库目录:C:\Users\Administrator\Documents\Arduino\libraries
  • 插件目录:C:\Users\Administrator\Documents\Arduino\tools

具体目录,需要根据实际情况确定,上面只是通常的情况。

确定上述目录后,在 开发板支持目录 下的 packages/esp32/hardware/esp32 中,找到 esp32支持的开发板定义文件 boards.txt :
image.png

使用vscode之类的编辑工具打开该文件:【最好别用记事本打开】

image.png

找到 dfrobot_firebeetle2_esp32s3.menu.CPUFreq ,在其上可以看到已有的分区方案配置,添加下面的配置:

dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.default_16MB=16M with spiffs (6.25MB APP/3.43MB SPIFFS)
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.default_16MB.build.partitions=default_16MB
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.default_16MB.upload.maximum_size=6553600
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.large_spiffs_16MB=16M with large spiffs (4.5MB APP/6.93MB SPIFFS)
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.large_spiffs_16MB.build.partitions=large_spiffs_16MB
dfrobot_firebeetle2_esp32s3.menu.PartitionScheme.large_spiffs_16MB.upload.maximum_size=4718592

添加后如下:
image.png

每个 PartitionScheme 由如下三个定义组成:

  • PartitionScheme.方案短名称=方案详细说明
  • PartitionScheme.方案短名称.build.partitions=分区配置
  • PartitionScheme.方案短名称.upload.maximum_size=最大固件大小

上面添加的两个方案,一个使用了 default_16MB 分区配置,一个使用了large_spiffs_16MB,其对应的配置文件位于如下位置:
image.png

其配置详情分别为:
image.png

image.png

上述分区配置中的spiffs,即为可用的SPIFFS区的大小。

因为默认已经提供了上述两个配置,所以直接使用了。如果还需要更详细的自定义,可以了解 存储 API - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) ,自己写分区配置文件。熟悉ESP-IDF开发的同学,应该对这一点非常熟悉了。

添加完成保存关闭 boards.txt,然后重新打开Arduino IDE,就可以看到新添加的分区配置方案了:
image.png

三、ESP32 Filesystem Uploader 工具安装和使用

ESP32 Filesystem Uploader是一个Arduino IDE专用的工具,可以帮助我们上传文件到ESP32上划分出来的用户存储区,例如上面定义的SPIFFS分区。

当我们上传了文件以后,在程序中,就可以使用这些文件。

例如我们可以上传一个文本文件,然后在程序中读取其内容输出。或者上传图片文件,在显示的时候调用。

要使用 ESP32 Filesystem Uploader,首先需要下载插件文件,下载地址为:
Releases · me-no-dev/arduino-esp32fs-plugin (github.com)
下载后解压:
image.png

将其中的ESP32FS目录放置到插件目录tools下,具体如下:
image.png

然后,重新打开Arduin IDE,在工具菜单中,就会多出一项:
image.png

然后,新建一个Arduino项目,并另存为SPIFFS_Test,再使用资源管理器打开该目录,在其中创建一个data子目录:
image.png

子目录内的文件,是我们要上传到开发板SPIFFS分区的文件,注意总的大小,不能超过分区方案中定义的大小。

放置好文件以后,使用工具菜单的“ESP32 Sketch Data Upload”,就能将这些文件上传到开发板上:
image.png

如果提示下面的错误,说明文件太大,超出分区大小:
image.png

四、使用上传到SPIFFS分区的文件
直接使用如下代码进行测试即可:

#include "SPIFFS.h"

void setup() {
  Serial.begin(115200);

  Serial.println("Test start:");
  
  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }

   // list SPIFFS contents
   File root = SPIFFS.open("/");
   if (!root) {
       Serial.println("- failed to open directory");
       return;
   }
   if (!root.isDirectory()) {
       Serial.println(" - not a directory");
       return;
   }

   Serial.println("Directory List:");

   File file = root.openNextFile();
   while (file) {
       if (file.isDirectory()) {
           Serial.print("  DIR : ");
           Serial.println(file.name());
       } else {
           Serial.print("  FILE: ");
           Serial.print(file.name());
           Serial.print("\tSIZE: ");
           Serial.println(file.size());
       }
       file = root.openNextFile();
   }

  delay(2000);
  file = SPIFFS.open("/test.txt");
  if (!file) {
    Serial.println("Failed to open file for reading");
    return;
  }

  Serial.println("File Content:");
  while (file.available()) {
    Serial.write(file.read());
  }
  file.close();
  Serial.println("Test end.");
}

void loop() {

}

烧录运行后,通过串口监视器查看输出,具体如下:
image.png
从上图可以看到,已经成功列出了我们上传到SPIFFS分区的文件,并且从text.txt中,读取了其内容输出。

五、总结

现在,我们可以充分利用 FireBeetle 2 ESP32-S3 开发板 的16M Flash了,在这个SPIFFS分区上,可以提前上传文件,也可以用于记录日志。
我的后续项目中,会在此分区放置用于数据检索的sqlite文件,供程序查询调用。

六、参考资料

以上分享,参考了下面的内容,表示感谢:

更多回帖

发帖
×
20
完善资料,
赚取积分