1.1 --- a/upload.py Sat Mar 07 23:32:25 2015 +0100
1.2 +++ b/upload.py Sun Mar 08 19:36:35 2015 +0100
1.3 @@ -58,33 +58,43 @@
1.4 except EOFError:
1.5 print "Session closed."
1.6
1.7 -def upload(filename, sector):
1.8 +def upload(filename, sector, verify_only=False):
1.9 data = open(filename, "rb").read()
1.10
1.11 if len(data) != 0x4000:
1.12 print >>sys.stderr, "File", filename, "is not", 0x4000, "bytes long."
1.13 return False
1.14
1.15 - print >>sys.stderr, "Erasing sector", sector, "..."
1.16 + if not verify_only:
1.17 + print >>sys.stderr, "Erasing sector", sector, "..."
1.18
1.19 - writeToPort("S%x\n" % sector)
1.20 - resp = readFromPort()
1.21 - if resp != "S":
1.22 - print >>sys.stderr, "Sector %d erase failed: %s" % (sector, resp)
1.23 - return False
1.24 + writeToPort("S%x\n" % sector)
1.25 + resp = readFromPort()
1.26 + if resp != "S":
1.27 + print >>sys.stderr, "Sector %d erase failed: %s" % (sector, resp)
1.28 + return False
1.29
1.30 - print >>sys.stderr, "Uploading", filename, "to sector", sector, "..."
1.31 + print >>sys.stderr, "Uploading", filename, "to sector", sector, "..."
1.32 + else:
1.33 + print >>sys.stderr, "Verifying sector", sector, "..."
1.34
1.35 i = 0
1.36 while i < 0x4000:
1.37 value = ord(data[i])
1.38 addr = (sector << 14) | i
1.39
1.40 - writeToPort("P%04x%02x\n" % (addr, value))
1.41 - resp = readFromPort()
1.42 - if resp != "P":
1.43 - print >>sys.stderr, "Program of location %04x failed: %s" % (addr, resp)
1.44 - return False
1.45 + if not verify_only:
1.46 + writeToPort("P%04x%02x\n" % (addr, value))
1.47 + resp = readFromPort()
1.48 + if resp != "P":
1.49 + print >>sys.stderr, "Program of location %04x failed: %s" % (addr, resp)
1.50 + return False
1.51 + else:
1.52 + writeToPort("R%04x\n" % addr)
1.53 + resp = readFromPort()
1.54 + if resp != "%02X" % value and resp != "%X" % value:
1.55 + print >>sys.stderr, "Verify of location %04x failed: %s" % (addr, resp)
1.56 + return False
1.57
1.58 i += 1
1.59
1.60 @@ -103,11 +113,18 @@
1.61 else:
1.62 base = 0
1.63 i = 1
1.64 + if len(sys.argv) > i and sys.argv[i] == "-v":
1.65 + verify_only = True
1.66 + i += 1
1.67 + else:
1.68 + verify_only = False
1.69 +
1.70 for sector, filename in enumerate(sys.argv[i:]):
1.71 - upload(filename, sector + base)
1.72 + if not upload(filename, sector + base, verify_only):
1.73 + break
1.74 sleep(5) # give the device a rest
1.75 else:
1.76 - print >>sys.stderr, sys.argv[0], "-i | <filename>..."
1.77 + print >>sys.stderr, sys.argv[0], "-i | [ -s <sector> ] [ -v ] <filename>..."
1.78 sys.exit(1)
1.79 finally:
1.80 closePort()