#!/usr/bin/env python import sys; import binascii; from GoodFETMSP430 import GoodFETMSP430; from intelhex import IntelHex16bit, IntelHex; if(len(sys.argv)==1): print "Usage: %s verb [objects]\n" % sys.argv[0]; print "%s test" % sys.argv[0]; print "%s dump $foo.hex [0x$start 0x$stop]" % sys.argv[0]; print "%s erase" % sys.argv[0]; print "%s flash $foo.hex [0x$start 0x$stop]" % sys.argv[0]; print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0]; sys.exit(); #Initialize FET and set baud rate client=GoodFETMSP430(); client.serInit() #Connect to target client.MSP430setup(); #print "setup" #Identify model number. client.MSP430start(); client.MSP430haltcpu(); #print "started" if(sys.argv[1]=="info"): #print "Model %08x " % client.MSP430deviceid(); #print "Core %04x " % client.MSP430coreid(); #print "Identity %04x" % client.MSP430ident(); print "Identifies as %s (%04x)" % ( client.MSP430identstr(), client.MSP430ident()); if(sys.argv[1]=="test"): client.MSP430test(); if(sys.argv[1]=="glitch"): for foo in range(0,100): print "Identifies as %04x" % client.MSP430ident(); if(sys.argv[1]=="dump"): f = sys.argv[2]; start=0x0200; stop=0xFFFF; if(len(sys.argv)>3): start=int(sys.argv[3],16); if(len(sys.argv)>4): stop=int(sys.argv[4],16); print "Dumping from %04x to %04x as %s." % (start,stop,f); #h = IntelHex16bit(None); h = IntelHex(None); i=start; while i<=stop: data=client.MSP430peekblock(i); print "Dumped %06x."%i; for j in data: if i<=stop: h[i]=ord(j); i+=1; h.write_hex_file(f); if(sys.argv[1]=="erase"): client.MSP430masserase(); if(sys.argv[1]=="ivt"): client.MSP430dumpmem(0xFFE0,0xFFFF); if(sys.argv[1]=="flash"): f=sys.argv[2]; start=0; stop=0xFFFF; if(len(sys.argv)>3): start=int(sys.argv[3],16); if(len(sys.argv)>4): stop=int(sys.argv[4],16); h = IntelHex16bit(f); client.MSP430masserase(); for i in h._buf.keys(): #print "%04x: %04x"%(i,h[i>>1]); if(i>=start and i>1]; val2=client.MSP430pokeflash(i,val); if(val!=val2): print "Write error at %04x, %04x!=%04x." %( i, val, val2); if(i%0x100==0): print "%04x" % i; if(sys.argv[1]=="verify"): f=sys.argv[2]; start=0; stop=0xFFFF; if(len(sys.argv)>3): start=int(sys.argv[3],16); if(len(sys.argv)>4): stop=int(sys.argv[4],16); h = IntelHex16bit(f); for i in h._buf.keys(): if(i>=start and i>1]!=peek): print "ERROR at %04x, found %04x not %04x"%(i,peek,h[i>>1]); if(i%0x100==0): print "%04x" % i; if(sys.argv[1]=="peek"): start=0x0000; if(len(sys.argv)>2): start=int(sys.argv[2],16); stop=start; if(len(sys.argv)>3): stop=int(sys.argv[3],16); print "Peeking from %04x to %04x." % (start,stop); while start<=stop: print "%04x: %04x" % (start,client.MSP430peek(start)); start=start+2; if(sys.argv[1]=="poke"): start=0x0000; val=0x00; if(len(sys.argv)>2): start=int(sys.argv[2],16); if(len(sys.argv)>3): val=int(sys.argv[3],16); print "Poking %06x to become %04x." % (start,val); while client.MSP430peek(start)!=val: client.MSP430pokeflash(start,val); print "Poked to %04x" % client.MSP430peek(start); if(sys.argv[1]=="whatever"): for i in [0x24FF, 0x2500, 0x2502, 0x2504]: print "%04x" % client.MSP430peek(i); client.MSP430releasecpu(); client.MSP430stop();