X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2Fgoodfet.arm7;h=1727521d678541d1e2a7c84a6915e9d4454de05e;hp=a993f1ed692b92eefeba2fd5cef283fbfa7d4c46;hb=d08bfd3c7cdc687fd68ba9025702c262665e52d3;hpb=ee53293be17c053f5eaca7fdee7912d3d0544934 diff --git a/client/goodfet.arm7 b/client/goodfet.arm7 index a993f1e..1727521 100755 --- a/client/goodfet.arm7 +++ b/client/goodfet.arm7 @@ -1,181 +1,17 @@ #!/usr/bin/env python -import sys; +import sys import struct -import binascii; +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"): - pass - -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; - 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.ARMreleasecpu(); - -#client.ARMreleasecpu(); -#client.ARMstop();