projects
/
goodfet
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Faster SPI Flash dumping, but it's a bit ugly.
[goodfet]
/
client
/
goodfet.spiflash
diff --git
a/client/goodfet.spiflash
b/client/goodfet.spiflash
index
a04ed19
..
571ddc4
100755
(executable)
--- a/
client/goodfet.spiflash
+++ b/
client/goodfet.spiflash
@@
-18,18
+18,23
@@
if(len(sys.argv)==1):
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 info" % sys.argv[0];
print "%s dump $foo.hex [0x$start 0x$stop]" % sys.argv[0];
print "%s erase" % sys.argv[0];
- print "%s
write
$foo.hex [0x$start 0x$stop]" % sys.argv[0];
- print "%s verify $foo.hex [0x$start 0x$stop]" % 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 peek 0x$start [0x$stop]" % sys.argv[0];
print "%s poke 0x$adr 0x$val" % sys.argv[0];
sys.exit();
#Initailize FET and set baud rate
client=GoodFET();
print "%s peek 0x$start [0x$stop]" % sys.argv[0];
print "%s poke 0x$adr 0x$val" % sys.argv[0];
sys.exit();
#Initailize FET and set baud rate
client=GoodFET();
-client.serInit("/dev/ttyUSB0")
+client.serInit()
+
client.SPIsetup();
client.SPIsetup();
+#Dummy read.
+#Might read as all ones if chip has a startup delay.
+client.SPIjedec();
+
if(sys.argv[1]=="test"):
result="";
dropped=0;
if(sys.argv[1]=="test"):
result="";
dropped=0;
@@
-51,16
+56,17
@@
if(sys.argv[1]=="test"):
if(sys.argv[1]=="info"):
data=client.SPIjedec();
if(sys.argv[1]=="info"):
data=client.SPIjedec();
- print "Ident as %s\nManufacturer: %02x %s\nType: %02x\nCapacity: %02x" % (
+ print "Ident as %s\nManufacturer: %02x %s\nType: %02x\nCapacity: %02x
(%i bytes)
" % (
client.SPIjedecstr(),
ord(data[1]),client.SPIjedecmanstr(),
ord(data[2]),
client.SPIjedecstr(),
ord(data[1]),client.SPIjedecmanstr(),
ord(data[2]),
- ord(data[3]));
+ ord(data[3]),
+ client.JEDECsize);
if(sys.argv[1]=="dump"):
f = sys.argv[2];
start=0x0000;
if(sys.argv[1]=="dump"):
f = sys.argv[2];
start=0x0000;
- stop=
0x100000; #TODO, adjust this by the JEDEC size parameter.
+ stop=
client.JEDECsize;
if(len(sys.argv)>3):
start=int(sys.argv[3],16);
if(len(sys.argv)>4):
if(len(sys.argv)>3):
start=int(sys.argv[3],16);
if(len(sys.argv)>4):
@@
-71,19
+77,18
@@
if(sys.argv[1]=="dump"):
i=start;
while i<=stop:
i=start;
while i<=stop:
- data=client.SPIpeekblock(i);
-
-
- if(i%0x100==0):
- print "Dumped %06x."%i;
+ data=client.SPIpeekblock(i,255);
+ #if(i%0x1000==0):
+ print "Dumped %06x."%i;
for j in data:
for j in data:
- file.write(j);
+
if i<stop:
file.write(j);
i+=1;
file.close()
if(sys.argv[1]=="flash"):
f = sys.argv[2];
start=0x0000;
i+=1;
file.close()
if(sys.argv[1]=="flash"):
f = sys.argv[2];
start=0x0000;
- stop=0x100000; #TODO, adjust this by the JEDEC size parameter.
+ stop=client.JEDECsize;
+
if(len(sys.argv)>3):
start=int(sys.argv[3],16);
if(len(sys.argv)>4):
if(len(sys.argv)>3):
start=int(sys.argv[3],16);
if(len(sys.argv)>4):
@@
-93,12
+98,18
@@
if(sys.argv[1]=="flash"):
file = open(f, mode='rb')
i=start;
file = open(f, mode='rb')
i=start;
- bytes=file.read();
+ chars=list(file.read());
+ chunksize=0x80;
+
while i<=stop:
while i<=stop:
- client.SPIpokebyte(i,ord(bytes[i]));
+ bytes=range(0,chunksize);
+ for j in range(0,chunksize):
+ bytes[j]=ord(chars[i+j]);
+ #client.SPIpokebyte(i,ord(chars[i]));
+ client.SPIpokebytes(i,bytes);
- i+=
1
;
- if(i%0x100==0):
+ i+=
chunksize
;
+ if(i%0x100
0
==0):
print "Flashed %06x."%i;
file.close()
print "Flashed %06x."%i;
file.close()