From: travisutk Date: Wed, 2 Sep 2009 00:53:44 +0000 (+0000) Subject: JEDEC size detection. X-Git-Url: http://git.rot13.org/?p=goodfet;a=commitdiff_plain;h=f1d07ce6be7b2ec7cc637d491abd32371bd4dfb1 JEDEC size detection. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@107 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- diff --git a/client/GoodFET.py b/client/GoodFET.py index 3a192fc..99756ba 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -179,6 +179,11 @@ class GoodFET: 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]; @@ -187,6 +192,7 @@ class GoodFET: 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): @@ -199,14 +205,13 @@ class GoodFET: 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): diff --git a/client/goodfet.spiflash b/client/goodfet.spiflash index 23585a7..e6150e2 100755 --- a/client/goodfet.spiflash +++ b/client/goodfet.spiflash @@ -19,7 +19,7 @@ if(len(sys.argv)==1): 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(); @@ -65,7 +65,7 @@ if(sys.argv[1]=="info"): 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): @@ -86,7 +86,8 @@ if(sys.argv[1]=="dump"): 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): @@ -107,7 +108,7 @@ if(sys.argv[1]=="flash"): client.SPIpokebytes(i,bytes); i+=chunksize; - if(i%0x100==0): + if(i%0x1000==0): print "Flashed %06x."%i; file.close()