From 7680098b8b86f5acbc69636cef45891a7a7a312a Mon Sep 17 00:00:00 2001
From: "Earle F. Philhower, III" <earlephilhower@yahoo.com>
Date: Mon, 15 Apr 2019 15:23:30 -0700
Subject: [PATCH 1/4] Make SPIFFS be an integer number of blocks

boards.txt.py simply calculated the end and start using flash sizes, but
in cases where an 8K page was used (>512KB SPIFFS), this could leave a
4K half-block left at the end of SPIFFS.

mkspiffs and the SPIFFS code uses integer division to calculate the
maximum block number, so it worked fine in practice and the code simply
ignored the extra, fractional block.

Now actually take block size into account when calculating the end of
SPIFFS, ensuring no fractional blocks are passed in.  Does not result in
data loss on pre-existing SPIFFS filesystems.
---
 boards.txt                                    | 150 +++++++++---------
 .../package_esp8266com_index.template.json    |   2 +-
 tools/boards.txt.py                           |  11 +-
 tools/sdk/ld/eagle.flash.16m14m.ld            |   4 +-
 tools/sdk/ld/eagle.flash.16m15m.ld            |   4 +-
 tools/sdk/ld/eagle.flash.1m512.ld             |   2 +-
 tools/sdk/ld/eagle.flash.2m1m.ld              |   4 +-
 tools/sdk/ld/eagle.flash.2m512.ld             |   2 +-
 tools/sdk/ld/eagle.flash.4m1m.ld              |   4 +-
 tools/sdk/ld/eagle.flash.4m2m.ld              |   4 +-
 tools/sdk/ld/eagle.flash.4m3m.ld              |   4 +-
 tools/sdk/ld/eagle.flash.8m6m.ld              |   4 +-
 tools/sdk/ld/eagle.flash.8m7m.ld              |   4 +-
 13 files changed, 100 insertions(+), 99 deletions(-)

diff --git a/boards.txt b/boards.txt
index db90994b33..9e76f582d3 100644
--- a/boards.txt
+++ b/boards.txt
@@ -230,7 +230,7 @@ generic.menu.eesz.2M512.upload.maximum_size=1044464
 generic.menu.eesz.2M512.build.rfcal_addr=0x1FC000
 generic.menu.eesz.2M512.build.spiffs_start=0x180000
 generic.menu.eesz.2M512.build.spiffs_end=0x1FB000
-generic.menu.eesz.2M512.build.spiffs_blocksize=8192
+generic.menu.eesz.2M512.build.spiffs_blocksize=4096
 generic.menu.eesz.2M1M=2M (1M SPIFFS)
 generic.menu.eesz.2M1M.build.flash_size=2M
 generic.menu.eesz.2M1M.build.flash_size_bytes=0x200000
@@ -239,7 +239,7 @@ generic.menu.eesz.2M1M.build.spiffs_pagesize=256
 generic.menu.eesz.2M1M.upload.maximum_size=1044464
 generic.menu.eesz.2M1M.build.rfcal_addr=0x1FC000
 generic.menu.eesz.2M1M.build.spiffs_start=0x100000
-generic.menu.eesz.2M1M.build.spiffs_end=0x1FB000
+generic.menu.eesz.2M1M.build.spiffs_end=0x1FA000
 generic.menu.eesz.2M1M.build.spiffs_blocksize=8192
 generic.menu.eesz.4M=4M (no SPIFFS)
 generic.menu.eesz.4M.build.flash_size=4M
@@ -256,7 +256,7 @@ generic.menu.eesz.4M1M.build.spiffs_pagesize=256
 generic.menu.eesz.4M1M.upload.maximum_size=1044464
 generic.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 generic.menu.eesz.4M1M.build.spiffs_start=0x300000
-generic.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+generic.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 generic.menu.eesz.4M1M.build.spiffs_blocksize=8192
 generic.menu.eesz.4M2M=4M (2M SPIFFS)
 generic.menu.eesz.4M2M.build.flash_size=4M
@@ -266,7 +266,7 @@ generic.menu.eesz.4M2M.build.spiffs_pagesize=256
 generic.menu.eesz.4M2M.upload.maximum_size=1044464
 generic.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 generic.menu.eesz.4M2M.build.spiffs_start=0x200000
-generic.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+generic.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 generic.menu.eesz.4M2M.build.spiffs_blocksize=8192
 generic.menu.eesz.4M3M=4M (3M SPIFFS)
 generic.menu.eesz.4M3M.build.flash_size=4M
@@ -276,7 +276,7 @@ generic.menu.eesz.4M3M.build.spiffs_pagesize=256
 generic.menu.eesz.4M3M.upload.maximum_size=1044464
 generic.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 generic.menu.eesz.4M3M.build.spiffs_start=0x100000
-generic.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+generic.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 generic.menu.eesz.4M3M.build.spiffs_blocksize=8192
 generic.menu.eesz.8M6M=8M (6M SPIFFS)
 generic.menu.eesz.8M6M.build.flash_size=8M
@@ -286,7 +286,7 @@ generic.menu.eesz.8M6M.build.spiffs_pagesize=256
 generic.menu.eesz.8M6M.upload.maximum_size=1044464
 generic.menu.eesz.8M6M.build.rfcal_addr=0x7FC000
 generic.menu.eesz.8M6M.build.spiffs_start=0x200000
-generic.menu.eesz.8M6M.build.spiffs_end=0x7FB000
+generic.menu.eesz.8M6M.build.spiffs_end=0x7FA000
 generic.menu.eesz.8M6M.build.spiffs_blocksize=8192
 generic.menu.eesz.8M7M=8M (7M SPIFFS)
 generic.menu.eesz.8M7M.build.flash_size=8M
@@ -296,7 +296,7 @@ generic.menu.eesz.8M7M.build.spiffs_pagesize=256
 generic.menu.eesz.8M7M.upload.maximum_size=1044464
 generic.menu.eesz.8M7M.build.rfcal_addr=0x7FC000
 generic.menu.eesz.8M7M.build.spiffs_start=0x100000
-generic.menu.eesz.8M7M.build.spiffs_end=0x7FB000
+generic.menu.eesz.8M7M.build.spiffs_end=0x7FA000
 generic.menu.eesz.8M7M.build.spiffs_blocksize=8192
 generic.menu.eesz.16M14M=16M (14M SPIFFS)
 generic.menu.eesz.16M14M.build.flash_size=16M
@@ -306,7 +306,7 @@ generic.menu.eesz.16M14M.build.spiffs_pagesize=256
 generic.menu.eesz.16M14M.upload.maximum_size=1044464
 generic.menu.eesz.16M14M.build.rfcal_addr=0xFFC000
 generic.menu.eesz.16M14M.build.spiffs_start=0x200000
-generic.menu.eesz.16M14M.build.spiffs_end=0xFFB000
+generic.menu.eesz.16M14M.build.spiffs_end=0xFFA000
 generic.menu.eesz.16M14M.build.spiffs_blocksize=8192
 generic.menu.eesz.16M15M=16M (15M SPIFFS)
 generic.menu.eesz.16M15M.build.flash_size=16M
@@ -316,7 +316,7 @@ generic.menu.eesz.16M15M.build.spiffs_pagesize=256
 generic.menu.eesz.16M15M.upload.maximum_size=1044464
 generic.menu.eesz.16M15M.build.rfcal_addr=0xFFC000
 generic.menu.eesz.16M15M.build.spiffs_start=0x100000
-generic.menu.eesz.16M15M.build.spiffs_end=0xFFB000
+generic.menu.eesz.16M15M.build.spiffs_end=0xFFA000
 generic.menu.eesz.16M15M.build.spiffs_blocksize=8192
 generic.menu.led.2=2
 generic.menu.led.2.build.led=-DLED_BUILTIN=2
@@ -792,7 +792,7 @@ espduino.menu.eesz.4M1M.build.spiffs_pagesize=256
 espduino.menu.eesz.4M1M.upload.maximum_size=1044464
 espduino.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 espduino.menu.eesz.4M1M.build.spiffs_start=0x300000
-espduino.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+espduino.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 espduino.menu.eesz.4M1M.build.spiffs_blocksize=8192
 espduino.menu.eesz.4M2M=4M (2M SPIFFS)
 espduino.menu.eesz.4M2M.build.flash_size=4M
@@ -802,7 +802,7 @@ espduino.menu.eesz.4M2M.build.spiffs_pagesize=256
 espduino.menu.eesz.4M2M.upload.maximum_size=1044464
 espduino.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 espduino.menu.eesz.4M2M.build.spiffs_start=0x200000
-espduino.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+espduino.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 espduino.menu.eesz.4M2M.build.spiffs_blocksize=8192
 espduino.menu.eesz.4M3M=4M (3M SPIFFS)
 espduino.menu.eesz.4M3M.build.flash_size=4M
@@ -812,7 +812,7 @@ espduino.menu.eesz.4M3M.build.spiffs_pagesize=256
 espduino.menu.eesz.4M3M.upload.maximum_size=1044464
 espduino.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 espduino.menu.eesz.4M3M.build.spiffs_start=0x100000
-espduino.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+espduino.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 espduino.menu.eesz.4M3M.build.spiffs_blocksize=8192
 espduino.menu.ip.lm2f=v2 Lower Memory
 espduino.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -976,7 +976,7 @@ huzzah.menu.eesz.4M1M.build.spiffs_pagesize=256
 huzzah.menu.eesz.4M1M.upload.maximum_size=1044464
 huzzah.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 huzzah.menu.eesz.4M1M.build.spiffs_start=0x300000
-huzzah.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+huzzah.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 huzzah.menu.eesz.4M1M.build.spiffs_blocksize=8192
 huzzah.menu.eesz.4M2M=4M (2M SPIFFS)
 huzzah.menu.eesz.4M2M.build.flash_size=4M
