Hi
I need some help.
I try to upload a file in ‘data’ folder with esp32dev
I use esp32 16MB and ‘ffat’
My data file is a small txt file.
It seems that’s working, but the file in data forder is not taken.
Did I forgot something?
Hi
I need some help.
I try to upload a file in ‘data’ folder with esp32dev
I use esp32 16MB and ‘ffat’
My data file is a small txt file.
It seems that’s working, but the file in data forder is not taken.
Did I forgot something?
How do you know? The ESP can’t mount the FFAT filesystem or the mounted filesystem is empty? What code are you using to check that.
The filesystem is ok but it’s empty.
The code is :
#include "FS.h"
#include "FFat.h"
// This file should be compiled with 'Partition Scheme' (in Tools menu)
// set to 'Default with ffat' if you have a 4MB ESP32 dev module or
// set to '16M Fat' if you have a 16MB ESP32 dev module.
// You only need to format FFat the first time you run a test
#define FORMAT_FFAT true
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
Serial.printf("Listing directory: %s\r\n", dirname);
File root = fs.open(dirname);
if(!root){
Serial.println("- failed to open directory");
return;
}
if(!root.isDirectory()){
Serial.println(" - not a directory");
return;
}
File file = root.openNextFile();
while(file){
if(file.isDirectory()){
Serial.print(" DIR : ");
Serial.println(file.name());
if(levels){
listDir(fs, file.path(), levels -1);
}
} else {
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print("\tSIZE: ");
Serial.println(file.size());
}
file = root.openNextFile();
}
}
void readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\r\n", path);
File file = fs.open(path);
if(!file || file.isDirectory()){
Serial.println("- failed to open file for reading");
return;
}
Serial.println("- read from file:");
while(file.available()){
Serial.write(file.read());
}
file.close();
}
void writeFile(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");
}
file.close();
}
void appendFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Appending to file: %s\r\n", path);
File file = fs.open(path, FILE_APPEND);
if(!file){
Serial.println("- failed to open file for appending");
return;
}
if(file.print(message)){
Serial.println("- message appended");
} else {
Serial.println("- append failed");
}
file.close();
}
void renameFile(fs::FS &fs, const char * path1, const char * path2){
Serial.printf("Renaming file %s to %s\r\n", path1, path2);
if (fs.rename(path1, path2)) {
Serial.println("- file renamed");
} else {
Serial.println("- rename failed");
}
}
void deleteFile(fs::FS &fs, const char * path){
Serial.printf("Deleting file: %s\r\n", path);
if(fs.remove(path)){
Serial.println("- file deleted");
} else {
Serial.println("- delete failed");
}
}
void testFileIO(fs::FS &fs, const char * path){
Serial.printf("Testing file I/O with %s\r\n", path);
static uint8_t buf[512];
size_t len = 0;
File file = fs.open(path, FILE_WRITE);
if(!file){
Serial.println("- failed to open file for writing");
return;
}
size_t i;
Serial.print("- writing" );
uint32_t start = millis();
for(i=0; i<2048; i++){
if ((i & 0x001F) == 0x001F){
Serial.print(".");
}
file.write(buf, 512);
}
Serial.println("");
uint32_t end = millis() - start;
Serial.printf(" - %u bytes written in %u ms\r\n", 2048 * 512, end);
file.close();
file = fs.open(path);
start = millis();
end = start;
i = 0;
if(file && !file.isDirectory()){
len = file.size();
size_t flen = len;
start = millis();
Serial.print("- reading" );
while(len){
size_t toRead = len;
if(toRead > 512){
toRead = 512;
}
file.read(buf, toRead);
if ((i++ & 0x001F) == 0x001F){
Serial.print(".");
}
len -= toRead;
}
Serial.println("");
end = millis() - start;
Serial.printf("- %u bytes read in %u ms\r\n", flen, end);
file.close();
} else {
Serial.println("- failed to open file for reading");
}
}
void setup(){
Serial.begin(115200);
Serial.setDebugOutput(true);
if (FORMAT_FFAT) FFat.format();
if(!FFat.begin()){
Serial.println("FFat Mount Failed");
return;
}
Serial.printf("Total space: %10u\n", FFat.totalBytes());
Serial.printf("Free space: %10u\n", FFat.freeBytes());
listDir(FFat, "/", 0);
// writeFile(FFat, "/hello.txt", "Hello ");
// appendFile(FFat, "/hello.txt", "World!\r\n"); //readFile(FFat, "/hello.txt");
// renameFile(FFat, "/hello.txt", "/foo.txt");
// readFile(FFat, "/foo.txt");
// deleteFile(FFat, "/foo.txt");
// testFileIO(FFat, "/test.txt");
// Serial.printf("Free space: %10u\n", FFat.freeBytes());
// deleteFile(FFat, "/test.txt");
// Serial.println("Test complete");
}
void loop(){
}
And you also executed the “Upload Filesystem Image” task right?
Yes,
1 upload
2 build Filesystem Image
but when Build Filesystem Image
The next line is missing, I expected to see the file \stationslist.txt. Correct?
3 Upload Filesystem Image.
No, no such line would be printed.
$ pio run -t buildfs
Processing esp32dev (platform: espressif32; board: esp32dev; framework: arduino)
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32dev.html
PLATFORM: Espressif 32 (6.0.0) > Espressif ESP32 Dev Module
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 @ 3.20006.221224 (2.0.6)
- tool-esptoolpy @ 1.40400.0 (4.4.0)
- tool-mkfatfs @ 2.0.1
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 33 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Building FS image from 'data' directory to .pio/build/esp32dev/fatfs.bin
=================[SUCCESS] Took 0.49 seconds =================
Irregardless, in a minimum reproduction of the project, my data/test.txt
and content is perfectly there in the generated fatfs.bin
.
$ hexdump -C .pio/build/esp32dev/fatfs.bin
00000000 eb fe 90 4d 53 44 4f 53 35 2e 30 00 10 01 01 00 |...MSDOS5.0.....|
00000010 01 00 02 5f 01 f8 01 00 3f 00 ff 00 00 00 00 00 |..._....?.......|
00000020 00 00 00 00 80 00 29 86 76 9a 56 4e 4f 20 4e 41 |......).v.VNO NA|
00000030 4d 45 20 20 20 20 46 41 54 20 20 20 20 20 00 00 |ME FAT ..|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001000 f8 ff ff ff 0f 00 00 00 00 00 00 00 00 00 00 00 |................|
00001010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00002000 54 45 53 54 20 20 20 20 54 58 54 20 18 00 86 76 |TEST TXT ...v|
00002010 9a 56 00 00 00 00 86 76 9a 56 02 00 12 00 00 00 |.V.....v.V......|
00002020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00006000 53 6f 6d 65 20 74 65 73 74 20 63 6f 6e 74 65 6e |Some test conten|
00006010 74 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |t...............|
00006020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00007000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
0015f000
The most reasonable explanation is that you have
So it’ll format the partition, erasing the previous content…
You need to absolutely set this macro to false
, reupload the firmware and reupload the filesystem.
Please excuse me I am very new with platformio.
And I compared with spiffs where I can see the file /stationslist.txt
At the first start flash must be formated, and then not …
I just changed these two lines
//if (FORMAT_FFAT) FFat.format();
if(!FFat.begin(FORMAT_FFAT)){
It’s working.
Thank you for your patience.
With SPIFFS it’s shown because the mkspiffs
has different output behavior indeed than mkffat
.