X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFET.py;h=99756ba832aeaae69cdbd26357b61b1b53378bc1;hp=297111ef8696c24a16412421febb7c60eb1afc0e;hb=f1d07ce6be7b2ec7cc637d491abd32371bd4dfb1;hpb=fb6e18b07a982eb5983f4598c5bfbb1ffaa267a7 diff --git a/client/GoodFET.py b/client/GoodFET.py index 297111e..99756ba 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -18,8 +18,9 @@ class GoodFET: """Open the serial port""" if port is None: - port=os.environ.get("GOODFET"); - + glob_list = glob.glob(os.environ.get("GOODFET")); + if len(glob_list) > 0: + port = glob_list[0]; if port is None: glob_list = glob.glob("/dev/tty.usbserial*"); if len(glob_list) > 0: @@ -150,6 +151,7 @@ class GoodFET: def SPIsetup(self): """Moved the FET into the SPI application.""" self.writecmd(0x01,0x10,0,self.data); #SPI/SETUP + def SPItrans8(self,byte): """Read and write 8 bits by SPI.""" @@ -177,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]; @@ -185,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): @@ -197,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): @@ -245,8 +252,23 @@ class GoodFET: print "Initializing MSP430."; self.writecmd(0x11,0x10,0,self.data); - - + def I2Csetup(self): + """Move the FET into the I2C application.""" + self.writecmd(0x02,0x10,0,self.data); #SPI/SETUP + def I2Cstart(self): + """Start an I2C transaction.""" + self.writecmd(0x02,0x20,0,self.data); #SPI/SETUP + def I2Cstop(self): + """Stop an I2C transaction.""" + self.writecmd(0x02,0x21,0,self.data); #SPI/SETUP + def I2Cread(self,len=1): + """Read len bytes by I2C.""" + self.writecmd(0x02,0x00,1,[len]); #SPI/SETUP + return self.data; + def I2Cwrite(self,bytes): + """Write bytes by I2C.""" + self.writecmd(0x02,0x01,len(bytes),bytes); #SPI/SETUP + return ord(self.data[0]); def CCsetup(self): """Move the FET into the CC2430/CC2530 application.""" #print "Initializing Chipcon.";