X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2Fgoodfet.arm7;h=97d2ea3593aeea8d97335cc6223b150ee3e86ccd;hp=f5e689e2a8cafb2de2fdb30ecc015904deee441e;hb=0f09afa49bb8b723a270edd816acbdcaddeb7290;hpb=96b58b50549bd65e06f5ef1941c3a1ce155a2cbe diff --git a/client/goodfet.arm7 b/client/goodfet.arm7 index f5e689e..97d2ea3 100755 --- a/client/goodfet.arm7 +++ b/client/goodfet.arm7 @@ -1,8 +1,8 @@ #!/usr/bin/env python -import sys; +import sys import struct -import binascii; +import binascii from GoodFETARM7 import GoodFETARM from intelhex import IntelHex16bit, IntelHex @@ -23,133 +23,135 @@ if(len(sys.argv)==1): sys.exit() #Initialize FET and set baud rate -client=GoodFETARM(); +client=GoodFETARM() client.serInit() -client.setup(); -client.start(); +client.setup() +client.start() if(sys.argv[1]=="info"): - pass + client.halt() + client.resume() + if(sys.argv[1]=="dump"): - f = sys.argv[2]; - start=0x00000000; - stop=0xFFFFFFFF; + f = sys.argv[2] + start=0x00000000 + stop=0xFFFFFFFF if(len(sys.argv)>3): - start=int(sys.argv[3],16); + start=int(sys.argv[3],16) if(len(sys.argv)>4): - stop=int(sys.argv[4],16); + stop=int(sys.argv[4],16) - print "Dumping from %04x to %04x as %s." % (start,stop,f); - #h = IntelHex16bit(None); + 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; + h = IntelHex(None) + i=start while i<=stop: - #data=client.ARMreadMem(i, 48); - data=client.ARMreadChunk(i, 48, verbose=0); - print "Dumped %06x."%i; + #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); + start=int(sys.argv[3],16) if(len(sys.argv)>4): - stop=int(sys.argv[4],16); + stop=int(sys.argv[4],16) client.halt() - h = IntelHex16bit(f); + h = IntelHex16bit(f) #Should this be default? #Makes flashing multiple images inconvenient. - #client.ARMmasserase(); + #client.ARMmasserase() count=0; #Bytes in commit. - first=0; - vals=[]; + 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=[]; + #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]; + val=h[i>>1] if(count==0): - first=i; - last=i; - count+=2; - vals+=[val&0xff,(val&0xff00)>>8]; + first=i + last=i + count+=2 + vals+=[val&0xff,(val&0xff00)>>8] if(i%0x100==0): - print "%04x" % i; + print "%04x" % i if count>0: #last commit, ivt - client.ARMpokeflashblock(first,vals); + client.ARMpokeflashblock(first,vals) client.resume() if(sys.argv[1]=="verify"): - f=sys.argv[2]; - start=0; - stop=0xFFFF; + f=sys.argv[2] + start=0 + stop=0xFFFF if(len(sys.argv)>3): - start=int(sys.argv[3],16); + start=int(sys.argv[3],16) if(len(sys.argv)>4): - stop=int(sys.argv[4],16); + stop=int(sys.argv[4],16) client.halt() - h = IntelHex16bit(f); + 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]); + print "ERROR at %04x, found %04x not %04x"%(i,peek,h[i>>1]) if(i%0x100==0): - print "%04x" % i; + print "%04x" % i client.resume() if(sys.argv[1]=="peek"): - start = 0x0000; + start = 0x0000 if(len(sys.argv)>2): - start=int(sys.argv[2],16); + start=int(sys.argv[2],16) - stop = start+4; + stop = start+4 if(len(sys.argv)>3): - stop=int(sys.argv[3],16); + stop=int(sys.argv[3],16) - print "Peeking from %04x to %04x." % (start,stop); + 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) @@ -157,14 +159,14 @@ if(sys.argv[1]=="peek"): client.resume() if(sys.argv[1]=="poke"): - start=0x0000; - val=0x00; + start=0x0000 + val=0x00 if(len(sys.argv)>2): - start=int(sys.argv[2],16); + start=int(sys.argv[2],16) if(len(sys.argv)>3): - val=int(sys.argv[3],16); + val=int(sys.argv[3],16) - print "Poking %06x to become %04x." % (start,val); + print "Poking %06x to become %04x." % (start,val) client.halt() #???while client.ARMreadMem(start)[0]&(~val)>0: client.ARMwriteChunk(start, [val]) @@ -175,8 +177,10 @@ if(sys.argv[1]=="poke"): if(sys.argv[1]=="reset"): #Set PC to RESET vector's value. - client.ARMsetPC(0x00000000); - client.ARMreleasecpu(); + #client.ARMsetPC(0x00000000) + #client.ARMset_regCPSR(0) + #client.ARMreleasecpu() + client.ARMresettarget(1000) -#client.ARMreleasecpu(); -#client.ARMstop(); +#client.ARMreleasecpu() +#client.ARMstop()