Usage Example¶
Note
For UNO and Nano use “Stk500v1”, for Mega 2560 “Stk500v2”.
from intelhex import IntelHex
from arduinobootloader import ArduinoBootloader
def update(self):
ih = IntelHex()
ab = ArduinoBootloader()
prg = ab.select_programmer("Stk500v1")
if prg.open(speed=115200):
if not prg.board_request():
prg.close()
return
print("botloader name: {} version: {} hardware: {}".format(ab.programmer_name,
ab.sw_version,
ab.hw_version))
if not prg.cpu_signature():
prg.close()
return
print("cpu name: {}".format(ab.cpu_name) )
try:
ih.fromfile("filename.hex", format='hex')
except (FileNotFoundError, AddressOverlapError, HexRecordError):
return
for address in range(0, ih.maxaddr(), ab.cpu_page_size):
buffer = ih.tobinarray(start=address, size=ab.cpu_page_size)
if not prg.write_memory(buffer, address):
print("Write error")
prg.leave_bootloader()
prg.close()
return
for address in range(0, ih.maxaddr(), ab.cpu_page_size):
buffer = ih.tobinarray(start=address, size=ab.cpu_page_size)
read_buffer = prg.read_memory(address, ab.cpu_page_size)
if read_buffer is None:
print("Read error")
break
if buffer != read_buffer:
print("File not match")
break
prg.leave_bootloader()
prg.close()