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();
-client.serInit("/dev/ttyUSB0")
+client.serInit()
+
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]=="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]),
- ord(data[3]));
+ ord(data[3]),
+ client.JEDECsize);
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):
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:
- file.write(j);
+ if i<stop: file.write(j);
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):
file = open(f, mode='rb')
i=start;
- bytes=file.read();
+ chars=list(file.read());
+ chunksize=0x80;
+
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%0x1000==0):
print "Flashed %06x."%i;
file.close()