ArduinoAm29F010

Changeset

10:afad18e14ce9
2015-01-20 Paul Boddie raw files shortlog changelog graph Added a simple client program for uploading data.
upload.py (file)
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/upload.py	Tue Jan 20 01:41:12 2015 +0100
     1.3 @@ -0,0 +1,69 @@
     1.4 +#!/usr/bin/env python
     1.5 +
     1.6 +from serial import Serial
     1.7 +import sys
     1.8 +
     1.9 +def console(initial=None):
    1.10 +    if initial:
    1.11 +        s.write(initial)
    1.12 +
    1.13 +    try:
    1.14 +        while 1:
    1.15 +            s.write(raw_input(s.readline()) + "\n")
    1.16 +    except EOFError:
    1.17 +        print "Session closed."
    1.18 +
    1.19 +def upload(filename, sector):
    1.20 +    data = open(filename, "rb").read()
    1.21 +
    1.22 +    if len(data) != 0x4000:
    1.23 +        print >>sys.stderr, "File", filename, "is not", 0x4000, "bytes long."
    1.24 +        return False
    1.25 +
    1.26 +    print >>sys.stderr, "Erasing sector", sector, "..."
    1.27 +
    1.28 +    s.write("S%x\n" % sector)
    1.29 +    resp = s.readline().rstrip("\r\n")
    1.30 +    if resp != "S":
    1.31 +        print >>sys.stderr, "Sector %d erase failed: %s" % (sector, resp)
    1.32 +        return False
    1.33 +
    1.34 +    print >>sys.stderr, "Uploading", filename, "to sector", sector, "..."
    1.35 +
    1.36 +    i = 0
    1.37 +    while i < 0x4000:
    1.38 +        value = ord(data[i])
    1.39 +        addr = (sector << 14) | i
    1.40 +        s.write("P%04x%02x\n" % (addr, value))
    1.41 +        print >>sys.stderr, "P%04x%02x" % (addr, value)
    1.42 +        resp = s.readline().rstrip("\r\n")
    1.43 +        if resp != "P":
    1.44 +            print >>sys.stderr, "Program of location %04x failed: %s" % (addr, resp)
    1.45 +            return False
    1.46 +        #s.write("R%04x\n" % addr)
    1.47 +        #print >>sys.stderr, "R%04x" % addr
    1.48 +        #readvalue = s.readline().rstrip("\r\n")
    1.49 +        #if readvalue != ("%X" % value):
    1.50 +        #    print >>sys.stderr, "Program of location %04x failed: %s read for %s written." % (addr, readvalue, "%X" % value)
    1.51 +        #    return False
    1.52 +        i += 1
    1.53 +
    1.54 +    return True
    1.55 +
    1.56 +if __name__ == "__main__":
    1.57 +    port = "/dev/ttyUSB0"
    1.58 +    rate = 115200
    1.59 +
    1.60 +    s = Serial(port, rate)
    1.61 +
    1.62 +    if "-i" in sys.argv:
    1.63 +        console()
    1.64 +    elif len(sys.argv) > 1:
    1.65 +        s.readline()
    1.66 +        for sector, filename in enumerate(sys.argv[1:]):
    1.67 +            upload(filename, sector)
    1.68 +    else:
    1.69 +        print >>sys.stderr, sys.argv[0], "-i | <filename>..."
    1.70 +        sys.exit(1)
    1.71 +
    1.72 +# vim: tabstop=4 expandtab shiftwidth=4