updated comments, linted mega2560 example

This commit is contained in:
ladyada 2018-01-07 18:04:49 -05:00
parent 2bef50c500
commit c51a352272
2 changed files with 31 additions and 13 deletions

View file

@ -49,9 +49,9 @@ class AVRprog:
def init(self, spi_bus, rst_pin):
"""
Initialize the programmer with SPI pins that will be used to
communicate with the chip. Currently only hardware-SPI pins are
supported!
Initialize the programmer with an SPI port that will be used to
communicate with the chip. Make sure your SPI supports 'write_readinto'
Also pass in a reset pin that will be used to get into programming mode
"""
self._spi = spi_bus
self._rst = DigitalInOut(rst_pin)
@ -323,13 +323,19 @@ class AVRprog:
def read_hex_page(file_state, page_addr, page_size, page_buffer):
"""
Helper function that does the Intel Hex parsing. Given an open file
'hexfile' and our desired buffer address start (page_addr), size
(page_size) and an allocated bytearray. This function will try to
read the file and fill the page_buffer. If the next line has data
that is beyond the size of the page_address, it will return without
changing the buffer, so pre-fill it with 0xFF (for sparsely-defined
HEX files.
Helper function that does the Intel Hex parsing. Takes in a dictionary
that contains the file 'state'. The dictionary should have file_state['f']
be the file stream object (returned by open), the file_state['line'] which
tracks the line number of the file for better debug messages. This function
will update 'line' as it reads lines. It will set 'eof' when the file has
completed reading. It will also store the 'extended address' state in
file_state['ext_addr']
In addition to the file, it takes the desired buffer address start
(page_addr), size (page_size) and an allocated bytearray.
This function will try to read the file and fill the page_buffer.
If the next line has data that is beyond the size of the page_address,
it will return without changing the buffer, so pre-fill it with 0xFF
before calling, for sparsely-defined HEX files.
Returns False if the file has no more data to read. Returns True if
we've done the best job we can with filling the buffer and the next
line does not contain any more data we can use.

View file

@ -1,4 +1,13 @@
# Mega STK500 Bootloader programming example
"""
Arduino Mega 2560 programming example, be sure you have the Mega/2560 wired up so:
Mega Ground to CircuitPython GND
Mega 5V to CircuitPythong USB or make sure the Trinket is powered by USB
Pin 52 -> CircuitPython SCK
Pin 50 -> CircuitPython MISO - Note this is backwards from what you expect
Pin 51 -> CircuitPython MOSI - Note this is backwards from what you expect
RESET -> CircuitPython D5 (or change the init() below to change it)
Drag "stk500boot_v2_mega2560.hex" onto the CircuitPython disk drive, then open REPL
"""
import board
import busio
@ -15,13 +24,16 @@ atmega2560['flash_size'] = 262144
atmega2560['page_size'] = 256
atmega2560['fuse_mask'] = (0xFF, 0xFF, 0x07, 0x3F)
# Helper to print out errors for us
def error(err):
""" Helper to print out errors for us and then halt """
print("ERROR: "+err)
avrprog.end()
while True:
pass
while input("Ready to GO, type 'G' here to start> ") != 'G':
pass
if not avrprog.verify_sig(atmega2560, verbose=True):
error("Signature read failure")
print("Found", atmega2560['name'])
@ -37,7 +49,7 @@ print("Programming flash from file")
avrprog.program_file(atmega2560, "stk500boot_v2_mega2560.hex", verbose=True, verify=True)
avrprog.write_fuses(atmega2560, lock=0x0F)
if not avrprog.verify_fuses(atmega2560,lock=0x0F):
if not avrprog.verify_fuses(atmega2560, lock=0x0F):
error("Failure verifying fuses!")
print("Done!")