From: travisutk Date: Sun, 6 Feb 2011 02:20:07 +0000 (+0000) Subject: Cleaning up the Telos B port. X-Git-Url: http://git.rot13.org//?a=commitdiff_plain;ds=sidebyside;h=7e2e3f1a4091ba1ca11982f0ba2b09809e298d94;p=goodfet Cleaning up the Telos B port. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@891 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- diff --git a/client/GoodFETCCSPI.py b/client/GoodFETCCSPI.py index 48b219e..bbe2d17 100644 --- a/client/GoodFETCCSPI.py +++ b/client/GoodFETCCSPI.py @@ -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; diff --git a/client/goodfet.bsl b/client/goodfet.bsl index 02210c4..6c8ee50 100755 --- a/client/goodfet.bsl +++ b/client/goodfet.bsl @@ -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 index 0000000..50501c5 --- /dev/null +++ b/client/goodfet.ccspi @@ -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); + diff --git a/client/goodfet.rf b/client/goodfet.rf index eefc0e1..abb9241 100755 --- a/client/goodfet.rf +++ b/client/goodfet.rf @@ -45,6 +45,7 @@ if(verb=="carrier"): while(1): time.sleep(1); + client.stop();