Skip to content

Commit b297dda

Browse files
committed
Merge pull request #294 from ficeto/esp8266
Esp8266 SPIFFS Tool
2 parents 0256dd0 + d7679d8 commit b297dda

12 files changed

+61
-22
lines changed

boards.txt

+27-10
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ generic.build.flash_freq=40
2525
generic.build.flash_ld=eagle.flash.512k.ld
2626
generic.build.spiffs_start=0x6B000
2727
generic.build.spiffs_end=0x7B000
28+
generic.build.spiffs_pagesize=256
29+
generic.build.spiffs_blocksize=4096
2830

2931
generic.menu.CpuFrequency.80=80 MHz
3032
generic.menu.CpuFrequency.80.build.f_cpu=80000000L
@@ -55,46 +57,57 @@ generic.menu.FlashSize.512K.build.flash_size=512K
5557
generic.menu.FlashSize.512K.build.flash_ld=eagle.flash.512k.ld
5658
generic.menu.FlashSize.512K.build.spiffs_start=0x6B000
5759
generic.menu.FlashSize.512K.build.spiffs_end=0x7B000
60+
generic.menu.FlashSize.512K.build.spiffs_blocksize=4096
5861
generic.menu.FlashSize.1M512=1M (512K SPIFFS)
5962
generic.menu.FlashSize.1M512.build.flash_size=1M
6063
generic.menu.FlashSize.1M512.build.flash_ld=eagle.flash.1m512.ld
6164
generic.menu.FlashSize.1M512.build.spiffs_start=0x6B000
6265
generic.menu.FlashSize.1M512.build.spiffs_end=0xFB000
66+
generic.menu.FlashSize.1M512.build.spiffs_blocksize=8192
6367
generic.menu.FlashSize.1M256=1M (256K SPIFFS)
6468
generic.menu.FlashSize.1M256.build.flash_size=1M
6569
generic.menu.FlashSize.1M256.build.flash_ld=eagle.flash.1m256.ld
6670
generic.menu.FlashSize.1M256.build.spiffs_start=0xAB000
6771
generic.menu.FlashSize.1M256.build.spiffs_end=0xFB000
72+
generic.menu.FlashSize.1M256.build.spiffs_blocksize=4096
6873
generic.menu.FlashSize.1M128=1M (128K SPIFFS)
6974
generic.menu.FlashSize.1M128.build.flash_size=1M
7075
generic.menu.FlashSize.1M128.build.flash_ld=eagle.flash.1m128.ld
7176
generic.menu.FlashSize.1M128.build.spiffs_start=0xCB000
7277
generic.menu.FlashSize.1M128.build.spiffs_end=0xFB000
78+
generic.menu.FlashSize.1M128.build.spiffs_blocksize=4096
7379
generic.menu.FlashSize.1M64=1M (64K SPIFFS)
7480
generic.menu.FlashSize.1M64.build.flash_size=1M
7581
generic.menu.FlashSize.1M64.build.flash_ld=eagle.flash.1m64.ld
7682
generic.menu.FlashSize.1M64.build.spiffs_start=0xEB000
7783
generic.menu.FlashSize.1M64.build.spiffs_end=0xFB000
84+
generic.menu.FlashSize.1M64.build.spiffs_blocksize=4096
7885
generic.menu.FlashSize.2M=2M (1M SPIFFS)
7986
generic.menu.FlashSize.2M.build.flash_size=2M
8087
generic.menu.FlashSize.2M.build.flash_ld=eagle.flash.2m.ld
8188
generic.menu.FlashSize.2M.build.spiffs_start=0x100000
8289
generic.menu.FlashSize.2M.build.spiffs_end=0x1FB000
90+
generic.menu.FlashSize.2M.build.spiffs_blocksize=8192
8391
generic.menu.FlashSize.4M=4M (3M SPIFFS)
8492
generic.menu.FlashSize.4M.build.flash_size=4M
8593
generic.menu.FlashSize.4M.build.flash_ld=eagle.flash.4m.ld
8694
generic.menu.FlashSize.4M.build.spiffs_start=0x100000
8795
generic.menu.FlashSize.4M.build.spiffs_end=0x3FB000
88-
generic.menu.FlashSize.8M=8M (7M SPIFFS)
89-
generic.menu.FlashSize.8M.build.flash_size=1M
90-
generic.menu.FlashSize.8M.build.flash_ld=eagle.flash.8m.ld
91-
generic.menu.FlashSize.8M.build.spiffs_start=0x100000
92-
generic.menu.FlashSize.8M.build.spiffs_end=0x800000
93-
generic.menu.FlashSize.16M=16M (15M SPIFFS)
94-
generic.menu.FlashSize.16M.build.flash_size=1M
95-
generic.menu.FlashSize.16M.build.flash_ld=eagle.flash.16m.ld
96-
generic.menu.FlashSize.16M.build.spiffs_start=0x100000
97-
generic.menu.FlashSize.16M.build.spiffs_end=0x1000000
96+
generic.menu.FlashSize.4M.build.spiffs_blocksize=8192
97+
98+
# disabled because espressif's bootloader refuses to write above 4M
99+
# generic.menu.FlashSize.8M=8M (7M SPIFFS)
100+
# generic.menu.FlashSize.8M.build.flash_size=1M
101+
# generic.menu.FlashSize.8M.build.flash_ld=eagle.flash.8m.ld
102+
# generic.menu.FlashSize.8M.build.spiffs_start=0x100000
103+
# generic.menu.FlashSize.8M.build.spiffs_end=0x800000
104+
# generic.menu.FlashSize.8M.build.spiffs_blocksize=8192
105+
# generic.menu.FlashSize.16M=16M (15M SPIFFS)
106+
# generic.menu.FlashSize.16M.build.flash_size=1M
107+
# generic.menu.FlashSize.16M.build.flash_ld=eagle.flash.16m.ld
108+
# generic.menu.FlashSize.16M.build.spiffs_start=0x100000
109+
# generic.menu.FlashSize.16M.build.spiffs_end=0x1000000
110+
# generic.menu.FlashSize.16M.build.spiffs_blocksize=8192
98111

