# Application firmware update function for LEGO_HUB_NO6. # MIT license; Copyright (c) 2022 Damien P. George from micropython import const 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) # 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): print(f"Updating application firmware from {filename}") # Create the elements for the mboot filesystem-load operation. elems = fwupdate.update_app_elements(filename, _FILESYSTEM_ADDR, _FILESYSTEM_LEN) if not elems: return # Create the update key. key = struct.pack("