#!/usr/bin/env python #GoodFET I2C eeprom Client import re import sys import binascii import array from GoodFETI2C import GoodFETI2C #from intelhex import IntelHex if(len(sys.argv)==1): print "Usage: %s verb [objects]\n" % sys.argv[0] print "%s dump 0x$target $filename.bin [0x$start [0x$length]]" % sys.argv[0] print "%s read 0x$target [0x$start [0x$length]]" % sys.argv[0] print "%s write 0x$target 0x$adr 0x$val [0x...]" % sys.argv[0] sys.exit() #Initialize FET and set baud rate client=GoodFETI2C() #client.verbose=True client.serInit() client.I2Csetup() control_chars = ''.join(map(chr, range(0,32) + range(127,256))) control_char_re = re.compile('[%s]' % re.escape(control_chars)) def dotnpc(s): """Replace non-printing-characters with dots""" return control_char_re.sub('.', s) def xxd(data): for offset in range(0, len(data), 16): line = data[offset:offset+16] hex = binascii.hexlify(line) print "%07x: %4s %4s %4s %4s %4s %4s %4s %4s %s" %tuple([offset] + [hex[s:s+4] for s in range(0,32,4)] + [dotnpc(line)]) if(sys.argv[1]=="dump"): devadr = int(sys.argv[2],16) f = sys.argv[3] start=0x00 count=0x100 if(len(sys.argv)>4): start=int(sys.argv[4],16) if(len(sys.argv)>5): count=int(sys.argv[5],16) print "Dumping %i bytes from device 0x%02x starting at 0x%02x to file: %s." % (count,devadr,start,f) file = open(f, mode='wb') data=client.I2Ctrans(count, [devadr, start]) print "Dumped %i bytes."%len(data) file.write(data) file.close() if(sys.argv[1]=="read"): devadr = int(sys.argv[2],16) start=0x00 if(len(sys.argv)>3): start=int(sys.argv[3],16) count=1 if(len(sys.argv)>4): count=int(sys.argv[4],16) print "Reading %i bytes from device 0x%02x starting at 0x%02x." % (count,devadr,start) data=client.I2Ctrans(count, [devadr, start]) if(data): xxd(data) else: print "No data received" if(sys.argv[1]=="write"): if(len(sys.argv)>2): data=[int(x,16) for x in sys.argv[2:]] for i,byte in enumerate(data): print "0x%02x: 0x%02x" % (i,byte) client.I2Cwritebytes(data)