99112
# generic.menu.FlashFreq.40=40MHz
100113
# generic.menu.FlashFreq.40.build.flash_freq=40
@@ -124,6 +137,8 @@ modwifi.build.flash_freq=40
124137
modwifi.build.flash_ld=eagle.flash.2m.ld
125138
modwifi.build.spiffs_start=0x100000
126139
modwifi.build.spiffs_end=0x1FB000
140+
modwifi.build.spiffs_pagesize=256
141+
modwifi.build.spiffs_blocksize=8192
127142

128143
modwifi.menu.CpuFrequency.80=80 MHz
129144
modwifi.menu.CpuFrequency.80.build.f_cpu=80000000L
@@ -172,6 +187,8 @@ nodemcu.build.flash_freq=40
172187
nodemcu.build.flash_ld=eagle.flash.4m.ld
173188
nodemcu.build.spiffs_start=0x100000
174189
nodemcu.build.spiffs_end=0x3FB000
190+
nodemcu.build.spiffs_pagesize=256
191+
nodemcu.build.spiffs_blocksize=8192
175192

176193
nodemcu.menu.CpuFrequency.80=80 MHz
177194
nodemcu.menu.CpuFrequency.80.build.f_cpu=80000000L

cores/esp8266/FileSystem.cpp

+13-11
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,25 @@
2222
#include "Arduino.h"
2323
#include "spiffs/spiffs_esp8266.h"
2424

25-
#define LOGICAL_PAGE_SIZE 256
26-
#define LOGICAL_BLOCK_SIZE (INTERNAL_FLASH_SECTOR_SIZE * 1)
27-
28-
29-
// These addresses are defined in the linker script.
25+
// These addresses and sizes are defined in the linker script.
3026
// For each flash memory size there is a linker script variant
3127
// which sets spiffs location and size.
3228
extern "C" uint32_t _SPIFFS_start;
3329
extern "C" uint32_t _SPIFFS_end;
30+
extern "C" uint32_t _SPIFFS_page;
31+
extern "C" uint32_t _SPIFFS_block;
3432

3533
static s32_t api_spiffs_read(u32_t addr, u32_t size, u8_t *dst);
3634
static s32_t api_spiffs_write(u32_t addr, u32_t size, u8_t *src);
3735
static s32_t api_spiffs_erase(u32_t addr, u32_t size);
3836

39-
FSClass FS((uint32_t) &_SPIFFS_start, (uint32_t) &_SPIFFS_end, 4);
37+
FSClass FS((uint32_t) &_SPIFFS_start, (uint32_t) &_SPIFFS_end, (uint32_t) &_SPIFFS_page, (uint32_t) &_SPIFFS_block, 4);
4038

