summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/stm32/boards/LEGO_HUB_NO6/appupdate.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/ports/stm32/boards/LEGO_HUB_NO6/appupdate.py b/ports/stm32/boards/LEGO_HUB_NO6/appupdate.py
index 0927f1611..57b24d3f2 100644
--- a/ports/stm32/boards/LEGO_HUB_NO6/appupdate.py
+++ b/ports/stm32/boards/LEGO_HUB_NO6/appupdate.py
@@ -2,13 +2,20 @@
# MIT license; Copyright (c) 2022 Damien P. George
from micropython import const
-import struct, machine, fwupdate, spiflash
+import struct, machine, fwupdate, spiflash, pyb
+
+_IOCTL_BLOCK_COUNT = const(4)
+_IOCTL_BLOCK_SIZE = const(5)
_SPIFLASH_UPDATE_KEY_ADDR = const(1020 * 1024)
_SPIFLASH_UPDATE_KEY_VALUE = const(0x12345678)
_FILESYSTEM_ADDR = const(0x8000_0000 + 1024 * 1024)
-_FILESYSTEM_LEN = const(31 * 1024 * 1024)
+
+# Roundabout way to get actual filesystem size from config.
+# This takes into account the 1M "reserved" section of the flash memory.
+flash = pyb.Flash(start=0)
+_FILESYSTEM_LEN = flash.ioctl(_IOCTL_BLOCK_COUNT, None) * flash.ioctl(_IOCTL_BLOCK_SIZE, None)
def update_app(filename):
@@ -30,6 +37,8 @@ def update_app(filename):
baudrate=50_000_000,
)
cs = machine.Pin(machine.Pin.board.FLASH_NSS, machine.Pin.OUT, value=1)
+
+ # We can't use pyb.Flash() because we need to write to the "reserved" 1M area.
flash = spiflash.SPIFlash(spi, cs)
# Write the update key and elements to the SPI flash.