X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2Fgoodfet.arm7;h=1727521d678541d1e2a7c84a6915e9d4454de05e;hp=97d2ea3593aeea8d97335cc6223b150ee3e86ccd;hb=d08bfd3c7cdc687fd68ba9025702c262665e52d3;hpb=2d9581c49c1f23575ab77b299ba9ea84155447c6 diff --git a/client/goodfet.arm7 b/client/goodfet.arm7 index 97d2ea3..1727521 100755 --- a/client/goodfet.arm7 +++ b/client/goodfet.arm7 @@ -4,183 +4,14 @@ import sys import struct import binascii -from GoodFETARM7 import GoodFETARM +from GoodFETARM7 import * from intelhex import IntelHex16bit, IntelHex +if __name__ == "__main__": + if(len(sys.argv)==1): + arm7_syntax() -if(len(sys.argv)==1): - print "Usage: %s verb [objects]\n" % sys.argv[0] - # halt, resume... but need for flash and dump to leave it as it was - print "%s info" % sys.argv[0] - print "%s dump $foo.hex [0x$start 0x$stop]" % sys.argv[0] - print "%s erase" % sys.argv[0] - print "%s eraseinfo" % 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] - print "%s poke 0x$adr 0x$val" % sys.argv[0] - print "%s peek 0x$start [0x$stop]" % sys.argv[0] - print "%s reset" % sys.argv[0] - sys.exit() + else: + arm7_main() -#Initialize FET and set baud rate -client=GoodFETARM() -client.serInit() -client.setup() -client.start() - -if(sys.argv[1]=="info"): - client.halt() - client.resume() - - -if(sys.argv[1]=="dump"): - f = sys.argv[2] - start=0x00000000 - stop=0xFFFFFFFF - 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) - # FIXME: get mcu state and return it to that state - client.halt() - - h = IntelHex(None) - i=start - while i<=stop: - #data=client.ARMreadMem(i, 48) - data=client.ARMreadChunk(i, 48, verbose=0) - print "Dumped %06x."%i - for dword in data: - if i<=stop and dword != 0xdeadbeef: - h.puts( i, struct.pack("3): - start=int(sys.argv[3],16) - if(len(sys.argv)>4): - stop=int(sys.argv[4],16) - - client.halt() - h = IntelHex16bit(f) - - #Should this be default? - #Makes flashing multiple images inconvenient. - #client.ARMmasserase() - - count=0; #Bytes in commit. - first=0 - vals=[] - last=0; #Last address committed. - for i in h._buf.keys(): - if((count>0x40 or last+2!=i) and count>0 and i&1==0): - #print "%i, %x, %x" % (len(vals), last, i) - client.ARMpokeflashblock(first,vals) - count=0 - first=0 - last=0 - vals=[] - if(i>=start and i>1] - if(count==0): - first=i - last=i - count+=2 - vals+=[val&0xff,(val&0xff00)>>8] - if(i%0x100==0): - print "%04x" % i - if count>0: #last commit, ivt - client.ARMpokeflashblock(first,vals) - client.resume() - -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) - - client.halt() - 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 - client.resume() - - -if(sys.argv[1]=="peek"): - start = 0x0000 - if(len(sys.argv)>2): - start=int(sys.argv[2],16) - - stop = start+4 - if(len(sys.argv)>3): - stop=int(sys.argv[3],16) - - print "Peeking from %04x to %04x." % (start,stop) - client.halt() - for dword in client.ARMreadChunk(start, (stop-start)/4, verbose=0): - print "%.4x: %.8x" % (start, dword) - start += 4 - client.resume() - -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) - client.halt() - #???while client.ARMreadMem(start)[0]&(~val)>0: - client.ARMwriteChunk(start, [val]) - print "Poked to %.8x" % client.ARMreadMem(start)[0] - client.resume() - - -if(sys.argv[1]=="reset"): - #Set PC to RESET vector's value. - - #client.ARMsetPC(0x00000000) - #client.ARMset_regCPSR(0) - #client.ARMreleasecpu() - client.ARMresettarget(1000) - -#client.ARMreleasecpu() -#client.ARMstop()