X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETSPI.py;h=b071d50abf91b0e3c3cfda17a75f91db98763b80;hp=0020ec2012b4b27a2334017af39796238ffc66f1;hb=63305a1bde764ca61d315bc4620a3aa7a8f4cfc0;hpb=46169c20b9a243aa8deecb4747a9431e86758c1c diff --git a/client/GoodFETSPI.py b/client/GoodFETSPI.py index 0020ec2..b071d50 100644 --- a/client/GoodFETSPI.py +++ b/client/GoodFETSPI.py @@ -5,11 +5,12 @@ # # This code is being rewritten and refactored. You've been warned! -import sys, time, string, cStringIO, struct, glob, serial, os; +import sys, time, string, cStringIO, struct, glob, os; from GoodFET import GoodFET; class GoodFETSPI(GoodFET): + APP=0x01; def SPIsetup(self): """Move the FET into the SPI application.""" self.writecmd(0x01,0x10,0,self.data); #SPI/SETUP @@ -25,6 +26,21 @@ class GoodFETSPI(GoodFET): self.writecmd(0x01,0x00,len(data),data); return self.data; +class GoodFETSPI25C(GoodFETSPI): + #opcodes + WREN=0x06; + WRDI=0x04; + RDSR=0x05; + WRSR=0x01; + READ=0x03; + WRITE=0x02; + + def peek8(self,adr,memory="vn"): + """Read a byte from the given address.""" + data=self.SPItrans([self.READ,(adr>>8)&0xFF,adr&0xFF,0x00]); + return ord(data[3]); + + class GoodFETSPIFlash(GoodFETSPI): JEDECmanufacturers={0xFF: "MISSING", 0xEF: "Winbond", @@ -45,7 +61,9 @@ class GoodFETSPIFlash(GoodFETSPI): 0xC22015: "MX25L1605D", 0xC22014: "MX25L8005", 0xC22013: "MX25L4005", - 0x204011: "M45PE10" + 0x204011: "M45PE10", + 0x202014: "M25P80", + 0x1f4501: "AT24DF081", }; JEDECsizes={0x17: 0x800000, @@ -60,17 +78,27 @@ class GoodFETSPIFlash(GoodFETSPI): JEDECsize=0; def SPIjedec(self): - """Grab an SPI Flash ROM's JEDEC bytes.""" + """Grab an SPI Flash ROM's JEDEC bytes. Some chips don't implement + this, such as Numonyx M25P* except in the 110nm processed.""" data=[0x9f, 0, 0, 0]; data=self.SPItrans(data); - + jedec=0; self.JEDECmanufacturer=ord(data[1]); - self.JEDECtype=ord(data[2]); - self.JEDECcapacity=ord(data[3]); + if self.JEDECmanufacturer==0xFF: + self.JEDECtype=0x20; + self.JEDECcapacity=0x14; + jedec=0x202014; + else: + self.JEDECtype=ord(data[2]); + self.JEDECcapacity=ord(data[3]); + jedec=(ord(data[1])<<16)+(ord(data[2])<<8)+ord(data[3]); self.JEDECsize=self.JEDECsizes.get(self.JEDECcapacity); if self.JEDECsize==None: self.JEDECsize=0; - self.JEDECdevice=(ord(data[1])<<16)+(ord(data[2])<<8)+ord(data[3]); + + if jedec==0x1F4501: + self.JEDECsize=1024**2; + self.JEDECdevice=jedec; return data; def SPIpeek(self,adr): """Grab a byte from an SPI Flash ROM."""