diff options
author | Donna Whisnant <dewhisna@users.noreply.github.com> | 2022-08-22 10:23:49 -0500 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2022-09-11 21:57:28 -0400 |
commit | a0457f79e4728a9fcb05133aab0511e835e9b82b (patch) | |
tree | ed4323aa4d34e286fda1a18a05dbcbef899221c9 /scripts/spi_flash | |
parent | f4440267e63dd372265fb223dc428ae3a83bf314 (diff) | |
download | kutter-a0457f79e4728a9fcb05133aab0511e835e9b82b.tar.gz kutter-a0457f79e4728a9fcb05133aab0511e835e9b82b.tar.xz kutter-a0457f79e4728a9fcb05133aab0511e835e9b82b.zip |
scripts: Support SDIO in flash-sdcard using split verification step
Signed-off-by: Donna Whisnant <dewhisna@dewtronics.com>
Diffstat (limited to 'scripts/spi_flash')
-rw-r--r-- | scripts/spi_flash/spi_flash.py | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/scripts/spi_flash/spi_flash.py b/scripts/spi_flash/spi_flash.py index 6bcef362..db1e3f59 100644 --- a/scripts/spi_flash/spi_flash.py +++ b/scripts/spi_flash/spi_flash.py @@ -785,6 +785,13 @@ class SDCardSPI: if err_msgs: raise OSError("\n".join(err_msgs)) +SDIO_WARNING = """ +This board requires a manual reboot to complete the flash process. +If the board's bootloader uses SDIO mode for its SDCard, then a full +power cycle is required. Please perform the power cycle now and then +rerun this utility with the 'check' option to verify flash. +""" + class MCUConnection: def __init__(self, k_reactor, device, baud, board_cfg): self.reactor = k_reactor @@ -989,6 +996,9 @@ class MCUConnection: return sd_chksm def verify_flash(self, req_chksm, old_dictionary, req_dictionary): + if bool(self.board_config.get('skip_verify', False)): + output_line(SDIO_WARNING) + return output("Verifying Flash...") validation_passed = False msgparser = self._serial.get_msgparser() @@ -1063,6 +1073,7 @@ class SPIFlash: self.firmware_checksum = None self.task_complete = False self.need_upload = True + self.need_verify = True self.old_dictionary = None self.new_dictionary = None if args['klipper_dict_path'] is not None: @@ -1092,7 +1103,7 @@ class SPIFlash: raise SPIFlashError("Unable to reconnect") output_line("Done") - def run_reset(self, eventtime): + def run_reset_upload(self, eventtime): # Reset MCU to default state if necessary self.mcu_conn.connect() if self.mcu_conn.check_need_restart(): @@ -1102,6 +1113,16 @@ class SPIFlash: self.need_upload = False self.run_sdcard_upload(eventtime) + def run_reset_verify(self, eventtime): + # Reset MCU to default state if necessary + self.mcu_conn.connect() + if self.mcu_conn.check_need_restart(): + self.mcu_conn.reset() + self.task_complete = True + else: + self.need_verify = False + self.run_verify(eventtime) + def run_sdcard_upload(self, eventtime): # Reconnect and upload if not self.mcu_conn.connected: @@ -1121,7 +1142,8 @@ class SPIFlash: def run_verify(self, eventtime): # Reconnect and verify - self.mcu_conn.connect() + if not self.mcu_conn.connected: + self.mcu_conn.connect() self.mcu_conn.configure_mcu() self.mcu_conn.verify_flash(self.firmware_checksum, self.old_dictionary, self.new_dictionary) @@ -1148,12 +1170,18 @@ class SPIFlash: self.mcu_conn = k_reactor = None def run(self): - self.run_reactor_task(self.run_reset) - self._wait_for_reconnect() - if self.need_upload: - self.run_reactor_task(self.run_sdcard_upload) + if not bool(self.board_config.get('verify_only', False)): + self.run_reactor_task(self.run_reset_upload) self._wait_for_reconnect() - self.run_reactor_task(self.run_verify) + if self.need_upload: + self.run_reactor_task(self.run_sdcard_upload) + self._wait_for_reconnect() + self.run_reactor_task(self.run_verify) + else: + self.run_reactor_task(self.run_reset_verify) + if self.need_verify: + self._wait_for_reconnect() + self.run_reactor_task(self.run_verify) def main(): parser = argparse.ArgumentParser( @@ -1178,6 +1206,9 @@ def main(): "-d", "--dict_path", metavar="<klipper.dict>", type=str, default=None, help="Klipper firmware dictionary") parser.add_argument( + "-c","--check", action="store_true", + help="Perform flash check/verify only") + parser.add_argument( "device", metavar="<device>", help="Device Serial Port") parser.add_argument( "board", metavar="<board>", help="Board Type") @@ -1195,6 +1226,10 @@ def main(): flash_args['baud'] = args.baud flash_args['klipper_bin_path'] = args.klipper_bin_path flash_args['klipper_dict_path'] = args.dict_path + flash_args['verify_only'] = args.check + if args.check: + # override board_defs setting when doing verify-only: + flash_args['skip_verify'] = False check_need_convert(args.board, flash_args) fatfs_lib.check_fatfs_build(output) try: |