self.ARMset_register(15,self.storedPC&0xfffffffc)
print "CPSR: (%s) %s"%(self.ARMget_regCPSRstr())
halt = ARMhaltcpu
self.ARMset_register(15,self.storedPC&0xfffffffc)
print "CPSR: (%s) %s"%(self.ARMget_regCPSRstr())
halt = ARMhaltcpu
def ARMreleasecpu(self):
"""Resume the CPU."""
# restore registers FIXME: DO THIS
def ARMreleasecpu(self):
"""Resume the CPU."""
# restore registers FIXME: DO THIS
self.ARM_nop(0)
self.ARMrestart()
self.ARM_nop(0)
self.ARMrestart()
def resettap(self):
self.writecmd(0x13, RESETTAP, 0,[])
def ARMsetModeARM(self):
def resettap(self):
self.writecmd(0x13, RESETTAP, 0,[])
def ARMsetModeARM(self):
0x02 : "force dbgrq",
0x01 : "force dbgack"
}
0x02 : "force dbgrq",
0x01 : "force dbgack"
}
- def ARMresettarget(self, delay=10):
+ def ARMresettarget(self, delay=1000):
return self.writecmd(0x13,RESETTARGET,2, [ delay&0xff, (delay>>8)&0xff ] )
return self.writecmd(0x13,RESETTARGET,2, [ delay&0xff, (delay>>8)&0xff ] )
def ARMchain0(self, address, bits=0x819684c054, data=0):
bulk = chop(address,4)
bulk.extend(chop(bits,8))
def ARMchain0(self, address, bits=0x819684c054, data=0):
bulk = chop(address,4)
bulk.extend(chop(bits,8))
from GoodFETARM7 import GoodFETARM
from intelhex import IntelHex16bit, IntelHex
from GoodFETARM7 import GoodFETARM
from intelhex import IntelHex16bit, IntelHex
sys.exit()
#Initialize FET and set baud rate
sys.exit()
#Initialize FET and set baud rate
-client.setup();
-client.start();
+client.setup()
+client.start()
+ client.halt()
+ client.resume()
+
- f = sys.argv[2];
- start=0x00000000;
- stop=0xFFFFFFFF;
+ f = sys.argv[2]
+ start=0x00000000
+ stop=0xFFFFFFFF
- start=int(sys.argv[3],16);
+ start=int(sys.argv[3],16)
- 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()
# FIXME: get mcu state and return it to that state
client.halt()
- h = IntelHex(None);
- i=start;
+ h = IntelHex(None)
+ i=start
- #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("<I", dword) )
for dword in data:
if i<=stop and dword != 0xdeadbeef:
h.puts( i, struct.pack("<I", dword) )
# FIXME: get mcu state and return it to that state
client.resume()
# FIXME: get mcu state and return it to that state
client.resume()
'''
if(sys.argv[1]=="erase"):
print "Erasing main flash memory."
'''
if(sys.argv[1]=="erase"):
print "Erasing main flash memory."
if(sys.argv[1]=="eraseinfo"):
print "Erasing info memory."
if(sys.argv[1]=="eraseinfo"):
print "Erasing info memory."
'''
if(sys.argv[1]=="ivt"):
'''
if(sys.argv[1]=="ivt"):
- client.ARMreprChunk(0xFFC0,0xFFFF);
+ client.ARMreprChunk(0xFFC0,0xFFFF)
if(sys.argv[1]=="regs"):
for i in range(0,16):
if(sys.argv[1]=="regs"):
for i in range(0,16):
- print "r%i=%04x" % (i,client.ARMget_register(i));
+ print "r%i=%04x" % (i,client.ARMget_register(i))
if(sys.argv[1]=="flash"):
if(sys.argv[1]=="flash"):
- f=sys.argv[2];
- start=0;
- stop=0x10000;
+ f=sys.argv[2]
+ start=0
+ stop=0x10000
- start=int(sys.argv[3],16);
+ start=int(sys.argv[3],16)
- stop=int(sys.argv[4],16);
+ stop=int(sys.argv[4],16)
#Should this be default?
#Makes flashing multiple images inconvenient.
#Should this be default?
#Makes flashing multiple images inconvenient.
- #client.ARMmasserase();
count=0; #Bytes in commit.
count=0; #Bytes in commit.
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):
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<stop and i&1==0):
if(i>=start and i<stop and i&1==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 count>0: #last commit, ivt
if count>0: #last commit, ivt
- client.ARMpokeflashblock(first,vals);
+ client.ARMpokeflashblock(first,vals)
client.resume()
if(sys.argv[1]=="verify"):
client.resume()
if(sys.argv[1]=="verify"):
- f=sys.argv[2];
- start=0;
- stop=0xFFFF;
+ f=sys.argv[2]
+ start=0
+ stop=0xFFFF
- start=int(sys.argv[3],16);
+ start=int(sys.argv[3],16)
- stop=int(sys.argv[4],16);
+ stop=int(sys.argv[4],16)
for i in h._buf.keys():
if(i>=start and i<stop and i&1==0):
peek=client.ARMreadMem(i)
if(h[i>>1]!=peek):
for i in h._buf.keys():
if(i>=start and i<stop and i&1==0):
peek=client.ARMreadMem(i)
if(h[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])
client.resume()
if(sys.argv[1]=="peek"):
client.resume()
if(sys.argv[1]=="peek"):
- start=int(sys.argv[2],16);
+ start=int(sys.argv[2],16)
- 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)
client.halt()
for dword in client.ARMreadChunk(start, (stop-start)/4, verbose=0):
print "%.4x: %.8x" % (start, dword)
client.resume()
if(sys.argv[1]=="poke"):
client.resume()
if(sys.argv[1]=="poke"):
- start=0x0000;
- val=0x00;
+ start=0x0000
+ val=0x00
- start=int(sys.argv[2],16);
+ start=int(sys.argv[2],16)
- 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])
client.halt()
#???while client.ARMreadMem(start)[0]&(~val)>0:
client.ARMwriteChunk(start, [val])
if(sys.argv[1]=="reset"):
#Set PC to RESET vector's value.
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()