# HG changeset patch # User Paul Boddie # Date 1425839795 -3600 # Node ID 64ba8abb1b919af4ef07a3dd1a75717362ceb9ac # Parent 9cb1a32f298b347cdff8b05ed11a4913a6324714 Added a verify-only mode for uploaded files, and made uploading/verifying stop the program if it fails. diff -r 9cb1a32f298b -r 64ba8abb1b91 upload.py --- a/upload.py Sat Mar 07 23:32:25 2015 +0100 +++ b/upload.py Sun Mar 08 19:36:35 2015 +0100 @@ -58,33 +58,43 @@ except EOFError: print "Session closed." -def upload(filename, sector): +def upload(filename, sector, verify_only=False): data = open(filename, "rb").read() if len(data) != 0x4000: print >>sys.stderr, "File", filename, "is not", 0x4000, "bytes long." return False - print >>sys.stderr, "Erasing sector", sector, "..." + if not verify_only: + print >>sys.stderr, "Erasing sector", sector, "..." - writeToPort("S%x\n" % sector) - resp = readFromPort() - if resp != "S": - print >>sys.stderr, "Sector %d erase failed: %s" % (sector, resp) - return False + writeToPort("S%x\n" % sector) + resp = readFromPort() + if resp != "S": + print >>sys.stderr, "Sector %d erase failed: %s" % (sector, resp) + return False - print >>sys.stderr, "Uploading", filename, "to sector", sector, "..." + print >>sys.stderr, "Uploading", filename, "to sector", sector, "..." + else: + print >>sys.stderr, "Verifying sector", sector, "..." i = 0 while i < 0x4000: value = ord(data[i]) addr = (sector << 14) | i - writeToPort("P%04x%02x\n" % (addr, value)) - resp = readFromPort() - if resp != "P": - print >>sys.stderr, "Program of location %04x failed: %s" % (addr, resp) - return False + if not verify_only: + writeToPort("P%04x%02x\n" % (addr, value)) + resp = readFromPort() + if resp != "P": + print >>sys.stderr, "Program of location %04x failed: %s" % (addr, resp) + return False + else: + writeToPort("R%04x\n" % addr) + resp = readFromPort() + if resp != "%02X" % value and resp != "%X" % value: + print >>sys.stderr, "Verify of location %04x failed: %s" % (addr, resp) + return False i += 1 @@ -103,11 +113,18 @@ else: base = 0 i = 1 + if len(sys.argv) > i and sys.argv[i] == "-v": + verify_only = True + i += 1 + else: + verify_only = False + for sector, filename in enumerate(sys.argv[i:]): - upload(filename, sector + base) + if not upload(filename, sector + base, verify_only): + break sleep(5) # give the device a rest else: - print >>sys.stderr, sys.argv[0], "-i | ..." + print >>sys.stderr, sys.argv[0], "-i | [ -s ] [ -v ] ..." sys.exit(1) finally: closePort()