~gabe/flashlight-firmware/anduril2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# 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!")