Cleaning up the Telos B port.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Sun, 6 Feb 2011 02:20:07 +0000 (02:20 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Sun, 6 Feb 2011 02:20:07 +0000 (02:20 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@891 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

client/GoodFETCCSPI.py
client/goodfet.bsl
client/goodfet.ccspi [new file with mode: 0755]
client/goodfet.rf

index 48b219e..bbe2d17 100644 (file)
@@ -10,33 +10,36 @@ import sys, time, string, cStringIO, struct, glob, serial, os;
 from GoodFET import GoodFET;
 
 class GoodFETCCSPI(GoodFET):
-    CCSPIAPP=0x50;
-    def CCSPIsetup(self):
+    CCSPIAPP=0x51;
+    def setup(self):
         """Move the FET into the CCSPI application."""
         self.writecmd(self.CCSPIAPP,0x10,0,self.data); #CCSPI/SETUP
         
-    def CCSPItrans8(self,byte):
+    def trans8(self,byte):
         """Read and write 8 bits by CCSPI."""
         data=self.CCSPItrans([byte]);
         return ord(data[0]);
     
-    def CCSPItrans(self,data):
+    def trans(self,data):
         """Exchange data by CCSPI."""
         self.data=data;
         self.writecmd(self.CCSPIAPP,0x00,len(data),data);
         return self.data;
-    
-    def peek(self,reg,bytes=-1):
+    def strobe(self,reg=0x00):
+        """Strobes a strobe register, returning the status."""
+        data=[reg];
+        self.trans(data);
+        return ord(self.data[0]);
+    def peek(self,reg,bytes=2):
         """Read a CCSPI Register.  For long regs, result is flipped."""
-        data=[reg,0,0,0,0,0];
+        data=[reg,0,0];
         
         #Automatically calibrate the len.
-        if bytes==-1:
-            bytes=1;
-            if reg==0x0a or reg==0x0b or reg==0x10: bytes=5;
+        bytes=2;
         
         self.writecmd(self.CCSPIAPP,0x02,len(data),data);
         toret=0;
+        #print "Status: %02x" % ord(self.data[0]);
         for i in range(0,bytes):
             toret=toret|(ord(self.data[i+1])<<(8*i));
         return toret;
@@ -54,13 +57,13 @@ class GoodFETCCSPI(GoodFET):
         self.writecmd(self.CCSPIAPP,0x03,len(data),data);
         if self.peek(reg,bytes)!=val and reg!=0x07:
             print "Warning, failed to set r%02x=%02x, got %02x." %(reg,
-                                                                 val,
-                                                                 self.peek(reg,bytes));
+                                                                   val,
+                                                                   self.peek(reg,bytes));
         return;
     
     def status(self):
         """Read the status byte."""
-        status=self.peek(0x07);
+        status=self.strobe(0x00);
         print "Status=%02x" % status;
     
     #Radio stuff begins here.
@@ -95,69 +98,40 @@ class GoodFETCCSPI(GoodFET):
     def RF_setfreq(self,frequency):
         """Set the frequency in Hz."""
         
-        #On the CCSPI24L01+, register 0x05 is the offset in
-        #MHz above 2400.
-        
-        chan=frequency/1000000-2400;
-        self.poke(0x05,chan);
+        print "TODO write the setfreq() function.";
     def RF_getfreq(self):
         """Get the frequency in Hz."""
-        
-        #On the CCSPI24L01+, register 0x05 is the offset in
-        #MHz above 2400.
-        
-        return (2400+self.peek(0x05))*10**6
-        self.poke(0x05,chan);
+        print "TODO write the getfreq() function.";
+        return 0;
     def RF_getsmac(self):
         """Return the source MAC address."""
         
-        #Register 0A is RX_ADDR_P0, five bytes.
-        mac=self.peek(0x0A, 5);
-        return mac;
+        return 0xdeadbeef;
     def RF_setsmac(self,mac):
         """Set the source MAC address."""
-        
-        #Register 0A is RX_ADDR_P0, five bytes.
-        self.poke(0x0A, mac, 5);
-        return mac;
+        return 0xdeadbeef;
     def RF_gettmac(self):
         """Return the target MAC address."""
-        
-        #Register 0x10 is TX_ADDR, five bytes.
-        mac=self.peek(0x10, 5);
-        return mac;
+        return 0xdeadbeef;
     def RF_settmac(self,mac):
         """Set the target MAC address."""
-        
-        #Register 0x10 is TX_ADDR, five bytes.
-        self.poke(0x10, mac, 5);
-        return mac;
+        return 0xdeadbeef;
 
     def RF_rxpacket(self):
         """Get a packet from the radio.  Returns None if none is waiting."""
-        if self.peek(0x07) & 0x40:
-            #Packet has arrived.
-            self.writecmd(self.CCSPIAPP,0x80,0,None); #RX Packet
-            data=self.data;
-            self.poke(0x07,0x40);#clear bit.
-            return data;
-        elif self.peek(0x07)==0:
-            self.writecmd(self.CCSPIAPP,0x82,0,None); #Flush
-            self.poke(0x07,0x40);#clear bit.
+        print "Don't know how to get a packet.";
         return None;
     def RF_carrier(self):
         """Hold a carrier wave on the present frequency."""
-        # Set CONT_WAVE, PLL_LOCK, and 0dBm in RF_SETUP            
-        self.poke(0x06,8+10+4+2); 
-        
+        print "Don't know how to hold a carrier.";
     packetlen=16;
     def RF_setpacketlen(self,len=16):
         """Set the number of bytes in the expected payload."""
-        self.poke(0x11,len);
+        #self.poke(0x11,len);
         self.packetlen=len;
     def RF_getpacketlen(self):
         """Set the number of bytes in the expected payload."""
-        len=self.peek(0x11);
+        #len=self.peek(0x11);
         self.packetlen=len;
         return len;
     maclen=5;
index 02210c4..6c8ee50 100755 (executable)
@@ -1428,7 +1428,8 @@ def main(itest=1):
              "swap-reset-test", "telos-latch", "telos-i2c", "telos", "telosb",
              "tmote","no-BSL-download", "force-BSL-download", "slow",
              "dumpivt", "dumpinfo", "fromweb",
-             "goodfet30", "goodfet20", "goodfet10"
+             "goodfet40", "goodfet30", "goodfet20", "goodfet10",
+             "nhbadge", "nhbadgeb", "goodfet"
             ]
         )
     except getopt.GetoptError:
