summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/filesystem.rst3
-rw-r--r--ports/esp8266/Makefile3
-rw-r--r--ports/esp8266/boards/GENERIC/mpconfigboard.mk4
-rw-r--r--ports/esp8266/boards/GENERIC_1M/mpconfigboard.h20
-rw-r--r--ports/esp8266/boards/GENERIC_1M/mpconfigboard.mk4
-rw-r--r--ports/esp8266/boards/GENERIC_512K/mpconfigboard.mk2
-rw-r--r--ports/esp8266/boards/esp8266.ld12
-rw-r--r--ports/esp8266/boards/esp8266_1m.ld19
-rw-r--r--ports/esp8266/boards/esp8266_2m.ld18
-rw-r--r--ports/esp8266/boards/esp8266_512k.ld16
-rw-r--r--ports/esp8266/modules/flashbdev.py20
-rw-r--r--ports/esp8266/modules/inisetup.py4
12 files changed, 91 insertions, 34 deletions
diff --git a/docs/reference/filesystem.rst b/docs/reference/filesystem.rst
index cd8600928..9e7e6212d 100644
--- a/docs/reference/filesystem.rst
+++ b/docs/reference/filesystem.rst
@@ -178,7 +178,8 @@ Board FAT littlefs v1 littlefs v2
==================== ===== =========== ===========
pyboard 1.0, 1.1, D Yes No Yes
Other STM32 Yes No No
-ESP8266 Yes No No
+ESP8266 (1M) No No Yes
+ESP8266 (2M+) Yes No Yes
ESP32 Yes No Yes
==================== ===== =========== ===========
diff --git a/ports/esp8266/Makefile b/ports/esp8266/Makefile
index 989e8a62f..60eb7c080 100644
--- a/ports/esp8266/Makefile
+++ b/ports/esp8266/Makefile
@@ -22,7 +22,6 @@ QSTR_GLOBAL_DEPENDENCIES = $(BOARD_DIR)/mpconfigboard.h
MICROPY_PY_USSL = 1
MICROPY_SSL_AXTLS = 1
AXTLS_DEFS_EXTRA = -Dabort=abort_ -DRT_MAX_PLAIN_LENGTH=1024 -DRT_EXTRA=4096
-MICROPY_PY_BTREE ?= 1
BTREE_DEFS_EXTRA = -DDEFPSIZE=1024 -DMINCACHE=3
FROZEN_MANIFEST ?= boards/manifest.py
@@ -60,7 +59,7 @@ CFLAGS_XTENSA = -fsingle-precision-constant -Wdouble-promotion \
CFLAGS = $(INC) -Wall -Wpointer-arith -Werror -std=gnu99 -nostdlib -DUART_OS=$(UART_OS) \
$(CFLAGS_XTENSA) $(CFLAGS_MOD) $(COPT) $(CFLAGS_EXTRA) -I$(BOARD_DIR)
-LD_FILES ?= boards/esp8266.ld
+LD_FILES ?= boards/esp8266_2m.ld
LDFLAGS = -nostdlib -T $(LD_FILES) -Map=$(@:.elf=.map) --cref
LIBS = -L$(ESP_SDK)/lib -lmain -ljson -llwip_open -lpp -lnet80211 -lwpa -lphy -lnet80211 $(LDFLAGS_MOD)
diff --git a/ports/esp8266/boards/GENERIC/mpconfigboard.mk b/ports/esp8266/boards/GENERIC/mpconfigboard.mk
index 820f073d9..2ecfb6d34 100644
--- a/ports/esp8266/boards/GENERIC/mpconfigboard.mk
+++ b/ports/esp8266/boards/GENERIC/mpconfigboard.mk
@@ -1,3 +1,7 @@
+LD_FILES = boards/esp8266_2m.ld
+
+MICROPY_PY_BTREE = 1
MICROPY_VFS_FAT = 1
+MICROPY_VFS_LFS2 = 1
FROZEN_MANIFEST ?= $(BOARD_DIR)/manifest.py
diff --git a/ports/esp8266/boards/GENERIC_1M/mpconfigboard.h b/ports/esp8266/boards/GENERIC_1M/mpconfigboard.h
new file mode 100644
index 000000000..ed5072993
--- /dev/null
+++ b/ports/esp8266/boards/GENERIC_1M/mpconfigboard.h
@@ -0,0 +1,20 @@
+#define MICROPY_HW_BOARD_NAME "ESP module (1M)"
+#define MICROPY_HW_MCU_NAME "ESP8266"
+
+#define MICROPY_PERSISTENT_CODE_LOAD (1)
+#define MICROPY_EMIT_XTENSA (1)
+#define MICROPY_EMIT_INLINE_XTENSA (1)
+
+#define MICROPY_DEBUG_PRINTERS (1)
+#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_NORMAL)
+
+#define MICROPY_READER_VFS (MICROPY_VFS)
+#define MICROPY_VFS (1)
+
+#define MICROPY_PY_BUILTINS_SLICE_ATTRS (1)
+#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
+#define MICROPY_PY_IO_FILEIO (1)
+#define MICROPY_PY_SYS_STDIO_BUFFER (1)
+#define MICROPY_PY_URE_SUB (1)
+#define MICROPY_PY_UCRYPTOLIB (1)
+#define MICROPY_PY_FRAMEBUF (1)
diff --git a/ports/esp8266/boards/GENERIC_1M/mpconfigboard.mk b/ports/esp8266/boards/GENERIC_1M/mpconfigboard.mk
new file mode 100644
index 000000000..7399790e7
--- /dev/null
+++ b/ports/esp8266/boards/GENERIC_1M/mpconfigboard.mk
@@ -0,0 +1,4 @@
+LD_FILES = boards/esp8266_1m.ld
+
+MICROPY_PY_BTREE = 1
+MICROPY_VFS_LFS2 = 1
diff --git a/ports/esp8266/boards/GENERIC_512K/mpconfigboard.mk b/ports/esp8266/boards/GENERIC_512K/mpconfigboard.mk
index 32fd4e007..a7566f9f1 100644
--- a/ports/esp8266/boards/GENERIC_512K/mpconfigboard.mk
+++ b/ports/esp8266/boards/GENERIC_512K/mpconfigboard.mk
@@ -1,3 +1 @@
-MICROPY_PY_BTREE = 0
-MICROPY_VFS_FAT = 0
LD_FILES = boards/esp8266_512k.ld
diff --git a/ports/esp8266/boards/esp8266.ld b/ports/esp8266/boards/esp8266.ld
deleted file mode 100644
index 745edaadb..000000000
--- a/ports/esp8266/boards/esp8266.ld
+++ /dev/null
@@ -1,12 +0,0 @@
-/* GNU linker script for ESP8266 */
-
-MEMORY
-{
- dport0_0_seg : org = 0x3ff00000, len = 0x10
- dram0_0_seg : org = 0x3ffe8000, len = 0x14000
- iram1_0_seg : org = 0x40100000, len = 0x8000
- irom0_0_seg : org = 0x40209000, len = 0x8f000
-}
-
-/* define common sections and symbols */
-INCLUDE boards/esp8266_common.ld
diff --git a/ports/esp8266/boards/esp8266_1m.ld b/ports/esp8266/boards/esp8266_1m.ld
new file mode 100644
index 000000000..94bc6a229
--- /dev/null
+++ b/ports/esp8266/boards/esp8266_1m.ld
@@ -0,0 +1,19 @@
+/* GNU linker script for ESP8266 with 1M flash
+
+ Flash layout:
+ 0x40200000 36k header + iram/dram init
+ 0x40209000 572k firmware (irom0)
+ 0x40298000 396k filesystem
+ 0x402fb000 20k SDK parameters
+*/
+
+MEMORY
+{
+ dport0_0_seg : org = 0x3ff00000, len = 16
+ dram0_0_seg : org = 0x3ffe8000, len = 80K
+ iram1_0_seg : org = 0x40100000, len = 32K
+ irom0_0_seg : org = 0x40209000, len = 572K
+}
+
+/* define common sections and symbols */
+INCLUDE boards/esp8266_common.ld
diff --git a/ports/esp8266/boards/esp8266_2m.ld b/ports/esp8266/boards/esp8266_2m.ld
new file mode 100644
index 000000000..b5813ce0f
--- /dev/null
+++ b/ports/esp8266/boards/esp8266_2m.ld
@@ -0,0 +1,18 @@
+/* GNU linker script for ESP8266 with 2M or more flash
+
+ Flash layout:
+ 0x40200000 36k header + iram/dram init
+ 0x40209000 988k firmware (irom0)
+ 0x40300000 1M+ filesystem (not memory mapped)
+*/
+
+MEMORY
+{
+ dport0_0_seg : org = 0x3ff00000, len = 16
+ dram0_0_seg : org = 0x3ffe8000, len = 80K
+ iram1_0_seg : org = 0x40100000, len = 32K
+ irom0_0_seg : org = 0x40209000, len = 1M - 36K
+}
+
+/* define common sections and symbols */
+INCLUDE boards/esp8266_common.ld
diff --git a/ports/esp8266/boards/esp8266_512k.ld b/ports/esp8266/boards/esp8266_512k.ld
index 869044781..c4cc79849 100644
--- a/ports/esp8266/boards/esp8266_512k.ld
+++ b/ports/esp8266/boards/esp8266_512k.ld
@@ -1,11 +1,17 @@
-/* GNU linker script for ESP8266 */
+/* GNU linker script for ESP8266 with 512K flash
+
+ Flash layout:
+ 0x40200000 36k header + iram/dram init
+ 0x40209000 456k firmware (irom0)
+ 0x4027b000 20k SDK parameters
+*/
MEMORY
{
- dport0_0_seg : org = 0x3ff00000, len = 0x10
- dram0_0_seg : org = 0x3ffe8000, len = 0x14000
- iram1_0_seg : org = 0x40100000, len = 0x8000
- irom0_0_seg : org = 0x40209000, len = 0x72000
+ dport0_0_seg : org = 0x3ff00000, len = 16
+ dram0_0_seg : org = 0x3ffe8000, len = 80K
+ iram1_0_seg : org = 0x40100000, len = 32K
+ irom0_0_seg : org = 0x40209000, len = 512K - 36K - 20K
}
/* define common sections and symbols */
diff --git a/ports/esp8266/modules/flashbdev.py b/ports/esp8266/modules/flashbdev.py
index 404cf3666..652fe9a4b 100644
--- a/ports/esp8266/modules/flashbdev.py
+++ b/ports/esp8266/modules/flashbdev.py
@@ -2,26 +2,23 @@ import esp
class FlashBdev:
-
SEC_SIZE = 4096
- RESERVED_SECS = 1
- START_SEC = esp.flash_user_start() // SEC_SIZE + RESERVED_SECS
- NUM_BLK = 0x6B - RESERVED_SECS
- def __init__(self, blocks=NUM_BLK):
+ def __init__(self, start_sec, blocks):
+ self.start_sec = start_sec
self.blocks = blocks
def readblocks(self, n, buf, off=0):
# print("readblocks(%s, %x(%d), %d)" % (n, id(buf), len(buf), off))
- esp.flash_read((n + self.START_SEC) * self.SEC_SIZE + off, buf)
+ esp.flash_read((n + self.start_sec) * self.SEC_SIZE + off, buf)
def writeblocks(self, n, buf, off=None):
# print("writeblocks(%s, %x(%d), %d)" % (n, id(buf), len(buf), off))
# assert len(buf) <= self.SEC_SIZE, len(buf)
if off is None:
- esp.flash_erase(n + self.START_SEC)
+ esp.flash_erase(n + self.start_sec)
off = 0
- esp.flash_write((n + self.START_SEC) * self.SEC_SIZE + off, buf)
+ esp.flash_write((n + self.start_sec) * self.SEC_SIZE + off, buf)
def ioctl(self, op, arg):
# print("ioctl(%d, %r)" % (op, arg))
@@ -30,7 +27,7 @@ class FlashBdev:
if op == 5: # MP_BLOCKDEV_IOCTL_BLOCK_SIZE
return self.SEC_SIZE
if op == 6: # MP_BLOCKDEV_IOCTL_BLOCK_ERASE
- esp.flash_erase(arg + self.START_SEC)
+ esp.flash_erase(arg + self.start_sec)
return 0
@@ -38,5 +35,8 @@ size = esp.flash_size()
if size < 1024 * 1024:
bdev = None
else:
+ start_sec = esp.flash_user_start() // FlashBdev.SEC_SIZE
+ if start_sec < 256:
+ start_sec += 1 # Reserve space for native code
# 20K at the flash end is reserved for SDK params storage
- bdev = FlashBdev((size - 20480) // FlashBdev.SEC_SIZE - FlashBdev.START_SEC)
+ bdev = FlashBdev(start_sec, (size - 20480) // FlashBdev.SEC_SIZE - start_sec)
diff --git a/ports/esp8266/modules/inisetup.py b/ports/esp8266/modules/inisetup.py
index 1bbc3d0db..79576e9d6 100644
--- a/ports/esp8266/modules/inisetup.py
+++ b/ports/esp8266/modules/inisetup.py
@@ -45,8 +45,8 @@ def setup():
check_bootsec()
print("Performing initial setup")
wifi()
- uos.VfsFat.mkfs(bdev)
- vfs = uos.VfsFat(bdev)
+ uos.VfsLfs2.mkfs(bdev)
+ vfs = uos.VfsLfs2(bdev)
uos.mount(vfs, "/")
with open("boot.py", "w") as f:
f.write(