projects
/
goodfet
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
PIC patches from Brent Dukes.
[goodfet]
/
client
/
goodfet.arm7
diff --git
a/client/goodfet.arm7
b/client/goodfet.arm7
index
f5e689e
..
97d2ea3
100755
(executable)
--- a/
client/goodfet.arm7
+++ b/
client/goodfet.arm7
@@
-1,8
+1,8
@@
#!/usr/bin/env python
#!/usr/bin/env python
-import sys
;
+import sys
import struct
import struct
-import binascii
;
+import binascii
from GoodFETARM7 import GoodFETARM
from intelhex import IntelHex16bit, IntelHex
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
sys.exit()
#Initialize FET and set baud rate
-client=GoodFETARM()
;
+client=GoodFETARM()
client.serInit()
client.serInit()
-client.setup()
;
-client.start()
;
+client.setup()
+client.start()
if(sys.argv[1]=="info"):
if(sys.argv[1]=="info"):
- pass
+ client.halt()
+ client.resume()
+
if(sys.argv[1]=="dump"):
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):
if(len(sys.argv)>3):
- start=int(sys.argv[3],16)
;
+ start=int(sys.argv[3],16)
if(len(sys.argv)>4):
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()
# 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:
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("<I", dword) )
for dword in data:
if i<=stop and dword != 0xdeadbeef:
h.puts( i, struct.pack("<I", dword) )
- i+=4
;
+ i+=4
# FIXME: get mcu state and return it to that state
client.resume()
# FIXME: get mcu state and return it to that state
client.resume()
- h.write_hex_file(f)
;
+ h.write_hex_file(f)
'''
if(sys.argv[1]=="erase"):
print "Erasing main flash memory."
'''
if(sys.argv[1]=="erase"):
print "Erasing main flash memory."
- client.ARMmasserase()
;
+ client.ARMmasserase()
if(sys.argv[1]=="eraseinfo"):
print "Erasing info memory."
if(sys.argv[1]=="eraseinfo"):
print "Erasing info memory."
- client.ARMinfoerase()
;
+ client.ARMinfoerase()
'''
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
if(len(sys.argv)>3):
if(len(sys.argv)>3):
- start=int(sys.argv[3],16)
;
+ start=int(sys.argv[3],16)
if(len(sys.argv)>4):
if(len(sys.argv)>4):
- stop=int(sys.argv[4],16)
;
+ stop=int(sys.argv[4],16)
client.halt()
client.halt()
- h = IntelHex16bit(f)
;
+ h = IntelHex16bit(f)
#Should this be default?
#Makes flashing multiple images inconvenient.
#Should this be default?
#Makes flashing multiple images inconvenient.
- #client.ARMmasserase()
;
+ #client.ARMmasserase()
count=0; #Bytes in commit.
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):
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):
- val=h[i>>1]
;
+ val=h[i>>1]
if(count==0):
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):
if(i%0x100==0):
- print "%04x" % i
;
+ print "%04x" % i
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
if(len(sys.argv)>3):
if(len(sys.argv)>3):
- start=int(sys.argv[3],16)
;
+ start=int(sys.argv[3],16)
if(len(sys.argv)>4):
if(len(sys.argv)>4):
- stop=int(sys.argv[4],16)
;
+ stop=int(sys.argv[4],16)
client.halt()
client.halt()
- h = IntelHex16bit(f)
;
+ h = IntelHex16bit(f)
for i in h._buf.keys():
if(i>=start and i<stop and i&1==0):
for i in h._buf.keys():
if(i>=start and i<stop and i&1==0):
- peek=client.
ARMreadMem
(i)
+ peek=client.
peek
(i)
if(h[i>>1]!=peek):
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])
if(i%0x100==0):
if(i%0x100==0):
- print "%04x" % i
;
+ print "%04x" % i
client.resume()
if(sys.argv[1]=="peek"):
client.resume()
if(sys.argv[1]=="peek"):
- start = 0x0000
;
+ start = 0x0000
if(len(sys.argv)>2):
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):
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)
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"):
client.resume()
if(sys.argv[1]=="poke"):
- start=0x0000
;
- val=0x00
;
+ start=0x0000
+ val=0x00
if(len(sys.argv)>2):
if(len(sys.argv)>2):
- start=int(sys.argv[2],16)
;
+ start=int(sys.argv[2],16)
if(len(sys.argv)>3):
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])
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.
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()