Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Klipper3d/klipper.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonna Whisnant <dewhisna@users.noreply.github.com>2022-08-22 18:23:49 +0300
committerKevinOConnor <kevin@koconnor.net>2022-09-12 04:57:28 +0300
commita0457f79e4728a9fcb05133aab0511e835e9b82b (patch)
treeed4323aa4d34e286fda1a18a05dbcbef899221c9
parentf4440267e63dd372265fb223dc428ae3a83bf314 (diff)
scripts: Support SDIO in flash-sdcard using split verification step
Signed-off-by: Donna Whisnant <dewhisna@dewtronics.com>
-rwxr-xr-xscripts/flash-sdcard.sh9
-rw-r--r--scripts/spi_flash/spi_flash.py49
2 files changed, 48 insertions, 10 deletions
diff --git a/scripts/flash-sdcard.sh b/scripts/flash-sdcard.sh
index 7ee03ccea..088864091 100755
--- a/scripts/flash-sdcard.sh
+++ b/scripts/flash-sdcard.sh
@@ -10,6 +10,7 @@ KLIPPER_BIN_DEFAULT=$KLIPPER_BIN
KLIPPER_DICT_DEFAULT="${SRCDIR}/out/klipper.dict"
SPI_FLASH="${SRCDIR}/scripts/spi_flash/spi_flash.py"
BAUD_ARG=""
+CHECK_ARG=""
# Force script to exit if an error occurs
set -e
@@ -17,7 +18,7 @@ print_help_message()
{
echo "SD Card upload utility for Klipper"
echo
- echo "usage: flash_sdcard.sh [-h] [-l] [-b <baud>] [-f <firmware>] [-d <dictionary>]"
+ echo "usage: flash_sdcard.sh [-h] [-l] [-c] [-b <baud>] [-f <firmware>] [-d <dictionary>]"
echo " <device> <board>"
echo
echo "positional arguments:"
@@ -27,13 +28,14 @@ print_help_message()
echo "optional arguments:"
echo " -h show this message"
echo " -l list available boards"
+ echo " -c run flash check/verify only (skip upload)"
echo " -b <baud> serial baud rate (default is 250000)"
echo " -f <firmware> path to klipper.bin"
echo " -d <dictionary> path to klipper.dict for firmware validation"
}
# Parse command line "optional args"
-while getopts "hlb:f:d:" arg; do
+while getopts "hlcb:f:d:" arg; do
case $arg in
h)
print_help_message
@@ -43,6 +45,7 @@ while getopts "hlb:f:d:" arg; do
${KLIPPY_ENV} ${SPI_FLASH} -l
exit 0
;;
+ c) CHECK_ARG="-c";;
b) BAUD_ARG="-b ${OPTARG}";;
f) KLIPPER_BIN=$OPTARG;;
d) KLIPPER_DICT=$OPTARG;;
@@ -82,4 +85,4 @@ fi
# Run Script
echo "Flashing ${KLIPPER_BIN} to ${DEVICE}"
-${KLIPPY_ENV} ${SPI_FLASH} ${BAUD_ARG} ${KLIPPER_DICT} ${DEVICE} ${BOARD} ${KLIPPER_BIN}
+${KLIPPY_ENV} ${SPI_FLASH} ${CHECK_ARG} ${BAUD_ARG} ${KLIPPER_DICT} ${DEVICE} ${BOARD} ${KLIPPER_BIN}
diff --git a/scripts/spi_flash/spi_flash.py b/scripts/spi_flash/spi_flash.py
index 6bcef362d..db1e3f592 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: