X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFET.py;h=f48d9cdf803622e3660c68b30b62a3f067a1ad81;hp=9c111617cc7463eb96dd34f034212c99e31cd424;hb=7544a1e347bc72edc26e6e4e7b9eec059c3324e3;hpb=9e13b1450d770a5645468221d0eacc1533d654a9 diff --git a/client/GoodFET.py b/client/GoodFET.py index 9c11161..f48d9cd 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -102,7 +102,7 @@ class GoodFET: def SPIsetup(self): """Moved the FET into the SPI application.""" self.writecmd(0x01,0x10,0,self.data); #SPI/SETUP - #self.readcmd(); + def SPItrans8(self,byte): """Read and write 8 bits by SPI.""" data=self.SPItrans([byte]); @@ -115,11 +115,17 @@ class GoodFET: return self.data; JEDECmanufacturers={0xFF: "MISSING", - 0xEF: "Winbond"}; - JEDECdevices={0xEF3014: "W25X80L", + 0xEF: "Winbond", + 0xC2: "MXIC"}; + + JEDECdevices={0xFFFFFF: "MISSING", + 0xEF3014: "W25X80L", 0xEF3013: "W25X40L", 0xEF3012: "W25X20L", - 0xEF3011: "W25X10L"}; + 0xEF3011: "W25X10L", + 0xC22014: "MX25L8005", + 0xC22013: "MX25L4005" + }; def SPIjedec(self): """Grab an SPI Flash ROM's JEDEC bytes.""" data=[0x9f, 0, 0, 0]; @@ -139,20 +145,47 @@ class GoodFET: 0]; self.SPItrans(data); return ord(self.data[4]); + def SPIpeekblock(self,adr): + """Grab a byte from an SPI Flash ROM.""" + 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): + #self.SPIwriteenable(); + adranddata=[(adr&0xFF0000)>>16, + (adr&0xFF00)>>8, + adr&0xFF + ]+data; + self.writecmd(0x01,0x03, + len(adranddata),adranddata); + + def SPIchiperase(self): + """Mass erase an SPI Flash ROM.""" + self.writecmd(0x01,0x81,0,[]); + def SPIwriteenable(self): + """SPI Flash Write Enable""" + data=[0x06]; + self.SPItrans(data); + def SPIjedecmanstr(self): """Grab the JEDEC manufacturer string. Call after SPIjedec().""" - man=self.JEDECmanufacturers[self.JEDECmanufacturer]; + man=self.JEDECmanufacturers.get(self.JEDECmanufacturer) if man==0: man="UNKNOWN"; return man; def SPIjedecstr(self): """Grab the JEDEC manufacturer string. Call after SPIjedec().""" - man=self.JEDECmanufacturers[self.JEDECmanufacturer]; + man=self.JEDECmanufacturers.get(self.JEDECmanufacturer); if man==0: man="UNKNOWN"; - device=self.JEDECdevices[self.JEDECdevice]; + device=self.JEDECdevices.get(self.JEDECdevice); if device==0: device="???" return "%s %s" % (man,device); @@ -183,7 +216,7 @@ class GoodFET: 0xFF00:"CCmissing"}; def CCidentstr(self): ident=self.CCident(); - chip=self.CCversions[ident&0xFF00]; + chip=self.CCversions.get(ident&0xFF00); return "%s/r%02x" % (chip, ident&0xFF); def CCident(self): """Get a chipcon's ID.""" @@ -261,10 +294,11 @@ class GoodFET: self.writecmd(0x30,0x20,0,self.data); ident=self.CCidentstr(); print "Target identifies as %s." % ident; - print "Status: %s." % self.CCstatusstr(); + #print "Status: %s." % self.CCstatusstr(); self.CCreleasecpu(); self.CChaltcpu(); print "Status: %s." % self.CCstatusstr(); + def CCstop(self): """Stop debugging.""" self.writecmd(0x30,0x21,0,self.data);