EM260spiversion() is stabilized.
[goodfet] / client / GoodFETEM260.py
index edee5b2..b41d76f 100644 (file)
@@ -22,25 +22,62 @@ from GoodFETSPI import GoodFETSPI;
 
 class GoodFETEM260(GoodFETSPI):
     EM260APP=0x01;
+    seq=0;
+    def EM260trans(self,data):
+        """Exchange data by EM260 SPI. (Slightly nonstandard.)"""
+        self.data=data;
+        self.writecmd(0x01,0x82,len(data),data);
+        
+        try:
+            reply=ord(self.data[0]);
+            if(reply==0x00):
+                print "Warning: EM260 rebooted.";
+                return self.EM260trans(data);
+            if(reply==0x02):
+                print "Error: Aborted Transaction.";
+                #return self.EM260trans(data);
+            if(reply==0x03):
+                print "Error: Missing Frame Terminator.";
+                #return self.data;
+        except:
+            print "Error in EM260trans.";
+        return self.data;
+    
+    
     def peek8(self,adr):
         """Read a byte from the given address."""
-        data=self.SPItrans([0xfe,0x01,0x00,
+        data=self.EM260trans([0xfe,0x01,self.seq,0x00,
                             0x49,
-                            0xA7,0,0,0,0,0,0,0,0]);
-        return ord(data[7]);
-    def poke8(self,adr, byte):
-        """Poke a byte to the given address."""
+                            0xA7]);
+        s="";
+        for foo in data:
+            s=s+"%02x " % ord(foo);
+        print s;
+        
+        return ord(data[0]);
     def info(self):
         """Read the info bytes."""
-        data=self.SPItrans([0x0B,0xA7,
-                            0xFF,
-                            0xFF,0xFF,0xFF,     #00 02 A7
-                            0,0,0,0,0,0,0,0,0,0,
-                            0,0,0,0,0,0,0,0,0,0,
-                            0,0,0,0,0,0,0,0,0,0,
-                            0,0,0,0,0,0,0,0,0,0,
-                            0,0,0,0,0,0,0,0,0,0,
-                            0,0,0,0,0,0,0,0,0,0
-                            ]); 
+        version=self.EM260spiversion();
+        print "Version %2i" % (version &0x7F); 
+    def EM260spiversion(self):
+        """Read the SPI version number from EM260."""
+        data=self.EM260trans([0x0A,0xA7]);        
+        version=ord(data[0]);
+        
+        if version==0x00:
+            return self.EM260spiversion();
+        if version==0x02:
+            return self.EM260spiversion();
+        if not version&0x80:
+            print "Version misread.";
+            return 0;
+        return version;
+    
+    def EM260spistatus(self):
+        """Read the info bytes."""
+        data=self.EM260trans([0x0B,0xA7]);        
+        s="";
         for foo in data:
-            print "%02x" % ord(foo);
+            s=s+"%02x " % ord(foo);
+        print s;
+