@@ -986,7 +986,7 @@ huzzah.menu.eesz.4M2M.build.spiffs_pagesize=256
 huzzah.menu.eesz.4M2M.upload.maximum_size=1044464
 huzzah.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 huzzah.menu.eesz.4M2M.build.spiffs_start=0x200000
-huzzah.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+huzzah.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 huzzah.menu.eesz.4M2M.build.spiffs_blocksize=8192
 huzzah.menu.eesz.4M3M=4M (3M SPIFFS)
 huzzah.menu.eesz.4M3M.build.flash_size=4M
@@ -996,7 +996,7 @@ huzzah.menu.eesz.4M3M.build.spiffs_pagesize=256
 huzzah.menu.eesz.4M3M.upload.maximum_size=1044464
 huzzah.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 huzzah.menu.eesz.4M3M.build.spiffs_start=0x100000
-huzzah.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+huzzah.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 huzzah.menu.eesz.4M3M.build.spiffs_blocksize=8192
 huzzah.menu.ip.lm2f=v2 Lower Memory
 huzzah.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -1160,7 +1160,7 @@ inventone.menu.eesz.4M1M.build.spiffs_pagesize=256
 inventone.menu.eesz.4M1M.upload.maximum_size=1044464
 inventone.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 inventone.menu.eesz.4M1M.build.spiffs_start=0x300000
-inventone.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+inventone.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 inventone.menu.eesz.4M1M.build.spiffs_blocksize=8192
 inventone.menu.eesz.4M2M=4M (2M SPIFFS)
 inventone.menu.eesz.4M2M.build.flash_size=4M
@@ -1170,7 +1170,7 @@ inventone.menu.eesz.4M2M.build.spiffs_pagesize=256
 inventone.menu.eesz.4M2M.upload.maximum_size=1044464
 inventone.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 inventone.menu.eesz.4M2M.build.spiffs_start=0x200000
-inventone.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+inventone.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 inventone.menu.eesz.4M2M.build.spiffs_blocksize=8192
 inventone.menu.eesz.4M3M=4M (3M SPIFFS)
 inventone.menu.eesz.4M3M.build.flash_size=4M
@@ -1180,7 +1180,7 @@ inventone.menu.eesz.4M3M.build.spiffs_pagesize=256
 inventone.menu.eesz.4M3M.upload.maximum_size=1044464
 inventone.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 inventone.menu.eesz.4M3M.build.spiffs_start=0x100000
-inventone.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+inventone.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 inventone.menu.eesz.4M3M.build.spiffs_blocksize=8192
 inventone.menu.ip.lm2f=v2 Lower Memory
 inventone.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -1347,7 +1347,7 @@ cw01.menu.eesz.4M1M.build.spiffs_pagesize=256
 cw01.menu.eesz.4M1M.upload.maximum_size=1044464
 cw01.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 cw01.menu.eesz.4M1M.build.spiffs_start=0x300000
-cw01.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+cw01.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 cw01.menu.eesz.4M1M.build.spiffs_blocksize=8192
 cw01.menu.eesz.4M2M=4M (2M SPIFFS)
 cw01.menu.eesz.4M2M.build.flash_size=4M
@@ -1357,7 +1357,7 @@ cw01.menu.eesz.4M2M.build.spiffs_pagesize=256
 cw01.menu.eesz.4M2M.upload.maximum_size=1044464
 cw01.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 cw01.menu.eesz.4M2M.build.spiffs_start=0x200000
-cw01.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+cw01.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 cw01.menu.eesz.4M2M.build.spiffs_blocksize=8192
 cw01.menu.eesz.4M3M=4M (3M SPIFFS)
 cw01.menu.eesz.4M3M.build.flash_size=4M
@@ -1367,7 +1367,7 @@ cw01.menu.eesz.4M3M.build.spiffs_pagesize=256
 cw01.menu.eesz.4M3M.upload.maximum_size=1044464
 cw01.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 cw01.menu.eesz.4M3M.build.spiffs_start=0x100000
-cw01.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+cw01.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 cw01.menu.eesz.4M3M.build.spiffs_blocksize=8192
 cw01.menu.ip.lm2f=v2 Lower Memory
 cw01.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -1530,7 +1530,7 @@ espresso_lite_v1.menu.eesz.4M1M.build.spiffs_pagesize=256
 espresso_lite_v1.menu.eesz.4M1M.upload.maximum_size=1044464
 espresso_lite_v1.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 espresso_lite_v1.menu.eesz.4M1M.build.spiffs_start=0x300000
-espresso_lite_v1.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+espresso_lite_v1.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 espresso_lite_v1.menu.eesz.4M1M.build.spiffs_blocksize=8192
 espresso_lite_v1.menu.eesz.4M2M=4M (2M SPIFFS)
 espresso_lite_v1.menu.eesz.4M2M.build.flash_size=4M
@@ -1540,7 +1540,7 @@ espresso_lite_v1.menu.eesz.4M2M.build.spiffs_pagesize=256
 espresso_lite_v1.menu.eesz.4M2M.upload.maximum_size=1044464
 espresso_lite_v1.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 espresso_lite_v1.menu.eesz.4M2M.build.spiffs_start=0x200000
-espresso_lite_v1.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+espresso_lite_v1.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 espresso_lite_v1.menu.eesz.4M2M.build.spiffs_blocksize=8192
 espresso_lite_v1.menu.eesz.4M3M=4M (3M SPIFFS)
 espresso_lite_v1.menu.eesz.4M3M.build.flash_size=4M
@@ -1550,7 +1550,7 @@ espresso_lite_v1.menu.eesz.4M3M.build.spiffs_pagesize=256
 espresso_lite_v1.menu.eesz.4M3M.upload.maximum_size=1044464
 espresso_lite_v1.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 espresso_lite_v1.menu.eesz.4M3M.build.spiffs_start=0x100000
-espresso_lite_v1.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+espresso_lite_v1.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 espresso_lite_v1.menu.eesz.4M3M.build.spiffs_blocksize=8192
 espresso_lite_v1.menu.ResetMethod.ck=ck
 espresso_lite_v1.menu.ResetMethod.ck.upload.resetmethod=ck
@@ -1717,7 +1717,7 @@ espresso_lite_v2.menu.eesz.4M1M.build.spiffs_pagesize=256
 espresso_lite_v2.menu.eesz.4M1M.upload.maximum_size=1044464
 espresso_lite_v2.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 espresso_lite_v2.menu.eesz.4M1M.build.spiffs_start=0x300000
-espresso_lite_v2.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+espresso_lite_v2.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 espresso_lite_v2.menu.eesz.4M1M.build.spiffs_blocksize=8192
 espresso_lite_v2.menu.eesz.4M2M=4M (2M SPIFFS)
 espresso_lite_v2.menu.eesz.4M2M.build.flash_size=4M
@@ -1727,7 +1727,7 @@ espresso_lite_v2.menu.eesz.4M2M.build.spiffs_pagesize=256
 espresso_lite_v2.menu.eesz.4M2M.upload.maximum_size=1044464
 espresso_lite_v2.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 espresso_lite_v2.menu.eesz.4M2M.build.spiffs_start=0x200000
-espresso_lite_v2.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+espresso_lite_v2.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 espresso_lite_v2.menu.eesz.4M2M.build.spiffs_blocksize=8192
 espresso_lite_v2.menu.eesz.4M3M=4M (3M SPIFFS)
 espresso_lite_v2.menu.eesz.4M3M.build.flash_size=4M
@@ -1737,7 +1737,7 @@ espresso_lite_v2.menu.eesz.4M3M.build.spiffs_pagesize=256
 espresso_lite_v2.menu.eesz.4M3M.upload.maximum_size=1044464
 espresso_lite_v2.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 espresso_lite_v2.menu.eesz.4M3M.build.spiffs_start=0x100000
-espresso_lite_v2.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+espresso_lite_v2.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 espresso_lite_v2.menu.eesz.4M3M.build.spiffs_blocksize=8192
 espresso_lite_v2.menu.ResetMethod.ck=ck
 espresso_lite_v2.menu.ResetMethod.ck.upload.resetmethod=ck
@@ -1904,7 +1904,7 @@ phoenix_v1.menu.eesz.4M1M.build.spiffs_pagesize=256
 phoenix_v1.menu.eesz.4M1M.upload.maximum_size=1044464
 phoenix_v1.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 phoenix_v1.menu.eesz.4M1M.build.spiffs_start=0x300000
-phoenix_v1.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+phoenix_v1.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 phoenix_v1.menu.eesz.4M1M.build.spiffs_blocksize=8192
 phoenix_v1.menu.eesz.4M2M=4M (2M SPIFFS)
 phoenix_v1.menu.eesz.4M2M.build.flash_size=4M
@@ -1914,7 +1914,7 @@ phoenix_v1.menu.eesz.4M2M.build.spiffs_pagesize=256
 phoenix_v1.menu.eesz.4M2M.upload.maximum_size=1044464
 phoenix_v1.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 phoenix_v1.menu.eesz.4M2M.build.spiffs_start=0x200000
-phoenix_v1.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+phoenix_v1.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 phoenix_v1.menu.eesz.4M2M.build.spiffs_blocksize=8192
 phoenix_v1.menu.eesz.4M3M=4M (3M SPIFFS)
 phoenix_v1.menu.eesz.4M3M.build.flash_size=4M
@@ -1924,7 +1924,7 @@ phoenix_v1.menu.eesz.4M3M.build.spiffs_pagesize=256
 phoenix_v1.menu.eesz.4M3M.upload.maximum_size=1044464
 phoenix_v1.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 phoenix_v1.menu.eesz.4M3M.build.spiffs_start=0x100000
