X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETSPI.py;h=0020ec2012b4b27a2334017af39796238ffc66f1;hp=bee77f5c2691cd47ecf055beca1ea2f4e2a5a438;hb=dd259c9289deb11e84be93647c144192e5ba10b6;hpb=fbf1dcfd59f6213926c78178115c1b7110afdf8f diff --git a/client/GoodFETSPI.py b/client/GoodFETSPI.py index bee77f5..0020ec2 100644 --- a/client/GoodFETSPI.py +++ b/client/GoodFETSPI.py @@ -29,29 +29,41 @@ class GoodFETSPIFlash(GoodFETSPI): JEDECmanufacturers={0xFF: "MISSING", 0xEF: "Winbond", 0xC2: "MXIC", - 0x20: "Numonyx/ST" + 0x20: "Numonyx/ST", + 0x1F: "Atmel", + 0x01: "AMD/Spansion" }; JEDECdevices={0xFFFFFF: "MISSING", + 0xEF3015: "W25X16L", 0xEF3014: "W25X80L", 0xEF3013: "W25X40L", 0xEF3012: "W25X20L", 0xEF3011: "W25X10L", + 0xC22017: "MX25L6405D", + 0xC22016: "MX25L3205D", + 0xC22015: "MX25L1605D", 0xC22014: "MX25L8005", 0xC22013: "MX25L4005", 0x204011: "M45PE10" }; - JEDECsizes={0x14: 0x100000, + + JEDECsizes={0x17: 0x800000, + 0x16: 0x400000, + 0x15: 0x200000, + 0x14: 0x100000, 0x13: 0x080000, 0x12: 0x040000, - 0x11: 0x020000} + 0x11: 0x020000 + }; + JEDECsize=0; def SPIjedec(self): """Grab an SPI Flash ROM's JEDEC bytes.""" data=[0x9f, 0, 0, 0]; data=self.SPItrans(data); - #print "Manufacturer: %02x\nType: %02x\nCapacity: %02x" % (ord(data[1]),ord(data[2]),ord(data[3])); + self.JEDECmanufacturer=ord(data[1]); self.JEDECtype=ord(data[2]); self.JEDECcapacity=ord(data[3]); @@ -69,30 +81,31 @@ class GoodFETSPIFlash(GoodFETSPI): 0]; self.SPItrans(data); return ord(self.data[4]); - def SPIpeekblock(self,adr,blocks=1): + def SPIpeekblock(self,adr): """Grab a few block from an SPI Flash ROM. Block size is unknown""" data=[(adr&0xFF0000)>>16, (adr&0xFF00)>>8, - adr&0xFF, - blocks]; + adr&0xFF]; - self.writecmd(0x01,0x02,4,data,blocks); + self.writecmd(0x01,0x02,3,data); return self.data; def SPIpokebyte(self,adr,val): self.SPIpokebytes(adr,[val]); def SPIpokebytes(self,adr,data): - #self.SPIwriteenable(); - adranddata=[(adr&0xFF0000)>>16, - (adr&0xFF00)>>8, - adr&0xFF - ]+data; + #Used to be 24 bits, BE, not 32 bits, LE. + adranddata=[adr&0xFF, + (adr&0xFF00)>>8, + (adr&0xFF0000)>>16, + 0, #MSB + ]+data; + #print "%06x: poking %i bytes" % (adr,len(data)); self.writecmd(0x01,0x03, len(adranddata),adranddata); def SPIchiperase(self): """Mass erase an SPI Flash ROM.""" - self.writecmd(0x01,0x81,0,[]); + self.writecmd(0x01,0x81); def SPIwriteenable(self): """SPI Flash Write Enable""" data=[0x06];