aboutsummaryrefslogtreecommitdiff
path: root/bin/flash-1616.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbin/flash-1616.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/bin/flash-1616.py b/bin/flash-1616.py
new file mode 100755
index 0000000..f431b3a
--- /dev/null
+++ b/bin/flash-1616.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+# Use with Python3, make sure to have the pymcuprog module installed (via pip)
+
+# Read out the pymcuprog version
+from pymcuprog.version import VERSION as pymcuprog_version
+print("pymcuprog version {}".format(pymcuprog_version))
+
+
+# List out the available ports
+import serial.tools.list_ports as ls;
+#ports = ls.comports()
+ports = []
+for p in ls.comports():
+ if "COM" in p.device or "USB" in p.device:
+ ports.append(p)
+
+if len(ports) == 0:
+ print("No serial ports found, exiting")
+ exit()
+elif len(ports) == 1:
+ print("Found one serial port:", ports[0].device, "-", ports[0].description)
+ port = ports[0].device
+else: # found more than one serial port
+ print("Found multiple serial ports:")
+ for p in ports:
+ print(" *", p.device, "-", p.description)
+ print("Which serial port would you like to use? (default: " + ports[0].device + ") ", end="")
+ port = input()
+ if not port:
+ port = ports[0].device
+
+
+import sys
+args = sys.argv
+if len(args) == 1: # only the program name, no arguements: ask for the hex file
+ print("Which hex file would you like to flash? ", end="")
+ hexfile = input()
+else:
+ hexfile = args[1]
+
+
+# pymcuprog uses the Python logging module
+import logging
+logging.basicConfig(format="%(levelname)s: %(message)s", level=logging.WARNING)
+
+# Configure the session
+from pymcuprog.backend import SessionConfig
+sessionconfig = SessionConfig("attiny1616")
+
+# Instantiate Serial transport (only 1 tool connected)
+from pymcuprog.toolconnection import ToolSerialConnection
+transport = ToolSerialConnection(serialport=port)
+
+# Instantiate backend
+from pymcuprog.backend import Backend
+backend = Backend()
+
+# Connect to tool using transport
+backend.connect_to_tool(transport)
+
+# Start the session
+backend.start_session(sessionconfig)
+
+# Read the target device_id
+device_id = backend.read_device_id()
+print("Device ID is {0:06X}".format(int.from_bytes(device_id, byteorder="little")))
+
+# Erase the device, write the hexfile, and verify the write
+backend.erase()
+print("Memories erased.")
+print("Writing hex file to the device... ")
+backend.write_hex_to_target(hexfile)
+print("Writing complete.")
+print("Verifying the write... ")
+verify_status = backend.verify_hex(hexfile)
+if verify_status is True:
+ print("Verification successful!")
+