Skip to content

FAT on SPI Flash Library #1809

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Sep 17, 2018
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ set(LIBRARY_SRCS
libraries/DNSServer/src/DNSServer.cpp
libraries/EEPROM/EEPROM.cpp
libraries/ESPmDNS/src/ESPmDNS.cpp
libraries/FFat/src/FFat.cpp
libraries/FS/src/FS.cpp
libraries/FS/src/vfs_api.cpp
libraries/HTTPClient/src/HTTPClient.cpp
Expand Down Expand Up @@ -175,6 +176,7 @@ set(COMPONENT_ADD_INCLUDEDIRS
libraries/DNSServer/src
libraries/ESP32/src
libraries/ESPmDNS/src
libraries/FFat/src
libraries/FS/src
libraries/HTTPClient/src
libraries/NetBIOS/src
Expand Down
117 changes: 61 additions & 56 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,62 +8,6 @@ menu.PSRAM=PSRAM

##############################################################

ttgo-lora32-v1.name=TTGO LoRa32-OLED V1

ttgo-lora32-v1.upload.tool=esptool
ttgo-lora32-v1.upload.maximum_size=1310720
ttgo-lora32-v1.upload.maximum_data_size=294912
ttgo-lora32-v1.upload.wait_for_upload_port=true

ttgo-lora32-v1.serial.disableDTR=true
ttgo-lora32-v1.serial.disableRTS=true

ttgo-lora32-v1.build.mcu=esp32
ttgo-lora32-v1.build.core=esp32
ttgo-lora32-v1.build.variant=ttgo-lora32-v1
ttgo-lora32-v1.build.board=TTGO_LoRa32_V1

ttgo-lora32-v1.build.f_cpu=240000000L
ttgo-lora32-v1.build.flash_mode=dio
ttgo-lora32-v1.build.flash_size=4MB
ttgo-lora32-v1.build.boot=dio
ttgo-lora32-v1.build.partitions=default

ttgo-lora32-v1.menu.FlashFreq.80=80MHz
ttgo-lora32-v1.menu.FlashFreq.80.build.flash_freq=80m
ttgo-lora32-v1.menu.FlashFreq.40=40MHz
ttgo-lora32-v1.menu.FlashFreq.40.build.flash_freq=40m

ttgo-lora32-v1.menu.UploadSpeed.921600=921600
ttgo-lora32-v1.menu.UploadSpeed.921600.upload.speed=921600
ttgo-lora32-v1.menu.UploadSpeed.115200=115200
ttgo-lora32-v1.menu.UploadSpeed.115200.upload.speed=115200
ttgo-lora32-v1.menu.UploadSpeed.256000.windows=256000
ttgo-lora32-v1.menu.UploadSpeed.256000.upload.speed=256000
ttgo-lora32-v1.menu.UploadSpeed.230400.windows.upload.speed=256000
ttgo-lora32-v1.menu.UploadSpeed.230400=230400
ttgo-lora32-v1.menu.UploadSpeed.230400.upload.speed=230400
ttgo-lora32-v1.menu.UploadSpeed.460800.linux=460800
ttgo-lora32-v1.menu.UploadSpeed.460800.macosx=460800
ttgo-lora32-v1.menu.UploadSpeed.460800.upload.speed=460800
ttgo-lora32-v1.menu.UploadSpeed.512000.windows=512000
ttgo-lora32-v1.menu.UploadSpeed.512000.upload.speed=512000

ttgo-lora32-v1.menu.DebugLevel.none=None
ttgo-lora32-v1.menu.DebugLevel.none.build.code_debug=0
ttgo-lora32-v1.menu.DebugLevel.error=Error
ttgo-lora32-v1.menu.DebugLevel.error.build.code_debug=1
ttgo-lora32-v1.menu.DebugLevel.warn=Warn
ttgo-lora32-v1.menu.DebugLevel.warn.build.code_debug=2
ttgo-lora32-v1.menu.DebugLevel.info=Info
ttgo-lora32-v1.menu.DebugLevel.info.build.code_debug=3
ttgo-lora32-v1.menu.DebugLevel.debug=Debug
ttgo-lora32-v1.menu.DebugLevel.debug.build.code_debug=4
ttgo-lora32-v1.menu.DebugLevel.verbose=Verbose
ttgo-lora32-v1.menu.DebugLevel.verbose.build.code_debug=5

##############################################################

esp32.name=ESP32 Dev Module

esp32.upload.tool=esptool
Expand Down Expand Up @@ -102,6 +46,8 @@ esp32.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
esp32.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (Large APPS with OTA)
esp32.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
esp32.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
esp32.menu.PartitionScheme.fatflash=16M Fat
esp32.menu.PartitionScheme.fatflash.build.partitions=ffat

esp32.menu.FlashMode.qio=QIO
esp32.menu.FlashMode.qio.build.flash_mode=dio
Expand All @@ -126,6 +72,9 @@ esp32.menu.FlashSize.4M.build.flash_size=4MB
esp32.menu.FlashSize.2M=2MB (16Mb)
esp32.menu.FlashSize.2M.build.flash_size=2MB
esp32.menu.FlashSize.2M.build.partitions=minimal
esp32.menu.FlashSize.16M=16MB (128Mb)
esp32.menu.FlashSize.16M.build.flash_size=16MB
esp32.menu.FlashSize.2M.build.partitions=ffat

esp32.menu.UploadSpeed.921600=921600
esp32.menu.UploadSpeed.921600.upload.speed=921600
Expand Down Expand Up @@ -157,6 +106,62 @@ esp32.menu.DebugLevel.verbose.build.code_debug=5

##############################################################

ttgo-lora32-v1.name=TTGO LoRa32-OLED V1

ttgo-lora32-v1.upload.tool=esptool
ttgo-lora32-v1.upload.maximum_size=1310720
ttgo-lora32-v1.upload.maximum_data_size=294912
ttgo-lora32-v1.upload.wait_for_upload_port=true

ttgo-lora32-v1.serial.disableDTR=true
ttgo-lora32-v1.serial.disableRTS=true

ttgo-lora32-v1.build.mcu=esp32
ttgo-lora32-v1.build.core=esp32
ttgo-lora32-v1.build.variant=ttgo-lora32-v1
ttgo-lora32-v1.build.board=TTGO_LoRa32_V1

ttgo-lora32-v1.build.f_cpu=240000000L
ttgo-lora32-v1.build.flash_mode=dio
ttgo-lora32-v1.build.flash_size=4MB
ttgo-lora32-v1.build.boot=dio
ttgo-lora32-v1.build.partitions=default

ttgo-lora32-v1.menu.FlashFreq.80=80MHz
ttgo-lora32-v1.menu.FlashFreq.80.build.flash_freq=80m
ttgo-lora32-v1.menu.FlashFreq.40=40MHz
ttgo-lora32-v1.menu.FlashFreq.40.build.flash_freq=40m

ttgo-lora32-v1.menu.UploadSpeed.921600=921600
ttgo-lora32-v1.menu.UploadSpeed.921600.upload.speed=921600
ttgo-lora32-v1.menu.UploadSpeed.115200=115200
ttgo-lora32-v1.menu.UploadSpeed.115200.upload.speed=115200
ttgo-lora32-v1.menu.UploadSpeed.256000.windows=256000
ttgo-lora32-v1.menu.UploadSpeed.256000.upload.speed=256000
ttgo-lora32-v1.menu.UploadSpeed.230400.windows.upload.speed=256000
ttgo-lora32-v1.menu.UploadSpeed.230400=230400
ttgo-lora32-v1.menu.UploadSpeed.230400.upload.speed=230400
ttgo-lora32-v1.menu.UploadSpeed.460800.linux=460800
ttgo-lora32-v1.menu.UploadSpeed.460800.macosx=460800
ttgo-lora32-v1.menu.UploadSpeed.460800.upload.speed=460800
ttgo-lora32-v1.menu.UploadSpeed.512000.windows=512000
ttgo-lora32-v1.menu.UploadSpeed.512000.upload.speed=512000

ttgo-lora32-v1.menu.DebugLevel.none=None
ttgo-lora32-v1.menu.DebugLevel.none.build.code_debug=0
ttgo-lora32-v1.menu.DebugLevel.error=Error
ttgo-lora32-v1.menu.DebugLevel.error.build.code_debug=1
ttgo-lora32-v1.menu.DebugLevel.warn=Warn
ttgo-lora32-v1.menu.DebugLevel.warn.build.code_debug=2
ttgo-lora32-v1.menu.DebugLevel.info=Info
ttgo-lora32-v1.menu.DebugLevel.info.build.code_debug=3
ttgo-lora32-v1.menu.DebugLevel.debug=Debug
ttgo-lora32-v1.menu.DebugLevel.debug.build.code_debug=4
ttgo-lora32-v1.menu.DebugLevel.verbose=Verbose
ttgo-lora32-v1.menu.DebugLevel.verbose.build.code_debug=5

##############################################################

cw02.name=XinaBox CW02

cw02.upload.tool=esptool
Expand Down
183 changes: 183 additions & 0 deletions libraries/FFat/examples/FFat_Test/FFat_Test.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
#include "FS.h"
#include "FFat.h"

/* You only need to format FFat the first time you run a
test or else use the FFat plugin to create a partition
https://github.com/me-no-dev/arduino-esp32fs-plugin */
#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.name(), 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());
}
}

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("- frite failed");
}
}

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");
}
}

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: %10lu\n", FFat.totalBytes());
Serial.printf("Free space: %10lu\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: %10lu\n", FFat.freeBytes());
deleteFile(FFat, "/test.txt");
Serial.println( "Test complete" );
}

void loop(){

}
9 changes: 9 additions & 0 deletions libraries/FFat/library.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
name=FFat
version=1.0
author=Hristo Gochkov, Ivan Grokhtkov, Larry Bernstone
maintainer=Hristo Gochkov <[email protected]>
sentence=ESP32 FAT on Flash File System
paragraph=
category=Data Storage
url=
architectures=esp32
Loading