JEDEC size detection.
[goodfet] / client / GoodFET.py
index 297111e..99756ba 100755 (executable)
@@ -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.";