41-
FSClass::FSClass(uint32_t beginAddress, uint32_t endAddress, uint32_t maxOpenFiles)
39+
FSClass::FSClass(uint32_t beginAddress, uint32_t endAddress, uint32_t pageSize, uint32_t blockSize, uint32_t maxOpenFiles)
4240
: _beginAddress(beginAddress)
4341
, _endAddress(endAddress)
42+
, _pageSize(pageSize)
43+
, _blockSize(blockSize)
4444
, _maxOpenFiles(maxOpenFiles)
4545
, _fs({0})
4646
{
@@ -51,23 +51,25 @@ int FSClass::_mountInternal(){
5151
SPIFFS_API_DBG_E("Can't start file system, wrong address\r\n");
5252
return SPIFFS_ERR_NOT_CONFIGURED;
5353
}
54+
if(_pageSize == 0) _pageSize = 256;
55+
if(_blockSize == 0) _blockSize = 4096;
5456

5557
spiffs_config cfg = {0};
5658
cfg.phys_addr = _beginAddress;
5759
cfg.phys_size = _endAddress - _beginAddress;
5860
cfg.phys_erase_block = INTERNAL_FLASH_SECTOR_SIZE;
59-
cfg.log_block_size = LOGICAL_BLOCK_SIZE;
60-
cfg.log_page_size = LOGICAL_PAGE_SIZE;
61+
cfg.log_block_size = _blockSize;
62+
cfg.log_page_size = _pageSize;
6163
cfg.hal_read_f = api_spiffs_read;
6264
cfg.hal_write_f = api_spiffs_write;
6365
cfg.hal_erase_f = api_spiffs_erase;
6466

6567
SPIFFS_API_DBG_V("FSClass::_mountInternal: start:%x, size:%d Kb\n", cfg.phys_addr, cfg.phys_size / 1024);
6668

67-
_work.reset(new uint8_t[2*LOGICAL_PAGE_SIZE]);
69+
_work.reset(new uint8_t[2*_pageSize]);
6870
_fdsSize = 32 * _maxOpenFiles;
6971
_fds.reset(new uint8_t[_fdsSize]);
70-
_cacheSize = (32 + LOGICAL_PAGE_SIZE) * _maxOpenFiles;
72+
_cacheSize = (32 + _pageSize) * _maxOpenFiles;
7173
_cache.reset(new uint8_t[_cacheSize]);
7274

7375
s32_t res = SPIFFS_mount(&_fs,

cores/esp8266/FileSystem.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class FSFile : public Stream {
8585

8686
class FSClass {
8787
public:
88-
FSClass(uint32_t beginAddress, uint32_t endAddress, uint32_t maxOpenFiles);
88+
FSClass(uint32_t beginAddress, uint32_t endAddress, uint32_t pageSize, uint32_t blockSize, uint32_t maxOpenFiles);
8989

9090
bool mount();
9191
void unmount();
@@ -117,6 +117,8 @@ class FSClass {
117117
size_t _cacheSize;
118118
uint32_t _beginAddress;
119119
uint32_t _endAddress;
120+
uint32_t _pageSize;
121+
uint32_t _blockSize;
120122
uint32_t _maxOpenFiles;
121123
spiffs _fs;
122124

tools/sdk/ld/eagle.flash.16m.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x40300000 );
1515
PROVIDE ( _SPIFFS_end = 0x41200000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x2000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

tools/sdk/ld/eagle.flash.1m128.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x402DB000 );
1515
PROVIDE ( _SPIFFS_end = 0x402FB000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x1000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

tools/sdk/ld/eagle.flash.1m256.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x402BB000 );
1515
PROVIDE ( _SPIFFS_end = 0x402FB000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x1000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

tools/sdk/ld/eagle.flash.1m512.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x4027B000 );
1515
PROVIDE ( _SPIFFS_end = 0x402FB000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x2000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

tools/sdk/ld/eagle.flash.1m64.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x402EB000 );
1515
PROVIDE ( _SPIFFS_end = 0x402FB000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x1000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

tools/sdk/ld/eagle.flash.2m.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x40300000 );
1515
PROVIDE ( _SPIFFS_end = 0x403FB000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x2000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

tools/sdk/ld/eagle.flash.4m.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x40300000 );
1515
PROVIDE ( _SPIFFS_end = 0x405FB000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x2000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

tools/sdk/ld/eagle.flash.512k.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x4026B000 );
1515
PROVIDE ( _SPIFFS_end = 0x4027B000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x1000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

tools/sdk/ld/eagle.flash.8m.ld

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ MEMORY
1313

1414
PROVIDE ( _SPIFFS_start = 0x40300000 );
1515
PROVIDE ( _SPIFFS_end = 0x40A00000 );
16+
PROVIDE ( _SPIFFS_page = 0x100 );
17+
PROVIDE ( _SPIFFS_block = 0x2000 );
1618

1719
INCLUDE "../ld/eagle.app.v6.common.ld"

0 commit comments

Comments
 (0)