RNG test.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Thu, 8 Jul 2010 17:50:31 +0000 (17:50 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Thu, 8 Jul 2010 17:50:31 +0000 (17:50 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@670 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

client/GoodFETEM260.py
client/goodfet.em260

index 93d1bcb..0fedd58 100644 (file)
@@ -23,40 +23,68 @@ from GoodFETSPI import GoodFETSPI;
 class GoodFETEM260(GoodFETSPI):
     EM260APP=0x01;
     seq=0;
 class GoodFETEM260(GoodFETSPI):
     EM260APP=0x01;
     seq=0;
-    def EM260trans(self,data):
+    def EM260trans(self,data,retry=1):
         """Exchange data by EM260 SPI. (Slightly nonstandard.)"""
         """Exchange data by EM260 SPI. (Slightly nonstandard.)"""
-        self.data=data;
+        
+        if retry==0:
+            #Retries exceeded.  Send a trivial command to clear error.
+            data=[0x0A,0xA7];
         self.writecmd(0x01,0x82,len(data),data);
         
         self.writecmd(0x01,0x82,len(data),data);
         
+        
         try:
             reply=ord(self.data[0]);
             if(reply==0x00):
         try:
             reply=ord(self.data[0]);
             if(reply==0x00):
-                print "Warning: EM260 rebooted.";
-                return self.EM260trans(data);
+                #print "Warning: EM260 rebooted.";
+                return self.EM260trans(data,retry-1);
             if(reply==0x02):
             if(reply==0x02):
-                print "Error: Aborted Transaction.";
-                #return self.EM260trans(data);
+                #print "Error: Aborted Transaction.";
+                return self.EM260trans(data,retry-1);
             if(reply==0x03):
                 print "Error: Missing Frame Terminator.";
             if(reply==0x03):
                 print "Error: Missing Frame Terminator.";
-                #return self.data;
+                return self.data;
+            if(reply==0x04):
+                print "Error: Reserved Error.  (Access denied?)";
+                return self.data;
         except:
             print "Error in EM260trans.";
         return self.data;
     
         except:
             print "Error in EM260trans.";
         return self.data;
     
-    
+    def EZSPtrans(self,frame):
+        """Send an EZSP frame."""
+        data=self.EM260trans([0xFE,len(frame)+2,
+                              self.seq,0x00,
+                              ]+frame+[
+                              0xA7]);
+        #s="";
+        #for foo in data:
+        #    s=s+"%02x " % ord(foo);
+        #print s;
+        if ord(data[0])!=0xFE:
+            print "EZSP error: 0x%02x" % ord(data[0]);
+        if frame[0]!=ord(data[4]):
+            print "EZSP warning: Command 0x%02x returned type 0x%02x." % (
+                frame[0],ord(data[4]));
+        self.seq=self.seq+1;
+        return data;
+        #return ord(data[0]);
+        
     def peek8(self,adr):
         """Read a byte from the given address."""
     def peek8(self,adr):
         """Read a byte from the given address."""
-        data=self.EM260trans([0xfe,0x01,self.seq,0x00,
-                            0x49,
-                            0xA7]);
-        s="";
-        for foo in data:
-            s=s+"%02x " % ord(foo);
-        print s;
+        
+        data=self.EZSPtrans([0x47,adr&0xFF]);
         
         return ord(data[0]);
         
         return ord(data[0]);
+    
+    def rand16(self):
+        """Read a byte from the given address."""
+        
+        data=self.EZSPtrans([0x49]);
+        return ord(data[6])+(ord(data[7])<<8);
+    
     def info(self):
         """Read the info bytes."""
     def info(self):
         """Read the info bytes."""
+        print "Ember EM26 Z-Stack SPI Module.";
         version=self.EM260spiversion();
         status=self.EM260spistatus();
         print "Version: %i" % (version); 
         version=self.EM260spiversion();
         status=self.EM260spistatus();
         print "Version: %i" % (version); 
index bc9454e..3ec661a 100755 (executable)
@@ -33,6 +33,7 @@ client.SPIsetup();
 
 #Dummy read.
 #Might read as all ones if chip has a startup delay.
 
 #Dummy read.
 #Might read as all ones if chip has a startup delay.
+client.EM260spiversion();
 
 if(sys.argv[1]=="info"):
        client.info();
 
 if(sys.argv[1]=="info"):
        client.info();
@@ -41,6 +42,11 @@ if(sys.argv[1]=="test"):
        client.info();
        client.info();
        client.info();
        client.info();
        client.info();
        client.info();
+       
+       print "Some random numbers from EZSP."
+       for foo in range(0,4):
+           print "%04x" % client.rand16();
+
 if(sys.argv[1]=="dump"):
     f = sys.argv[2];
     start=0x0000;
 if(sys.argv[1]=="dump"):
     f = sys.argv[2];
     start=0x0000;