-phoenix_v1.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+phoenix_v1.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 phoenix_v1.menu.eesz.4M3M.build.spiffs_blocksize=8192
 phoenix_v1.menu.ResetMethod.ck=ck
 phoenix_v1.menu.ResetMethod.ck.upload.resetmethod=ck
@@ -2091,7 +2091,7 @@ phoenix_v2.menu.eesz.4M1M.build.spiffs_pagesize=256
 phoenix_v2.menu.eesz.4M1M.upload.maximum_size=1044464
 phoenix_v2.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 phoenix_v2.menu.eesz.4M1M.build.spiffs_start=0x300000
-phoenix_v2.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+phoenix_v2.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 phoenix_v2.menu.eesz.4M1M.build.spiffs_blocksize=8192
 phoenix_v2.menu.eesz.4M2M=4M (2M SPIFFS)
 phoenix_v2.menu.eesz.4M2M.build.flash_size=4M
@@ -2101,7 +2101,7 @@ phoenix_v2.menu.eesz.4M2M.build.spiffs_pagesize=256
 phoenix_v2.menu.eesz.4M2M.upload.maximum_size=1044464
 phoenix_v2.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 phoenix_v2.menu.eesz.4M2M.build.spiffs_start=0x200000
-phoenix_v2.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+phoenix_v2.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 phoenix_v2.menu.eesz.4M2M.build.spiffs_blocksize=8192
 phoenix_v2.menu.eesz.4M3M=4M (3M SPIFFS)
 phoenix_v2.menu.eesz.4M3M.build.flash_size=4M
@@ -2111,7 +2111,7 @@ phoenix_v2.menu.eesz.4M3M.build.spiffs_pagesize=256
 phoenix_v2.menu.eesz.4M3M.upload.maximum_size=1044464
 phoenix_v2.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 phoenix_v2.menu.eesz.4M3M.build.spiffs_start=0x100000
-phoenix_v2.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+phoenix_v2.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 phoenix_v2.menu.eesz.4M3M.build.spiffs_blocksize=8192
 phoenix_v2.menu.ResetMethod.ck=ck
 phoenix_v2.menu.ResetMethod.ck.upload.resetmethod=ck
@@ -2279,7 +2279,7 @@ nodemcu.menu.eesz.4M1M.build.spiffs_pagesize=256
 nodemcu.menu.eesz.4M1M.upload.maximum_size=1044464
 nodemcu.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 nodemcu.menu.eesz.4M1M.build.spiffs_start=0x300000
-nodemcu.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+nodemcu.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 nodemcu.menu.eesz.4M1M.build.spiffs_blocksize=8192
 nodemcu.menu.eesz.4M2M=4M (2M SPIFFS)
 nodemcu.menu.eesz.4M2M.build.flash_size=4M
@@ -2289,7 +2289,7 @@ nodemcu.menu.eesz.4M2M.build.spiffs_pagesize=256
 nodemcu.menu.eesz.4M2M.upload.maximum_size=1044464
 nodemcu.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 nodemcu.menu.eesz.4M2M.build.spiffs_start=0x200000
-nodemcu.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+nodemcu.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 nodemcu.menu.eesz.4M2M.build.spiffs_blocksize=8192
 nodemcu.menu.eesz.4M3M=4M (3M SPIFFS)
 nodemcu.menu.eesz.4M3M.build.flash_size=4M
@@ -2299,7 +2299,7 @@ nodemcu.menu.eesz.4M3M.build.spiffs_pagesize=256
 nodemcu.menu.eesz.4M3M.upload.maximum_size=1044464
 nodemcu.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 nodemcu.menu.eesz.4M3M.build.spiffs_start=0x100000
-nodemcu.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+nodemcu.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 nodemcu.menu.eesz.4M3M.build.spiffs_blocksize=8192
 nodemcu.menu.ip.lm2f=v2 Lower Memory
 nodemcu.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -2463,7 +2463,7 @@ nodemcuv2.menu.eesz.4M1M.build.spiffs_pagesize=256
 nodemcuv2.menu.eesz.4M1M.upload.maximum_size=1044464
 nodemcuv2.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 nodemcuv2.menu.eesz.4M1M.build.spiffs_start=0x300000
-nodemcuv2.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+nodemcuv2.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 nodemcuv2.menu.eesz.4M1M.build.spiffs_blocksize=8192
 nodemcuv2.menu.eesz.4M2M=4M (2M SPIFFS)
 nodemcuv2.menu.eesz.4M2M.build.flash_size=4M
@@ -2473,7 +2473,7 @@ nodemcuv2.menu.eesz.4M2M.build.spiffs_pagesize=256
 nodemcuv2.menu.eesz.4M2M.upload.maximum_size=1044464
 nodemcuv2.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 nodemcuv2.menu.eesz.4M2M.build.spiffs_start=0x200000
-nodemcuv2.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+nodemcuv2.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 nodemcuv2.menu.eesz.4M2M.build.spiffs_blocksize=8192
 nodemcuv2.menu.eesz.4M3M=4M (3M SPIFFS)
 nodemcuv2.menu.eesz.4M3M.build.flash_size=4M
@@ -2483,7 +2483,7 @@ nodemcuv2.menu.eesz.4M3M.build.spiffs_pagesize=256
 nodemcuv2.menu.eesz.4M3M.upload.maximum_size=1044464
 nodemcuv2.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 nodemcuv2.menu.eesz.4M3M.build.spiffs_start=0x100000
-nodemcuv2.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+nodemcuv2.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 nodemcuv2.menu.eesz.4M3M.build.spiffs_blocksize=8192
 nodemcuv2.menu.ip.lm2f=v2 Lower Memory
 nodemcuv2.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -2668,7 +2668,7 @@ modwifi.menu.eesz.2M512.upload.maximum_size=1044464
 modwifi.menu.eesz.2M512.build.rfcal_addr=0x1FC000
 modwifi.menu.eesz.2M512.build.spiffs_start=0x180000
 modwifi.menu.eesz.2M512.build.spiffs_end=0x1FB000
-modwifi.menu.eesz.2M512.build.spiffs_blocksize=8192
+modwifi.menu.eesz.2M512.build.spiffs_blocksize=4096
 modwifi.menu.eesz.2M1M=2M (1M SPIFFS)
 modwifi.menu.eesz.2M1M.build.flash_size=2M
 modwifi.menu.eesz.2M1M.build.flash_size_bytes=0x200000
@@ -2677,7 +2677,7 @@ modwifi.menu.eesz.2M1M.build.spiffs_pagesize=256
 modwifi.menu.eesz.2M1M.upload.maximum_size=1044464
 modwifi.menu.eesz.2M1M.build.rfcal_addr=0x1FC000
 modwifi.menu.eesz.2M1M.build.spiffs_start=0x100000
-modwifi.menu.eesz.2M1M.build.spiffs_end=0x1FB000
+modwifi.menu.eesz.2M1M.build.spiffs_end=0x1FA000
 modwifi.menu.eesz.2M1M.build.spiffs_blocksize=8192
 modwifi.menu.ip.lm2f=v2 Lower Memory
 modwifi.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -3209,7 +3209,7 @@ esp210.menu.eesz.4M1M.build.spiffs_pagesize=256
 esp210.menu.eesz.4M1M.upload.maximum_size=1044464
 esp210.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 esp210.menu.eesz.4M1M.build.spiffs_start=0x300000
-esp210.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+esp210.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 esp210.menu.eesz.4M1M.build.spiffs_blocksize=8192
 esp210.menu.eesz.4M2M=4M (2M SPIFFS)
 esp210.menu.eesz.4M2M.build.flash_size=4M
@@ -3219,7 +3219,7 @@ esp210.menu.eesz.4M2M.build.spiffs_pagesize=256
 esp210.menu.eesz.4M2M.upload.maximum_size=1044464
 esp210.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 esp210.menu.eesz.4M2M.build.spiffs_start=0x200000
-esp210.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+esp210.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 esp210.menu.eesz.4M2M.build.spiffs_blocksize=8192
 esp210.menu.eesz.4M3M=4M (3M SPIFFS)
 esp210.menu.eesz.4M3M.build.flash_size=4M
@@ -3229,7 +3229,7 @@ esp210.menu.eesz.4M3M.build.spiffs_pagesize=256
 esp210.menu.eesz.4M3M.upload.maximum_size=1044464
 esp210.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 esp210.menu.eesz.4M3M.build.spiffs_start=0x100000
-esp210.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+esp210.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 esp210.menu.eesz.4M3M.build.spiffs_blocksize=8192
 esp210.menu.ip.lm2f=v2 Lower Memory
 esp210.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -3393,7 +3393,7 @@ d1_mini.menu.eesz.4M1M.build.spiffs_pagesize=256
 d1_mini.menu.eesz.4M1M.upload.maximum_size=1044464
 d1_mini.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 d1_mini.menu.eesz.4M1M.build.spiffs_start=0x300000
-d1_mini.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+d1_mini.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 d1_mini.menu.eesz.4M1M.build.spiffs_blocksize=8192
 d1_mini.menu.eesz.4M2M=4M (2M SPIFFS)
 d1_mini.menu.eesz.4M2M.build.flash_size=4M
@@ -3403,7 +3403,7 @@ d1_mini.menu.eesz.4M2M.build.spiffs_pagesize=256
 d1_mini.menu.eesz.4M2M.upload.maximum_size=1044464
 d1_mini.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 d1_mini.menu.eesz.4M2M.build.spiffs_start=0x200000
-d1_mini.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+d1_mini.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 d1_mini.menu.eesz.4M2M.build.spiffs_blocksize=8192
 d1_mini.menu.eesz.4M3M=4M (3M SPIFFS)
 d1_mini.menu.eesz.4M3M.build.flash_size=4M