@@ -1578,6 +1579,15 @@ def main(itest=1):
         elif o in ("--goodfet30", ):
             bsl.invertRST = 1
             bsl.invertTEST = 0
+        elif o in ("--goodfet40", ):
+            bsl.invertRST = 1
+            bsl.invertTEST = 1
+        elif o in ("--goodfet", ):
+            bsl.invertRST = 1
+            bsl.invertTEST = 1
+        elif o in ("--nhbadge", "--nhbadgeb" ):
+            bsl.invertRST = 1
+            bsl.invertTEST = 1
         elif o in ("--telosb", ):
             bsl.swapRSTTEST = 1
             bsl.telosI2C = 1
diff --git a/client/goodfet.ccspi b/client/goodfet.ccspi
new file mode 100755 (executable)
index 0000000..50501c5
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+
+#GoodFET Chipcon SPI Client
+# (C) 2011 Travis Goodspeed
+
+#N.B.,
+#Might be CC2420 Specific
+
+import sys;
+import binascii;
+import array;
+
+from GoodFETCCSPI import GoodFETCCSPI;
+
+if(len(sys.argv)==1):
+    print "Usage: %s verb [objects]\n" % sys.argv[0];
+    print "%s regs" % sys.argv[0];
+    print "%s test" % sys.argv[0];
+    print "%s peek 0x$start [0x$stop]" % sys.argv[0];
+    print "%s poke 0x$adr 0x$val" % sys.argv[0];
+    sys.exit();
+
+#Initialize FET and set baud rate
+client=GoodFETCCSPI();
+client.serInit()
+
+
+client.setup();
+
+#Dummy read.
+#Might read as all ones if chip has a startup delay.
+
+if(sys.argv[1]=="info"):
+    print "Status is %02x" % client.strobe(0x00);
+if(sys.argv[1]=="regs"):
+    for adr in range(0x10,0x40): #*1024):
+        val=client.peek(adr);
+        print "%04x:=%02x" % (adr,val);
+if(sys.argv[1]=="test"):
+    data=client.trans([0x20, 0xde, 0xad]);
+    print "%02x %02x" % (ord(data[1]), ord(data[2]));
+    data=client.trans([0x40|0x20, 0xde, 0xad]);
+    print "%02x %02x" % (ord(data[1]), ord(data[2]));
+    
+if(sys.argv[1]=="peek"):
+    start=0x0000;
+    if(len(sys.argv)>2):
+        start=int(sys.argv[2],16);
+    stop=start;
+    if(len(sys.argv)>3):
+        stop=int(sys.argv[3],16);
+    print "Peeking from %04x to %04x." % (start,stop);
+    while start<=stop:
+        print "%04x: %02x" % (start,client.peek(start));
+        start=start+1;
+if(sys.argv[1]=="poke"):
+    start=0x0000;
+    val=0x00;
+    if(len(sys.argv)>2):
+        start=int(sys.argv[2],16);
+    if(len(sys.argv)>3):
+        val=int(sys.argv[3],16);
+    print "Poking %02x to become %010x." % (start,val);
+    
+    client.poke(start,val);
+
index eefc0e1..abb9241 100755 (executable)
@@ -45,6 +45,7 @@ if(verb=="carrier"):
     while(1):
         time.sleep(1);
 
+
 client.stop();