0xC22013: "MX25L4005",
0x204011: "M45PE10"
};
+ JEDECsizes={0x14: 0x100000,
+ 0x13: 0x080000,
+ 0x12: 0x040000,
+ 0x11: 0x020000}
+ JEDECsize=0;
def SPIjedec(self):
"""Grab an SPI Flash ROM's JEDEC bytes."""
data=[0x9f, 0, 0, 0];
self.JEDECmanufacturer=ord(data[1]);
self.JEDECtype=ord(data[2]);
self.JEDECcapacity=ord(data[3]);
+ self.JEDECsize=self.JEDECsizes.get(self.JEDECcapacity);
self.JEDECdevice=(ord(data[1])<<16)+(ord(data[2])<<8)+ord(data[3]);
return data;
def SPIpeek(self,adr):
self.SPItrans(data);
return ord(self.data[4]);
def SPIpeekblock(self,adr):
- """Grab a byte from an SPI Flash ROM."""
+ """Grab a block from an SPI Flash ROM. Block size is unknown"""
data=[(adr&0xFF0000)>>16,
(adr&0xFF00)>>8,
adr&0xFF];
self.writecmd(0x01,0x02,3,data);
return self.data;
-
def SPIpokebyte(self,adr,val):
self.SPIpokebytes(adr,[val]);
def SPIpokebytes(self,adr,data):
print "%s dump $foo.hex [0x$start 0x$stop]" % sys.argv[0];
print "%s erase" % 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 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();
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(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):
client.SPIpokebytes(i,bytes);
i+=chunksize;
- if(i%0x100==0):
+ if(i%0x1000==0):
print "Flashed %06x."%i;
file.close()