@@ -3413,7 +3413,7 @@ d1_mini.menu.eesz.4M3M.build.spiffs_pagesize=256
 d1_mini.menu.eesz.4M3M.upload.maximum_size=1044464
 d1_mini.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 d1_mini.menu.eesz.4M3M.build.spiffs_start=0x100000
-d1_mini.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+d1_mini.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 d1_mini.menu.eesz.4M3M.build.spiffs_blocksize=8192
 d1_mini.menu.ip.lm2f=v2 Lower Memory
 d1_mini.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -3570,7 +3570,7 @@ d1_mini_pro.menu.eesz.16M14M.build.spiffs_pagesize=256
 d1_mini_pro.menu.eesz.16M14M.upload.maximum_size=1044464
 d1_mini_pro.menu.eesz.16M14M.build.rfcal_addr=0xFFC000
 d1_mini_pro.menu.eesz.16M14M.build.spiffs_start=0x200000
-d1_mini_pro.menu.eesz.16M14M.build.spiffs_end=0xFFB000
+d1_mini_pro.menu.eesz.16M14M.build.spiffs_end=0xFFA000
 d1_mini_pro.menu.eesz.16M14M.build.spiffs_blocksize=8192
 d1_mini_pro.menu.eesz.16M15M=16M (15M SPIFFS)
 d1_mini_pro.menu.eesz.16M15M.build.flash_size=16M
@@ -3580,7 +3580,7 @@ d1_mini_pro.menu.eesz.16M15M.build.spiffs_pagesize=256
 d1_mini_pro.menu.eesz.16M15M.upload.maximum_size=1044464
 d1_mini_pro.menu.eesz.16M15M.build.rfcal_addr=0xFFC000
 d1_mini_pro.menu.eesz.16M15M.build.spiffs_start=0x100000
-d1_mini_pro.menu.eesz.16M15M.build.spiffs_end=0xFFB000
+d1_mini_pro.menu.eesz.16M15M.build.spiffs_end=0xFFA000
 d1_mini_pro.menu.eesz.16M15M.build.spiffs_blocksize=8192
 d1_mini_pro.menu.ip.lm2f=v2 Lower Memory
 d1_mini_pro.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -3968,7 +3968,7 @@ d1.menu.eesz.4M1M.build.spiffs_pagesize=256
 d1.menu.eesz.4M1M.upload.maximum_size=1044464
 d1.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 d1.menu.eesz.4M1M.build.spiffs_start=0x300000
-d1.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+d1.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 d1.menu.eesz.4M1M.build.spiffs_blocksize=8192
 d1.menu.eesz.4M2M=4M (2M SPIFFS)
 d1.menu.eesz.4M2M.build.flash_size=4M
@@ -3978,7 +3978,7 @@ d1.menu.eesz.4M2M.build.spiffs_pagesize=256
 d1.menu.eesz.4M2M.upload.maximum_size=1044464
 d1.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 d1.menu.eesz.4M2M.build.spiffs_start=0x200000
-d1.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+d1.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 d1.menu.eesz.4M2M.build.spiffs_blocksize=8192
 d1.menu.eesz.4M3M=4M (3M SPIFFS)
 d1.menu.eesz.4M3M.build.flash_size=4M
@@ -3988,7 +3988,7 @@ d1.menu.eesz.4M3M.build.spiffs_pagesize=256
 d1.menu.eesz.4M3M.upload.maximum_size=1044464
 d1.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 d1.menu.eesz.4M3M.build.spiffs_start=0x100000
-d1.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+d1.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 d1.menu.eesz.4M3M.build.spiffs_blocksize=8192
 d1.menu.ip.lm2f=v2 Lower Memory
 d1.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -4155,7 +4155,7 @@ espino.menu.eesz.4M1M.build.spiffs_pagesize=256
 espino.menu.eesz.4M1M.upload.maximum_size=1044464
 espino.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 espino.menu.eesz.4M1M.build.spiffs_start=0x300000
-espino.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+espino.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 espino.menu.eesz.4M1M.build.spiffs_blocksize=8192
 espino.menu.eesz.4M2M=4M (2M SPIFFS)
 espino.menu.eesz.4M2M.build.flash_size=4M
@@ -4165,7 +4165,7 @@ espino.menu.eesz.4M2M.build.spiffs_pagesize=256
 espino.menu.eesz.4M2M.upload.maximum_size=1044464
 espino.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 espino.menu.eesz.4M2M.build.spiffs_start=0x200000
-espino.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+espino.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 espino.menu.eesz.4M2M.build.spiffs_blocksize=8192
 espino.menu.eesz.4M3M=4M (3M SPIFFS)
 espino.menu.eesz.4M3M.build.flash_size=4M
@@ -4175,7 +4175,7 @@ espino.menu.eesz.4M3M.build.spiffs_pagesize=256
 espino.menu.eesz.4M3M.upload.maximum_size=1044464
 espino.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 espino.menu.eesz.4M3M.build.spiffs_start=0x100000
-espino.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+espino.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 espino.menu.eesz.4M3M.build.spiffs_blocksize=8192
 espino.menu.ip.lm2f=v2 Lower Memory
 espino.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -4339,7 +4339,7 @@ espinotee.menu.eesz.4M1M.build.spiffs_pagesize=256
 espinotee.menu.eesz.4M1M.upload.maximum_size=1044464
 espinotee.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 espinotee.menu.eesz.4M1M.build.spiffs_start=0x300000
-espinotee.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+espinotee.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 espinotee.menu.eesz.4M1M.build.spiffs_blocksize=8192
 espinotee.menu.eesz.4M2M=4M (2M SPIFFS)
 espinotee.menu.eesz.4M2M.build.flash_size=4M
@@ -4349,7 +4349,7 @@ espinotee.menu.eesz.4M2M.build.spiffs_pagesize=256
 espinotee.menu.eesz.4M2M.upload.maximum_size=1044464
 espinotee.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 espinotee.menu.eesz.4M2M.build.spiffs_start=0x200000
-espinotee.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+espinotee.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 espinotee.menu.eesz.4M2M.build.spiffs_blocksize=8192
 espinotee.menu.eesz.4M3M=4M (3M SPIFFS)
 espinotee.menu.eesz.4M3M.build.flash_size=4M
@@ -4359,7 +4359,7 @@ espinotee.menu.eesz.4M3M.build.spiffs_pagesize=256
 espinotee.menu.eesz.4M3M.upload.maximum_size=1044464
 espinotee.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 espinotee.menu.eesz.4M3M.build.spiffs_start=0x100000
-espinotee.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+espinotee.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 espinotee.menu.eesz.4M3M.build.spiffs_blocksize=8192
 espinotee.menu.ip.lm2f=v2 Lower Memory
 espinotee.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -4779,7 +4779,7 @@ arduino-esp8266.menu.eesz.4M1M.build.spiffs_pagesize=256
 arduino-esp8266.menu.eesz.4M1M.upload.maximum_size=1044464
 arduino-esp8266.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 arduino-esp8266.menu.eesz.4M1M.build.spiffs_start=0x300000
-arduino-esp8266.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+arduino-esp8266.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 arduino-esp8266.menu.eesz.4M1M.build.spiffs_blocksize=8192
 arduino-esp8266.menu.eesz.4M2M=4M (2M SPIFFS)
 arduino-esp8266.menu.eesz.4M2M.build.flash_size=4M
@@ -4789,7 +4789,7 @@ arduino-esp8266.menu.eesz.4M2M.build.spiffs_pagesize=256
 arduino-esp8266.menu.eesz.4M2M.upload.maximum_size=1044464
 arduino-esp8266.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 arduino-esp8266.menu.eesz.4M2M.build.spiffs_start=0x200000
-arduino-esp8266.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+arduino-esp8266.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 arduino-esp8266.menu.eesz.4M2M.build.spiffs_blocksize=8192
 arduino-esp8266.menu.eesz.4M3M=4M (3M SPIFFS)
 arduino-esp8266.menu.eesz.4M3M.build.flash_size=4M
@@ -4799,7 +4799,7 @@ arduino-esp8266.menu.eesz.4M3M.build.spiffs_pagesize=256
 arduino-esp8266.menu.eesz.4M3M.upload.maximum_size=1044464
 arduino-esp8266.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 arduino-esp8266.menu.eesz.4M3M.build.spiffs_start=0x100000
-arduino-esp8266.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+arduino-esp8266.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 arduino-esp8266.menu.eesz.4M3M.build.spiffs_blocksize=8192
 arduino-esp8266.menu.ip.lm2f=v2 Lower Memory
 arduino-esp8266.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -5149,7 +5149,7 @@ oak.menu.eesz.4M1M.build.spiffs_pagesize=256
 oak.menu.eesz.4M1M.upload.maximum_size=1044464
 oak.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 oak.menu.eesz.4M1M.build.spiffs_start=0x300000
-oak.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+oak.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 oak.menu.eesz.4M1M.build.spiffs_blocksize=8192
 oak.menu.eesz.4M2M=4M (2M SPIFFS)
 oak.menu.eesz.4M2M.build.flash_size=4M
@@ -5159,7 +5159,7 @@ oak.menu.eesz.4M2M.build.spiffs_pagesize=256
 oak.menu.eesz.4M2M.upload.maximum_size=1044464
 oak.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 oak.menu.eesz.4M2M.build.spiffs_start=0x200000
-oak.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+oak.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 oak.menu.eesz.4M2M.build.spiffs_blocksize=8192
 oak.menu.eesz.4M3M=4M (3M SPIFFS)
 oak.menu.eesz.4M3M.build.flash_size=4M
@@ -5169,7 +5169,7 @@ oak.menu.eesz.4M3M.build.spiffs_pagesize=256
 oak.menu.eesz.4M3M.upload.maximum_size=1044464
 oak.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 oak.menu.eesz.4M3M.build.spiffs_start=0x100000
