mirror of
https://github.com/Polprzewodnikowy/SummerCart64.git
synced 2025-02-16 20:29:12 +01:00
[SC64][SW] SW programing bug fixes
This commit is contained in:
parent
6def5b0efc
commit
3fc6229cea
@ -99,6 +99,12 @@ class SC64UpdateData:
|
|||||||
return (id, data)
|
return (id, data)
|
||||||
|
|
||||||
def load(self, path: str, require_all: bool=False) -> None:
|
def load(self, path: str, require_all: bool=False) -> None:
|
||||||
|
self.__update_info = None
|
||||||
|
self.__mcu_data = None
|
||||||
|
self.__fpga_data = None
|
||||||
|
self.__bootloader_data = None
|
||||||
|
self.__primer_data = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(path, 'rb') as f:
|
with open(path, 'rb') as f:
|
||||||
if (f.read(len(self.__UPDATE_TOKEN)) != self.__UPDATE_TOKEN):
|
if (f.read(len(self.__UPDATE_TOKEN)) != self.__UPDATE_TOKEN):
|
||||||
@ -228,7 +234,7 @@ class STM32Bootloader:
|
|||||||
length = len(data)
|
length = len(data)
|
||||||
if (length == 0 or length > self.__MEMORY_RW_MAX_SIZE):
|
if (length == 0 or length > self.__MEMORY_RW_MAX_SIZE):
|
||||||
raise ValueError('Wrong data size for write memory command')
|
raise ValueError('Wrong data size for write memory command')
|
||||||
if (length % 4):
|
if (((address % 4) != 0) or ((length % 4) != 0)):
|
||||||
raise ValueError('Write memory command requires 4 byte alignment')
|
raise ValueError('Write memory command requires 4 byte alignment')
|
||||||
self.__cmd_send(b'\x31')
|
self.__cmd_send(b'\x31')
|
||||||
self.__data_write(address.to_bytes(4, byteorder='big'))
|
self.__data_write(address.to_bytes(4, byteorder='big'))
|
||||||
@ -354,6 +360,8 @@ class LCMXO2Primer:
|
|||||||
length = len(data)
|
length = len(data)
|
||||||
if (length > (self.__FLASH_PAGE_SIZE * self.__FLASH_NUM_PAGES)):
|
if (length > (self.__FLASH_PAGE_SIZE * self.__FLASH_NUM_PAGES)):
|
||||||
raise LCMXO2PrimerException('FPGA data size too big')
|
raise LCMXO2PrimerException('FPGA data size too big')
|
||||||
|
if ((length % self.__FLASH_PAGE_SIZE) != 0):
|
||||||
|
raise LCMXO2PrimerException('FPGA data size not aligned to page size')
|
||||||
|
|
||||||
self.__cmd_execute(self.__CMD_ENABLE_FLASH)
|
self.__cmd_execute(self.__CMD_ENABLE_FLASH)
|
||||||
|
|
||||||
|
@ -460,7 +460,13 @@ class SC64:
|
|||||||
def upload_bootloader(self, data: bytes) -> None:
|
def upload_bootloader(self, data: bytes) -> None:
|
||||||
if (len(data) > self.__Length.BOOTLOADER):
|
if (len(data) > self.__Length.BOOTLOADER):
|
||||||
raise ValueError('Bootloader size too big')
|
raise ValueError('Bootloader size too big')
|
||||||
self.__program_flash(self.__Address.BOOTLOADER, data)
|
padded_data = data + (b'\xFF' * (self.__Length.BOOTLOADER - len(data)))
|
||||||
|
if (self.__read_memory(self.__Address.BOOTLOADER, self.__Length.BOOTLOADER) != padded_data):
|
||||||
|
self.__erase_flash_region(self.__Address.BOOTLOADER, self.__Length.BOOTLOADER)
|
||||||
|
self.__write_memory(self.__Address.BOOTLOADER, data)
|
||||||
|
self.__flash_wait_busy()
|
||||||
|
if (self.__read_memory(self.__Address.BOOTLOADER, self.__Length.BOOTLOADER) != padded_data):
|
||||||
|
raise ConnectionException('Bootloader program failure')
|
||||||
|
|
||||||
def set_rtc(self, t: datetime) -> None:
|
def set_rtc(self, t: datetime) -> None:
|
||||||
to_bcd = lambda v: ((int((v / 10) % 10) << 4) | int(int(v) % 10))
|
to_bcd = lambda v: ((int((v / 10) % 10) << 4) | int(int(v) % 10))
|
||||||
@ -739,7 +745,7 @@ if __name__ == '__main__':
|
|||||||
parser = argparse.ArgumentParser(description='SC64 control software')
|
parser = argparse.ArgumentParser(description='SC64 control software')
|
||||||
parser.add_argument('--backup-firmware', metavar='file', help='backup SC64 firmware and write it to specified file')
|
parser.add_argument('--backup-firmware', metavar='file', help='backup SC64 firmware and write it to specified file')
|
||||||
parser.add_argument('--update-firmware', metavar='file', help='update SC64 firmware from specified file')
|
parser.add_argument('--update-firmware', metavar='file', help='update SC64 firmware from specified file')
|
||||||
parser.add_argument('--bootloader', metavar='file', help='update SC64 bootloader (not recommended, use --update-firmware instead)')
|
parser.add_argument('--update-bootloader', metavar='file', help='update SC64 bootloader (not recommended, use --update-firmware instead)')
|
||||||
parser.add_argument('--reset-state', action='store_true', help='reset SC64 internal state')
|
parser.add_argument('--reset-state', action='store_true', help='reset SC64 internal state')
|
||||||
parser.add_argument('--print-state', action='store_true', help='print SC64 internal state')
|
parser.add_argument('--print-state', action='store_true', help='print SC64 internal state')
|
||||||
parser.add_argument('--boot', type=SC64.BootMode, action=EnumAction, help='set boot mode')
|
parser.add_argument('--boot', type=SC64.BootMode, action=EnumAction, help='set boot mode')
|
||||||
@ -779,8 +785,8 @@ if __name__ == '__main__':
|
|||||||
sc64.update_firmware(f.read(), status_callback)
|
sc64.update_firmware(f.read(), status_callback)
|
||||||
print('done')
|
print('done')
|
||||||
|
|
||||||
if (args.bootloader):
|
if (args.update_bootloader):
|
||||||
with open(args.bootloader, 'rb') as f:
|
with open(args.update_bootloader, 'rb') as f:
|
||||||
print('Uploading Bootloader... ', end='', flush=True)
|
print('Uploading Bootloader... ', end='', flush=True)
|
||||||
sc64.upload_bootloader(f.read())
|
sc64.upload_bootloader(f.read())
|
||||||
print('done')
|
print('done')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user