init with spiffs

This commit is contained in:
Kinchin Fong 2023-09-07 20:01:46 +08:00
commit 643a69b72c
9 changed files with 164 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.pio
.vscode
data/*.dat

4
data/config.txt Normal file
View File

@ -0,0 +1,4 @@
0123456789
-100
-50
300

2
data/position.txt Normal file
View File

@ -0,0 +1,2 @@
0
0

View File

@ -0,0 +1,63 @@
#include "VFileSystem.h"
#include <FS.h>
#include <SPIFFS.h>
int VFileSystem::Init()
{
if (!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)) {
return -1;
}
return 0;
}
size_t VFileSystem::TotalSpace()
{
return SPIFFS.totalBytes();
}
size_t VFileSystem::FreeSpace()
{
return SPIFFS.totalBytes() - SPIFFS.usedBytes();
}
int VFileSystem::ReadFile(const char* fileName, uint8_t* result, int len)
{
File file = SPIFFS.open(fileName, FILE_READ);
if (!file || file.isDirectory()) {
return -1;
}
int filePos = 0;
int ret = 0;
while (file.available()) {
result[filePos] = file.read();
filePos++;
if (filePos == len) {
ret = -2;
break;
}
}
file.close();
return ret;
}
int VFileSystem::WriteFile(const char* fileName, const uint8_t* data, int len)
{
File file = SPIFFS.open(fileName, FILE_WRITE);
if (!file) {
return -1;
}
int ret = 0;
for (int i = 0; i < len; i++) {
if (file.write(data[i]) != 1) {
ret = -1;
break;
}
}
file.close();
return ret;
}

View File

@ -0,0 +1,15 @@
#pragma once
#include <Arduino.h>
#define FORMAT_SPIFFS_IF_FAILED false
class VFileSystem
{
public:
int Init();
size_t TotalSpace();
size_t FreeSpace();
int ReadFile(const char* fileName, uint8_t* result, int len);
int WriteFile(const char* fileName, const uint8_t* data, int len);
};

View File

@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x3F0000,
spiffs, data, spiffs, 0x400000,0xBF0000,
coredump, data, coredump,0xFF0000,0x10000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 app0 app ota_0 0x10000 0x3F0000
5 spiffs data spiffs 0x400000 0xBF0000
6 coredump data coredump 0xFF0000 0x10000

18
platformio.ini Normal file
View File

@ -0,0 +1,18 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:esp32-s2-sensor-recorder]
platform = espressif32
board = adafruit_metro_esp32s2
board_build.flash_mode = qio
board_upload.flash_size = 16MB
board_build.partitions = partitions_12M_SPIFFS.csv
framework = arduino
upload_port = COM8

46
src/main.cpp Normal file
View File

@ -0,0 +1,46 @@
#include <Arduino.h>
#include <vector>
#include <string>
#include "VFileSystem.h"
VFileSystem fs;
uint8_t testBuf[6 * 1024];
void setup()
{
Serial1.begin(115200);
Serial1.println("Begin...");
if (fs.Init()) {
Serial1.println("FS Init Failed.");
return;
}
Serial1.printf("FreeSpace: %ld\n", fs.FreeSpace());
Serial1.println("Read File:");
fs.ReadFile("/rec-0000.dat", testBuf, 6 * 1024);
for (int i = 0; i < 6 * 1024; i++) {
Serial1.printf("%#x ", testBuf[i]);
}
Serial1.println();
Serial1.println("Write File:");
for (int i = 0; i < 6 * 1024; i++) {
testBuf[i] = i % 2 ? 0x5a : 0x66;
}
fs.WriteFile("/rec-0000.dat", testBuf, 6 * 1024);
Serial1.println("End.");
}
void loop()
{
}

6
tools/init_fs.py Normal file
View File

@ -0,0 +1,6 @@
for i in range(1024):
with open(f"../data/rec-{str(i).zfill(4)}.dat", "wb") as f:
data = b""
for j in range(6144):
data += b"\xff"
f.write(data)