-oak.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+oak.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 oak.menu.eesz.4M3M.build.spiffs_blocksize=8192
 oak.menu.ip.lm2f=v2 Lower Memory
 oak.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -5333,7 +5333,7 @@ wifiduino.menu.eesz.4M1M.build.spiffs_pagesize=256
 wifiduino.menu.eesz.4M1M.upload.maximum_size=1044464
 wifiduino.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 wifiduino.menu.eesz.4M1M.build.spiffs_start=0x300000
-wifiduino.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+wifiduino.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 wifiduino.menu.eesz.4M1M.build.spiffs_blocksize=8192
 wifiduino.menu.eesz.4M2M=4M (2M SPIFFS)
 wifiduino.menu.eesz.4M2M.build.flash_size=4M
@@ -5343,7 +5343,7 @@ wifiduino.menu.eesz.4M2M.build.spiffs_pagesize=256
 wifiduino.menu.eesz.4M2M.upload.maximum_size=1044464
 wifiduino.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 wifiduino.menu.eesz.4M2M.build.spiffs_start=0x200000
-wifiduino.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+wifiduino.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 wifiduino.menu.eesz.4M2M.build.spiffs_blocksize=8192
 wifiduino.menu.eesz.4M3M=4M (3M SPIFFS)
 wifiduino.menu.eesz.4M3M.build.flash_size=4M
@@ -5353,7 +5353,7 @@ wifiduino.menu.eesz.4M3M.build.spiffs_pagesize=256
 wifiduino.menu.eesz.4M3M.upload.maximum_size=1044464
 wifiduino.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 wifiduino.menu.eesz.4M3M.build.spiffs_start=0x100000
-wifiduino.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+wifiduino.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 wifiduino.menu.eesz.4M3M.build.spiffs_blocksize=8192
 wifiduino.menu.ip.lm2f=v2 Lower Memory
 wifiduino.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -5628,7 +5628,7 @@ wifi_slot.menu.eesz.2M512.upload.maximum_size=1044464
 wifi_slot.menu.eesz.2M512.build.rfcal_addr=0x1FC000
 wifi_slot.menu.eesz.2M512.build.spiffs_start=0x180000
 wifi_slot.menu.eesz.2M512.build.spiffs_end=0x1FB000
-wifi_slot.menu.eesz.2M512.build.spiffs_blocksize=8192
+wifi_slot.menu.eesz.2M512.build.spiffs_blocksize=4096
 wifi_slot.menu.eesz.2M1M=2M (1M SPIFFS)
 wifi_slot.menu.eesz.2M1M.build.flash_size=2M
 wifi_slot.menu.eesz.2M1M.build.flash_size_bytes=0x200000
@@ -5637,7 +5637,7 @@ wifi_slot.menu.eesz.2M1M.build.spiffs_pagesize=256
 wifi_slot.menu.eesz.2M1M.upload.maximum_size=1044464
 wifi_slot.menu.eesz.2M1M.build.rfcal_addr=0x1FC000
 wifi_slot.menu.eesz.2M1M.build.spiffs_start=0x100000
-wifi_slot.menu.eesz.2M1M.build.spiffs_end=0x1FB000
+wifi_slot.menu.eesz.2M1M.build.spiffs_end=0x1FA000
 wifi_slot.menu.eesz.2M1M.build.spiffs_blocksize=8192
 wifi_slot.menu.ip.lm2f=v2 Lower Memory
 wifi_slot.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -5801,7 +5801,7 @@ wiolink.menu.eesz.4M1M.build.spiffs_pagesize=256
 wiolink.menu.eesz.4M1M.upload.maximum_size=1044464
 wiolink.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 wiolink.menu.eesz.4M1M.build.spiffs_start=0x300000
-wiolink.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+wiolink.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 wiolink.menu.eesz.4M1M.build.spiffs_blocksize=8192
 wiolink.menu.eesz.4M2M=4M (2M SPIFFS)
 wiolink.menu.eesz.4M2M.build.flash_size=4M
@@ -5811,7 +5811,7 @@ wiolink.menu.eesz.4M2M.build.spiffs_pagesize=256
 wiolink.menu.eesz.4M2M.upload.maximum_size=1044464
 wiolink.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 wiolink.menu.eesz.4M2M.build.spiffs_start=0x200000
-wiolink.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+wiolink.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 wiolink.menu.eesz.4M2M.build.spiffs_blocksize=8192
 wiolink.menu.eesz.4M3M=4M (3M SPIFFS)
 wiolink.menu.eesz.4M3M.build.flash_size=4M
@@ -5821,7 +5821,7 @@ wiolink.menu.eesz.4M3M.build.spiffs_pagesize=256
 wiolink.menu.eesz.4M3M.upload.maximum_size=1044464
 wiolink.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 wiolink.menu.eesz.4M3M.build.spiffs_start=0x100000
-wiolink.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+wiolink.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 wiolink.menu.eesz.4M3M.build.spiffs_blocksize=8192
 wiolink.menu.ip.lm2f=v2 Lower Memory
 wiolink.menu.ip.lm2f.build.lwip_include=lwip2/include
@@ -5985,7 +5985,7 @@ espectro.menu.eesz.4M1M.build.spiffs_pagesize=256
 espectro.menu.eesz.4M1M.upload.maximum_size=1044464
 espectro.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
 espectro.menu.eesz.4M1M.build.spiffs_start=0x300000
-espectro.menu.eesz.4M1M.build.spiffs_end=0x3FB000
+espectro.menu.eesz.4M1M.build.spiffs_end=0x3FA000
 espectro.menu.eesz.4M1M.build.spiffs_blocksize=8192
 espectro.menu.eesz.4M2M=4M (2M SPIFFS)
 espectro.menu.eesz.4M2M.build.flash_size=4M
@@ -5995,7 +5995,7 @@ espectro.menu.eesz.4M2M.build.spiffs_pagesize=256
 espectro.menu.eesz.4M2M.upload.maximum_size=1044464
 espectro.menu.eesz.4M2M.build.rfcal_addr=0x3FC000
 espectro.menu.eesz.4M2M.build.spiffs_start=0x200000
-espectro.menu.eesz.4M2M.build.spiffs_end=0x3FB000
+espectro.menu.eesz.4M2M.build.spiffs_end=0x3FA000
 espectro.menu.eesz.4M2M.build.spiffs_blocksize=8192
 espectro.menu.eesz.4M3M=4M (3M SPIFFS)
 espectro.menu.eesz.4M3M.build.flash_size=4M
@@ -6005,7 +6005,7 @@ espectro.menu.eesz.4M3M.build.spiffs_pagesize=256
 espectro.menu.eesz.4M3M.upload.maximum_size=1044464
 espectro.menu.eesz.4M3M.build.rfcal_addr=0x3FC000
 espectro.menu.eesz.4M3M.build.spiffs_start=0x100000
-espectro.menu.eesz.4M3M.build.spiffs_end=0x3FB000
+espectro.menu.eesz.4M3M.build.spiffs_end=0x3FA000
 espectro.menu.eesz.4M3M.build.spiffs_blocksize=8192
 espectro.menu.ip.lm2f=v2 Lower Memory
 espectro.menu.ip.lm2f.build.lwip_include=lwip2/include
diff --git a/package/package_esp8266com_index.template.json b/package/package_esp8266com_index.template.json
index 387f636c17..ec2314f7e1 100644
--- a/package/package_esp8266com_index.template.json
+++ b/package/package_esp8266com_index.template.json
@@ -299,4 +299,4 @@
          ]
       }
    ]
-}
+}
\ No newline at end of file
diff --git a/tools/boards.txt.py b/tools/boards.txt.py
index fd9605116a..068c4a07ac 100755
--- a/tools/boards.txt.py
+++ b/tools/boards.txt.py
@@ -1172,11 +1172,14 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
     else:
         max_upload_size = 1024 * 1024 - reserved
         spiffs_start = (flashsize_kb - spiffs_kb) * 1024
-        if spiffs_kb < 512:
+        if spiffs_kb <= 512:
             spiffs_blocksize = 4096
         else:
             spiffs_blocksize = 8192
 
+    # Adjust SPIFFS_end to be a multiple of the block size
+    spiffs_end = spiffs_blocksize * (int)((spiffs_end - spiffs_start)/spiffs_blocksize) + spiffs_start;
+
     strsize = str(int(flashsize_kb / 1024)) + 'M' if (flashsize_kb >= 1024) else str(flashsize_kb) + 'K'
     strspiffs = str(int(spiffs_kb / 1024)) + 'M' if (spiffs_kb >= 1024) else str(spiffs_kb) + 'K'
     strspiffs_strip = str(int(spiffs_kb / 1024)) + 'M' if (spiffs_kb >= 1024) else str(spiffs_kb) if (spiffs_kb > 0) else ''
@@ -1217,13 +1220,11 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
         if spiffs_kb == 0:
             spiffs_start = spiffs_end
             page = 0
-            block = 0
+            spiffs_blocksize = 0
         elif spiffs_kb < 0x80000 / 1024:
             page = 0x100
-            block = 0x1000
         else:
             page = 0x100
-            block = 0x2000
 
         print("/* Flash Split for %s chips */" % strsize)
         print("/* sketch @0x%X (~%dKB) (%dB) */" % (spi, (max_upload_size / 1024), max_upload_size))
@@ -1246,7 +1247,7 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
         print("PROVIDE ( _SPIFFS_start = 0x%08X );" % (0x40200000 + spiffs_start))
         print("PROVIDE ( _SPIFFS_end = 0x%08X );" % (0x40200000 + spiffs_end))
         print("PROVIDE ( _SPIFFS_page = 0x%X );" % page)
