Banging my head against the wall on this one for days and hoping a guru will point me in the right direction. I have tried various different partition tables, and build options but nothing seems to work.
Build steps are:
-
Erase flash
-
Upload File System Image
-
calculate partition size as per below, run mk_espfat.py to build filesystem.img
Hex value:
390000 – 290000 = 100000Decimal value:
3735552 – 2686976 = 1048576 input to mk_espfat tool
3.1) filesystem.img is now built.
Note that I have tried 3 variations:
a) do not execute 4)
b) execute 4) after building filesystem.img
c) execute 4) after building img, mounting on my PC, formating to FAT, and adding several files to the image. No option worked…
- execute: esptool.py -p /dev/ttyUSB0 -b 115200 write_flash 0x390000 filesystem.img
- Upload and Monitor
Supporting information
IDE: VSCode with PlatformIO
platformio.ini
[env:m5stack-grey]
platform = espressif32@1.12.0
;platform = espressif32 (tried several options here including latest master)
board = m5stack-grey
framework = arduino
monitor_speed = 115200
lib_deps =
ESPAsyncWebServer-esphome
ArduinoJson
board_build.partitions = default_16MB.csv
;default.csv
board_build.flash_mode = dio
and my partitions table
Note that I have tried many variations of this, and lastly figured I would try to put the FFat ahead of my SPIFFS, as spiffs works fine, just in case I had my memory mapped out wrong.
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x140000,
app1, app, ota_1, 0x150000,0x140000,
ffat, data, fat, 0x290000,0x390000,
spiffs, data, spiffs, 0x680000,0x980000,
main.cpp includes
#include <Arduino.h>
#include <M5Stack.h>
#include <EEPROM.h>
#include <FS.h>
// #include <FFat>
#include "FFat.h"
//**excerpt from my setup()**
Serial.begin(115200);
// ***** print out partition information
Serial.println("Partition list:");
partloop(ESP_PARTITION_TYPE_APP);
partloop(ESP_PARTITION_TYPE_DATA);
// ***** SPIFFS and FAT system initialize *****
Serial.println("");
Serial.println("Initializing FFat file system");
FFat.begin(true);
writeFFatFile(FFat, "/hello.txt", "Hello ");
writeFFatFile(FFat, "/second.txt", "second\n");
readFFatFile(FFat, "/second.txt");
void writeFFatFile(fs::FS &fs, const char *path, const char *message)
{
Serial.printf("Writing file: %s\r\n", path);
File file = fs.open(path, FILE_WRITE);
if (!file)
{
Serial.println("- failed to open file for writing");
return;
}
if (file.print(message))
{
Serial.println("- file written");
}
else
{
Serial.println("- write failed");
}
}
Output from serial port during startup
partition addr: 0x010000; size: 0x140000; label: app0
partition addr: 0x150000; size: 0x140000; label: app1
partition addr: 0x009000; size: 0x005000; label: nvs
partition addr: 0x00e000; size: 0x002000; label: otadata
partition addr: 0x290000; size: 0x390000; label: ffat
partition addr: 0x680000; size: 0x980000; label: spiffs
Initializing FFat file system
Writing file: /hello.txt
- failed to open file for writing
Writing file: /second.txt- failed to open file for writing
Reading file: /second.txt- failed to open file for reading
Listing all files in SPIFFS partition