-        print("PROVIDE ( _SPIFFS_block = 0x%X );" % block)
+        print("PROVIDE ( _SPIFFS_block = 0x%X );" % spiffs_blocksize)
         print("")
         print('INCLUDE "local.eagle.app.v6.common.ld"')
 
diff --git a/tools/sdk/ld/eagle.flash.16m14m.ld b/tools/sdk/ld/eagle.flash.16m14m.ld
index ccce5ddc39..c07f7adc5b 100644
--- a/tools/sdk/ld/eagle.flash.16m14m.ld
+++ b/tools/sdk/ld/eagle.flash.16m14m.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 16M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~1028KB) (1052688B) */
-/* spiffs @0x40400000 (~14316KB) (14659584B) */
+/* spiffs @0x40400000 (~14312KB) (14655488B) */
 /* eeprom @0x411FB000 (4KB) */
 /* rfcal  @0x411FC000 (4KB) */
 /* wifi   @0x411FD000 (12KB) */
@@ -15,7 +15,7 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40400000 );
-PROVIDE ( _SPIFFS_end = 0x411FB000 );
+PROVIDE ( _SPIFFS_end = 0x411FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
 PROVIDE ( _SPIFFS_block = 0x2000 );
 
diff --git a/tools/sdk/ld/eagle.flash.16m15m.ld b/tools/sdk/ld/eagle.flash.16m15m.ld
index 93b30d219b..eca6831e25 100644
--- a/tools/sdk/ld/eagle.flash.16m15m.ld
+++ b/tools/sdk/ld/eagle.flash.16m15m.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 16M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~4KB) (4112B) */
-/* spiffs @0x40300000 (~15340KB) (15708160B) */
+/* spiffs @0x40300000 (~15336KB) (15704064B) */
 /* eeprom @0x411FB000 (4KB) */
 /* rfcal  @0x411FC000 (4KB) */
 /* wifi   @0x411FD000 (12KB) */
@@ -15,7 +15,7 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40300000 );
-PROVIDE ( _SPIFFS_end = 0x411FB000 );
+PROVIDE ( _SPIFFS_end = 0x411FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
 PROVIDE ( _SPIFFS_block = 0x2000 );
 
diff --git a/tools/sdk/ld/eagle.flash.1m512.ld b/tools/sdk/ld/eagle.flash.1m512.ld
index f2df1a0734..10e573c7a5 100644
--- a/tools/sdk/ld/eagle.flash.1m512.ld
+++ b/tools/sdk/ld/eagle.flash.1m512.ld
@@ -17,6 +17,6 @@ MEMORY
 PROVIDE ( _SPIFFS_start = 0x4027B000 );
 PROVIDE ( _SPIFFS_end = 0x402FB000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
-PROVIDE ( _SPIFFS_block = 0x2000 );
+PROVIDE ( _SPIFFS_block = 0x1000 );
 
 INCLUDE "local.eagle.app.v6.common.ld"
diff --git a/tools/sdk/ld/eagle.flash.2m1m.ld b/tools/sdk/ld/eagle.flash.2m1m.ld
index 08fb1b152a..926d8a95a2 100644
--- a/tools/sdk/ld/eagle.flash.2m1m.ld
+++ b/tools/sdk/ld/eagle.flash.2m1m.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 2M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~4KB) (4112B) */
-/* spiffs @0x40300000 (~1004KB) (1028096B) */
+/* spiffs @0x40300000 (~1000KB) (1024000B) */
 /* eeprom @0x403FB000 (4KB) */
 /* rfcal  @0x403FC000 (4KB) */
 /* wifi   @0x403FD000 (12KB) */
@@ -15,7 +15,7 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40300000 );
-PROVIDE ( _SPIFFS_end = 0x403FB000 );
+PROVIDE ( _SPIFFS_end = 0x403FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
 PROVIDE ( _SPIFFS_block = 0x2000 );
 
diff --git a/tools/sdk/ld/eagle.flash.2m512.ld b/tools/sdk/ld/eagle.flash.2m512.ld
index 2d8f3e78a6..62ada26948 100644
--- a/tools/sdk/ld/eagle.flash.2m512.ld
+++ b/tools/sdk/ld/eagle.flash.2m512.ld
@@ -17,6 +17,6 @@ MEMORY
 PROVIDE ( _SPIFFS_start = 0x40380000 );
 PROVIDE ( _SPIFFS_end = 0x403FB000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
-PROVIDE ( _SPIFFS_block = 0x2000 );
+PROVIDE ( _SPIFFS_block = 0x1000 );
 
 INCLUDE "local.eagle.app.v6.common.ld"
diff --git a/tools/sdk/ld/eagle.flash.4m1m.ld b/tools/sdk/ld/eagle.flash.4m1m.ld
index 74bf04bc3d..0560631fc6 100644
--- a/tools/sdk/ld/eagle.flash.4m1m.ld
+++ b/tools/sdk/ld/eagle.flash.4m1m.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 4M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~2052KB) (2101264B) */
-/* spiffs @0x40500000 (~1004KB) (1028096B) */
+/* spiffs @0x40500000 (~1000KB) (1024000B) */
 /* eeprom @0x405FB000 (4KB) */
 /* rfcal  @0x405FC000 (4KB) */
 /* wifi   @0x405FD000 (12KB) */
@@ -15,7 +15,7 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40500000 );
-PROVIDE ( _SPIFFS_end = 0x405FB000 );
+PROVIDE ( _SPIFFS_end = 0x405FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
 PROVIDE ( _SPIFFS_block = 0x2000 );
 
diff --git a/tools/sdk/ld/eagle.flash.4m2m.ld b/tools/sdk/ld/eagle.flash.4m2m.ld
index 6eb95b1be9..5ea73c5747 100644
--- a/tools/sdk/ld/eagle.flash.4m2m.ld
+++ b/tools/sdk/ld/eagle.flash.4m2m.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 4M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~1028KB) (1052688B) */
-/* spiffs @0x40400000 (~2028KB) (2076672B) */
+/* spiffs @0x40400000 (~2024KB) (2072576B) */
 /* eeprom @0x405FB000 (4KB) */
 /* rfcal  @0x405FC000 (4KB) */
 /* wifi   @0x405FD000 (12KB) */
@@ -15,7 +15,7 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40400000 );
-PROVIDE ( _SPIFFS_end = 0x405FB000 );
+PROVIDE ( _SPIFFS_end = 0x405FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
 PROVIDE ( _SPIFFS_block = 0x2000 );
 
diff --git a/tools/sdk/ld/eagle.flash.4m3m.ld b/tools/sdk/ld/eagle.flash.4m3m.ld
index 37acf69daf..a141fcd515 100644
--- a/tools/sdk/ld/eagle.flash.4m3m.ld
+++ b/tools/sdk/ld/eagle.flash.4m3m.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 4M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~4KB) (4112B) */
-/* spiffs @0x40300000 (~3052KB) (3125248B) */
+/* spiffs @0x40300000 (~3048KB) (3121152B) */
 /* eeprom @0x405FB000 (4KB) */
 /* rfcal  @0x405FC000 (4KB) */
 /* wifi   @0x405FD000 (12KB) */
@@ -15,7 +15,7 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40300000 );
-PROVIDE ( _SPIFFS_end = 0x405FB000 );
+PROVIDE ( _SPIFFS_end = 0x405FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
 PROVIDE ( _SPIFFS_block = 0x2000 );
 
diff --git a/tools/sdk/ld/eagle.flash.8m6m.ld b/tools/sdk/ld/eagle.flash.8m6m.ld
index b65d46751a..ee57f20001 100644
--- a/tools/sdk/ld/eagle.flash.8m6m.ld
+++ b/tools/sdk/ld/eagle.flash.8m6m.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 8M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~1028KB) (1052688B) */
-/* spiffs @0x40400000 (~6124KB) (6270976B) */
+/* spiffs @0x40400000 (~6120KB) (6266880B) */
 /* eeprom @0x409FB000 (4KB) */
 /* rfcal  @0x409FC000 (4KB) */
 /* wifi   @0x409FD000 (12KB) */
@@ -15,7 +15,7 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40400000 );
-PROVIDE ( _SPIFFS_end = 0x409FB000 );
+PROVIDE ( _SPIFFS_end = 0x409FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
 PROVIDE ( _SPIFFS_block = 0x2000 );
 
diff --git a/tools/sdk/ld/eagle.flash.8m7m.ld b/tools/sdk/ld/eagle.flash.8m7m.ld
index 9ec7cc128b..32117f9b28 100644
--- a/tools/sdk/ld/eagle.flash.8m7m.ld
+++ b/tools/sdk/ld/eagle.flash.8m7m.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 8M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~4KB) (4112B) */
-/* spiffs @0x40300000 (~7148KB) (7319552B) */
+/* spiffs @0x40300000 (~7144KB) (7315456B) */
 /* eeprom @0x409FB000 (4KB) */
 /* rfcal  @0x409FC000 (4KB) */
 /* wifi   @0x409FD000 (12KB) */
@@ -15,7 +15,7 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40300000 );
-PROVIDE ( _SPIFFS_end = 0x409FB000 );
+PROVIDE ( _SPIFFS_end = 0x409FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
 PROVIDE ( _SPIFFS_block = 0x2000 );
 

From e2b36d30a32d8566b964465fcaa0a9006f1dc102 Mon Sep 17 00:00:00 2001
From: "Earle F. Philhower, III" <earlephilhower@yahoo.com>
Date: Tue, 16 Apr 2019 07:27:08 -0700
Subject: [PATCH 2/4] Fix the 1m512 case and clean up code

Ensure that no SPIFFS_block in the LD files is modified from the
original to endure correct backwards compatibility
---
 boards.txt                        | 22 +++++++++++-----------
 tools/boards.txt.py               |  9 +++++----
 tools/sdk/ld/eagle.flash.1m512.ld |  2 +-
 tools/sdk/ld/eagle.flash.2m512.ld |  6 +++---
 4 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/boards.txt b/boards.txt
index 9e76f582d3..7a96bc128c 100644
--- a/boards.txt
+++ b/boards.txt
@@ -193,7 +193,7 @@ generic.menu.eesz.1M512.upload.maximum_size=499696
 generic.menu.eesz.1M512.build.rfcal_addr=0xFC000
 generic.menu.eesz.1M512.build.spiffs_start=0x7B000
 generic.menu.eesz.1M512.build.spiffs_end=0xFB000
-generic.menu.eesz.1M512.build.spiffs_blocksize=4096
+generic.menu.eesz.1M512.build.spiffs_blocksize=8192
 generic.menu.eesz.2M=2M (no SPIFFS)
 generic.menu.eesz.2M.build.flash_size=2M
 generic.menu.eesz.2M.build.flash_size_bytes=0x200000
@@ -229,8 +229,8 @@ generic.menu.eesz.2M512.build.spiffs_pagesize=256
 generic.menu.eesz.2M512.upload.maximum_size=1044464
 generic.menu.eesz.2M512.build.rfcal_addr=0x1FC000
 generic.menu.eesz.2M512.build.spiffs_start=0x180000
-generic.menu.eesz.2M512.build.spiffs_end=0x1FB000
-generic.menu.eesz.2M512.build.spiffs_blocksize=4096
+generic.menu.eesz.2M512.build.spiffs_end=0x1FA000
+generic.menu.eesz.2M512.build.spiffs_blocksize=8192
 generic.menu.eesz.2M1M=2M (1M SPIFFS)
 generic.menu.eesz.2M1M.build.flash_size=2M
 generic.menu.eesz.2M1M.build.flash_size_bytes=0x200000
@@ -589,7 +589,7 @@ esp8285.menu.eesz.1M512.upload.maximum_size=499696
 esp8285.menu.eesz.1M512.build.rfcal_addr=0xFC000
 esp8285.menu.eesz.1M512.build.spiffs_start=0x7B000
 esp8285.menu.eesz.1M512.build.spiffs_end=0xFB000
-esp8285.menu.eesz.1M512.build.spiffs_blocksize=4096
+esp8285.menu.eesz.1M512.build.spiffs_blocksize=8192
 esp8285.menu.led.2=2
 esp8285.menu.led.2.build.led=-DLED_BUILTIN=2
 esp8285.menu.led.0=0
@@ -2667,8 +2667,8 @@ modwifi.menu.eesz.2M512.build.spiffs_pagesize=256
 modwifi.menu.eesz.2M512.upload.maximum_size=1044464
 modwifi.menu.eesz.2M512.build.rfcal_addr=0x1FC000
 modwifi.menu.eesz.2M512.build.spiffs_start=0x180000
-modwifi.menu.eesz.2M512.build.spiffs_end=0x1FB000
-modwifi.menu.eesz.2M512.build.spiffs_blocksize=4096
+modwifi.menu.eesz.2M512.build.spiffs_end=0x1FA000
+modwifi.menu.eesz.2M512.build.spiffs_blocksize=8192
 modwifi.menu.eesz.2M1M=2M (1M SPIFFS)
 modwifi.menu.eesz.2M1M.build.flash_size=2M
 modwifi.menu.eesz.2M1M.build.flash_size_bytes=0x200000
@@ -3805,7 +3805,7 @@ d1_mini_lite.menu.eesz.1M512.upload.maximum_size=499696
 d1_mini_lite.menu.eesz.1M512.build.rfcal_addr=0xFC000
 d1_mini_lite.menu.eesz.1M512.build.spiffs_start=0x7B000
 d1_mini_lite.menu.eesz.1M512.build.spiffs_end=0xFB000
-d1_mini_lite.menu.eesz.1M512.build.spiffs_blocksize=4096
+d1_mini_lite.menu.eesz.1M512.build.spiffs_blocksize=8192
 d1_mini_lite.menu.ip.lm2f=v2 Lower Memory
 d1_mini_lite.menu.ip.lm2f.build.lwip_include=lwip2/include
 d1_mini_lite.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat
@@ -4604,7 +4604,7 @@ wifinfo.menu.eesz.1M512.upload.maximum_size=499696
 wifinfo.menu.eesz.1M512.build.rfcal_addr=0xFC000
 wifinfo.menu.eesz.1M512.build.spiffs_start=0x7B000
 wifinfo.menu.eesz.1M512.build.spiffs_end=0xFB000
-wifinfo.menu.eesz.1M512.build.spiffs_blocksize=4096
+wifinfo.menu.eesz.1M512.build.spiffs_blocksize=8192
 wifinfo.menu.ip.lm2f=v2 Lower Memory
 wifinfo.menu.ip.lm2f.build.lwip_include=lwip2/include
 wifinfo.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat
@@ -5591,7 +5591,7 @@ wifi_slot.menu.eesz.1M512.upload.maximum_size=499696
 wifi_slot.menu.eesz.1M512.build.rfcal_addr=0xFC000
 wifi_slot.menu.eesz.1M512.build.spiffs_start=0x7B000
 wifi_slot.menu.eesz.1M512.build.spiffs_end=0xFB000
-wifi_slot.menu.eesz.1M512.build.spiffs_blocksize=4096
+wifi_slot.menu.eesz.1M512.build.spiffs_blocksize=8192
 wifi_slot.menu.eesz.2M=2M (no SPIFFS)
 wifi_slot.menu.eesz.2M.build.flash_size=2M
 wifi_slot.menu.eesz.2M.build.flash_size_bytes=0x200000
@@ -5627,8 +5627,8 @@ wifi_slot.menu.eesz.2M512.build.spiffs_pagesize=256
 wifi_slot.menu.eesz.2M512.upload.maximum_size=1044464
 wifi_slot.menu.eesz.2M512.build.rfcal_addr=0x1FC000
 wifi_slot.menu.eesz.2M512.build.spiffs_start=0x180000
-wifi_slot.menu.eesz.2M512.build.spiffs_end=0x1FB000
-wifi_slot.menu.eesz.2M512.build.spiffs_blocksize=4096
+wifi_slot.menu.eesz.2M512.build.spiffs_end=0x1FA000
+wifi_slot.menu.eesz.2M512.build.spiffs_blocksize=8192
 wifi_slot.menu.eesz.2M1M=2M (1M SPIFFS)
 wifi_slot.menu.eesz.2M1M.build.flash_size=2M
 wifi_slot.menu.eesz.2M1M.build.flash_size_bytes=0x200000
diff --git a/tools/boards.txt.py b/tools/boards.txt.py
index 068c4a07ac..ea4061746f 100755
--- a/tools/boards.txt.py
+++ b/tools/boards.txt.py
@@ -1168,11 +1168,14 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
     if flashsize_kb <= 1024:
         max_upload_size = (flashsize_kb - (spiffs_kb + eeprom_size_kb + rfcal_size_kb + sdkwifi_size_kb)) * 1024 - reserved
         spiffs_start = spiffs_end - spiffs_kb * 1024
-        spiffs_blocksize = 4096
+        if spiffs_kb < 512:
+            spiffs_blocksize = 4096
+        else:
+            spiffs_blocksize = 8192
     else:
         max_upload_size = 1024 * 1024 - reserved
         spiffs_start = (flashsize_kb - spiffs_kb) * 1024
-        if spiffs_kb <= 512:
+        if spiffs_kb < 512:
             spiffs_blocksize = 4096
         else:
             spiffs_blocksize = 8192
@@ -1221,8 +1224,6 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
             spiffs_start = spiffs_end
             page = 0
             spiffs_blocksize = 0
-        elif spiffs_kb < 0x80000 / 1024:
-            page = 0x100
         else:
             page = 0x100
 
diff --git a/tools/sdk/ld/eagle.flash.1m512.ld b/tools/sdk/ld/eagle.flash.1m512.ld
index 10e573c7a5..f2df1a0734 100644
--- a/tools/sdk/ld/eagle.flash.1m512.ld
+++ b/tools/sdk/ld/eagle.flash.1m512.ld
@@ -17,6 +17,6 @@ MEMORY
 PROVIDE ( _SPIFFS_start = 0x4027B000 );
 PROVIDE ( _SPIFFS_end = 0x402FB000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
-PROVIDE ( _SPIFFS_block = 0x1000 );
+PROVIDE ( _SPIFFS_block = 0x2000 );
 
 INCLUDE "local.eagle.app.v6.common.ld"
diff --git a/tools/sdk/ld/eagle.flash.2m512.ld b/tools/sdk/ld/eagle.flash.2m512.ld
index 62ada26948..f13e499f33 100644
--- a/tools/sdk/ld/eagle.flash.2m512.ld
+++ b/tools/sdk/ld/eagle.flash.2m512.ld
@@ -1,7 +1,7 @@
 /* Flash Split for 2M chips */
 /* sketch @0x40200000 (~1019KB) (1044464B) */
 /* empty  @0x402FEFF0 (~516KB) (528400B) */
-/* spiffs @0x40380000 (~492KB) (503808B) */
+/* spiffs @0x40380000 (~488KB) (499712B) */
 /* eeprom @0x403FB000 (4KB) */
 /* rfcal  @0x403FC000 (4KB) */
 /* wifi   @0x403FD000 (12KB) */
@@ -15,8 +15,8 @@ MEMORY
 }
 
 PROVIDE ( _SPIFFS_start = 0x40380000 );
-PROVIDE ( _SPIFFS_end = 0x403FB000 );
+PROVIDE ( _SPIFFS_end = 0x403FA000 );
 PROVIDE ( _SPIFFS_page = 0x100 );
-PROVIDE ( _SPIFFS_block = 0x1000 );
+PROVIDE ( _SPIFFS_block = 0x2000 );
 
 INCLUDE "local.eagle.app.v6.common.ld"

From ce0099d35debc93058257f2b7e763a79e58fa1e5 Mon Sep 17 00:00:00 2001
From: "Earle F. Philhower, III" <earlephilhower@yahoo.com>
Date: Tue, 16 Apr 2019 07:45:31 -0700
Subject: [PATCH 3/4] Factor out common if, clean code

---
 tools/boards.txt.py | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/tools/boards.txt.py b/tools/boards.txt.py
index ea4061746f..4b74ce318b 100755
--- a/tools/boards.txt.py
+++ b/tools/boards.txt.py
@@ -1168,17 +1168,14 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
     if flashsize_kb <= 1024:
         max_upload_size = (flashsize_kb - (spiffs_kb + eeprom_size_kb + rfcal_size_kb + sdkwifi_size_kb)) * 1024 - reserved
         spiffs_start = spiffs_end - spiffs_kb * 1024
-        if spiffs_kb < 512:
-            spiffs_blocksize = 4096
-        else:
-            spiffs_blocksize = 8192
     else:
         max_upload_size = 1024 * 1024 - reserved
         spiffs_start = (flashsize_kb - spiffs_kb) * 1024
-        if spiffs_kb < 512:
-            spiffs_blocksize = 4096
-        else:
-            spiffs_blocksize = 8192
+
+    if spiffs_kb < 512:
+        spiffs_blocksize = 4096
+    else:
+        spiffs_blocksize = 8192
 
     # Adjust SPIFFS_end to be a multiple of the block size
     spiffs_end = spiffs_blocksize * (int)((spiffs_end - spiffs_start)/spiffs_blocksize) + spiffs_start;

From 84bc5e58cd8f678905679d90d1022c7bcc6e487d Mon Sep 17 00:00:00 2001
From: "Earle F. Philhower, III" <earlephilhower@yahoo.com>
Date: Thu, 4 Jul 2019 08:42:10 -0700
Subject: [PATCH 4/4] Make boards.py vars "fs_xx" instead of "spiffs_xx"

---
 tools/boards.txt.py | 54 ++++++++++++++++++++++-----------------------
 1 file changed, 27 insertions(+), 27 deletions(-)

diff --git a/tools/boards.txt.py b/tools/boards.txt.py
index e0df6f82e5..1c76b2799d 100755
--- a/tools/boards.txt.py
+++ b/tools/boards.txt.py
@@ -1161,7 +1161,7 @@ def all_debug ():
 ################################################################
 # flash size
 
-def flash_map (flashsize_kb, spiffs_kb = 0):
+def flash_map (flashsize_kb, fs_kb = 0):
 
     # mapping:
     # flash | reserved | empty | spiffs | eeprom | rf-cal | sdk-wifi-settings
@@ -1172,32 +1172,32 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
     eeprom_size_kb = 4
     rfcal_size_kb = 4
     sdkwifi_size_kb = 12
-    spiffs_end = (flashsize_kb - sdkwifi_size_kb - rfcal_size_kb - eeprom_size_kb) * 1024
+    fs_end = (flashsize_kb - sdkwifi_size_kb - rfcal_size_kb - eeprom_size_kb) * 1024
     rfcal_addr = (flashsize_kb - sdkwifi_size_kb - rfcal_size_kb) * 1024
     if flashsize_kb <= 1024:
-        max_upload_size = (flashsize_kb - (spiffs_kb + eeprom_size_kb + rfcal_size_kb + sdkwifi_size_kb)) * 1024 - reserved
-        spiffs_start = spiffs_end - spiffs_kb * 1024
+        max_upload_size = (flashsize_kb - (fs_kb + eeprom_size_kb + rfcal_size_kb + sdkwifi_size_kb)) * 1024 - reserved
+        fs_start = fs_end - fs_kb * 1024
     else:
         max_upload_size = 1024 * 1024 - reserved
-        spiffs_start = (flashsize_kb - spiffs_kb) * 1024
+        fs_start = (flashsize_kb - fs_kb) * 1024
 
-    if spiffs_kb < 512:
-        spiffs_blocksize = 4096
+    if fs_kb < 512:
+        fs_blocksize = 4096
     else:
-        spiffs_blocksize = 8192
+        fs_blocksize = 8192
 
     # Adjust SPIFFS_end to be a multiple of the block size
-    spiffs_end = spiffs_blocksize * (int)((spiffs_end - spiffs_start)/spiffs_blocksize) + spiffs_start;
+    fs_end = fs_blocksize * (int)((fs_end - fs_start)/fs_blocksize) + fs_start;
 
-    max_ota_size = min(max_upload_size, spiffs_start / 2) # =(max_upload_size+empty_size)/2
+    max_ota_size = min(max_upload_size, fs_start / 2) # =(max_upload_size+empty_size)/2
     strsize = str(int(flashsize_kb / 1024)) + 'M' if (flashsize_kb >= 1024) else str(flashsize_kb) + 'K'
-    strspiffs = str(int(spiffs_kb / 1024)) + 'M' if (spiffs_kb >= 1024) else str(spiffs_kb) + 'K'
-    strspiffs_strip = str(int(spiffs_kb / 1024)) + 'M' if (spiffs_kb >= 1024) else str(spiffs_kb) if (spiffs_kb > 0) else ''
+    strfs = str(int(fs_kb / 1024)) + 'M' if (fs_kb >= 1024) else str(fs_kb) + 'K'
+    strfs_strip = str(int(fs_kb / 1024)) + 'M' if (fs_kb >= 1024) else str(fs_kb) if (fs_kb > 0) else ''
 
-    ld = 'eagle.flash.' + strsize.lower() + strspiffs_strip.lower() + '.ld'
-    menu = '.menu.eesz.' + strsize + strspiffs_strip
+    ld = 'eagle.flash.' + strsize.lower() + strfs_strip.lower() + '.ld'
+    menu = '.menu.eesz.' + strsize + strfs_strip
     menub = menu + '.build.'
-    desc = 'no' if (spiffs_kb == 0) else strspiffs + 'B'
+    desc = 'no' if (fs_kb == 0) else strfs + 'B'
     d = collections.OrderedDict([
         ( menu, strsize + 'B (FS:' + desc + ' OTA:~%iKB)' % (max_ota_size / 1024)),
         ( menub + 'flash_size', strsize ),
@@ -1207,11 +1207,11 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
         ( menu + '.upload.maximum_size', "%i" % max_upload_size ),
         ( menub + 'rfcal_addr', "0x%X" % rfcal_addr)
         ])
-    if spiffs_kb > 0:
+    if fs_kb > 0:
         d.update(collections.OrderedDict([
-            ( menub + 'spiffs_start', "0x%05X" % spiffs_start ),
-            ( menub + 'spiffs_end', "0x%05X" % spiffs_end ),
-            ( menub + 'spiffs_blocksize', "%i" % spiffs_blocksize ),
+            ( menub + 'spiffs_start', "0x%05X" % fs_start ),
+            ( menub + 'spiffs_end', "0x%05X" % fs_end ),
+            ( menub + 'spiffs_blocksize', "%i" % fs_blocksize ),
             ]))
 
     if ldshow:
@@ -1227,19 +1227,19 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
             realstdout = sys.stdout
             sys.stdout = open(lddir + ld, 'w')
 
-        if spiffs_kb == 0:
-            spiffs_start = spiffs_end
+        if fs_kb == 0:
+            fs_start = fs_end
             page = 0
-            spiffs_blocksize = 0
+            fs_blocksize = 0
         else:
             page = 0x100
 
         print("/* Flash Split for %s chips */" % strsize)
         print("/* sketch @0x%X (~%dKB) (%dB) */" % (spi, (max_upload_size / 1024), max_upload_size))
-        empty_size = spiffs_start - max_upload_size
+        empty_size = fs_start - max_upload_size
         if empty_size > 0:
             print("/* empty  @0x%X (~%dKB) (%dB) */" % (spi + max_upload_size, empty_size / 1024, empty_size))
-        print("/* spiffs @0x%X (~%dKB) (%dB) */" % (spi + spiffs_start, ((spiffs_end - spiffs_start) / 1024), spiffs_end - spiffs_start))
+        print("/* spiffs @0x%X (~%dKB) (%dB) */" % (spi + fs_start, ((fs_end - fs_start) / 1024), fs_end - fs_start))
         print("/* eeprom @0x%X (%dKB) */" % (spi + rfcal_addr - eeprom_size_kb * 1024, eeprom_size_kb))
         print("/* rfcal  @0x%X (%dKB) */" % (spi + rfcal_addr, rfcal_size_kb))
         print("/* wifi   @0x%X (%dKB) */" % (spi + rfcal_addr + rfcal_size_kb * 1024, sdkwifi_size_kb))
@@ -1252,10 +1252,10 @@ def flash_map (flashsize_kb, spiffs_kb = 0):
         print("  irom0_0_seg :                         org = 0x40201010, len = 0x%x" % max_upload_size)
         print("}")
         print("")
-        print("PROVIDE ( _FS_start = 0x%08X );" % (0x40200000 + spiffs_start))
-        print("PROVIDE ( _FS_end = 0x%08X );" % (0x40200000 + spiffs_end))
+        print("PROVIDE ( _FS_start = 0x%08X );" % (0x40200000 + fs_start))
+        print("PROVIDE ( _FS_end = 0x%08X );" % (0x40200000 + fs_end))
         print("PROVIDE ( _FS_page = 0x%X );" % page)
-        print("PROVIDE ( _FS_block = 0x%X );" % spiffs_blocksize)
+        print("PROVIDE ( _FS_block = 0x%X );" % fs_blocksize)
         print("")
         print('INCLUDE "local.eagle.app.v6.common.ld"')