X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETCC.py;h=ab9170be0caec3d4d6c2cb1bee11ecae8b70af31;hp=622dae0b595980ccdae8d05c1dad0bc6337db5d0;hb=cdcbe395eefac158b15a93aa5413cb810939d540;hpb=07318f32608e9dd4a6cfa0c47b0b03c18cc3c50e diff --git a/client/GoodFETCC.py b/client/GoodFETCC.py index 622dae0..ab9170b 100644 --- a/client/GoodFETCC.py +++ b/client/GoodFETCC.py @@ -24,15 +24,21 @@ class GoodFETCC(GoodFET): if self.smartrfpath==None: self.smartrfpath=os.environ.get("SMARTRF"); if self.smartrfpath==None and os.name=='nt': - self.smartrfpath="c:/Program Files/Texas Instruments/SmartRF Tools/SmartRF Studio 7"; + pf=os.environ['PROGRAMFILES']; + self.smartrfpath="%s\\\\Texas Instruments\\\\SmartRF Tools\\\\SmartRF Studio 7" % pf; + if self.smartrfpath==None: self.smartrfpath="/opt/smartrf7"; - + haveloadedsymbols=False; def loadsymbols(self): - try: self.SRF_loadsymbols(); + if self.haveloadedsymbols: + return; + try: + self.SRF_loadsymbols(); + self.haveloadedsymbols=True; except: - print "SmartRF not found at %s." % self.smartrfpath; + print "SmartRF not found for this chip.\nInstall it with wine and symlink to /opt/smartrf7 ."; def SRF_chipdom(self,chip="cc1110", doc="register_definition.xml"): """Loads the chip XML definitions from SmartRF7.""" fn="%s/config/xml/%s/%s" % (self.smartrfpath,chip,doc); @@ -206,13 +212,11 @@ class GoodFETCC(GoodFET): h=IntelHex(filename); for i in h._buf.keys(): self.CCpokedatabyte(i,h[i]); - #Execute it. self.CCdebuginstr([0x02, 0xf0, 0x00]); #ljmp 0xF000 self.resume(); while wait>0 and (0==self.CCstatus()&0x20): a=1; - #time.sleep(0.1); #print "Waiting for shell code to return."; return; def ishalted(self): @@ -714,7 +718,7 @@ class GoodFETCC(GoodFET): print "ERROR: PC changed during CCdebuginstr([NOP])!"; print "Checking pokes to XRAM." - for i in range(0xf000,0xf020): + for i in range(self.execbuf,self.execbuf+0x20): self.CCpokedatabyte(i,0xde); if(self.CCpeekdatabyte(i)!=0xde): print "Error in XDATA at 0x%04x" % i; @@ -725,7 +729,7 @@ class GoodFETCC(GoodFET): print "Done."; def setup(self): - """Move the FET into the CC2430/CC2530 application.""" + """Move the FET into the Chipcon 8051 application.""" #print "Initializing Chipcon."; self.writecmd(self.APP,0x10,0,self.data); def CCrd_config(self): @@ -743,17 +747,29 @@ class GoodFETCC(GoodFET): self.CClockchip(); - CCversions={0x0100:"cc1110", - 0x1100:"cc1111", - 0x8500:"cc2430", - 0x8900:"cc2431", - 0x8100:"cc2510", - 0x9100:"cc2511", - 0xA500:"cc2530", #page 57 of SWRU191B - 0xB500:"cc2531", + CCversions={0x0100:"CC1110", + 0x1100:"CC1111", + 0x8500:"CC2430", + 0x8900:"CC2431", + 0x8100:"CC2510", + 0x9100:"CC2511", + 0xA500:"CC2530", #page 57 of SWRU191B + 0xB500:"CC2531", 0x9500:"CC2533", 0x8D00:"CC2540", 0xFF00:"CCmissing"}; + execbuf=None; + CCexecbuf= {0x0100:0xF000, + 0x1100:0xF000, + 0x8500:0xF000, + 0x8900:0xF000, + 0x8100:0xF000, + 0x9100:0xF000, + 0xA500:0x0000, #CC2530 + 0xB500:0x8000, + 0x9500:0x8000, + 0x8D00:0x8000, + 0xFF00:None} #missing CCpagesizes={0x01: 1024, #"CC1110", 0x11: 1024, #"CC1111", 0x85: 2048, #"CC2430", @@ -764,13 +780,16 @@ class GoodFETCC(GoodFET): 0xB5: 2048, #"CC2531", 0x95: 2048, #"CC2533", 0x8D: 2048, #"CC2540", - 0xFF: 0 } #"CCmissing"}; + 0xFF: None} def infostring(self): return self.CCidentstr(); def CCidentstr(self): ident=self.CCident(); chip=self.CCversions.get(ident&0xFF00); + execbuf=self.CCexecbuf.get(ident&0xFF00); pagesize=self.CCpagesizes.get(ident>0xFF); + self.execbuf=execbuf; + try: return "%s/r%0.4x/ps0x%0.4x" % (chip, ident, pagesize); except: @@ -898,21 +917,17 @@ class GoodFETCC(GoodFET): return str; def start(self): """Start debugging.""" + ident=0x0000; + #while ident==0xFFFF or ident==0x0000: self.setup(); self.writecmd(self.APP,0x20,0,self.data); - ident=self.CCident(); - if ident==0xFFFF or ident==0x0000: - self.writecmd(self.APP,0x20,0,self.data); - ident=self.CCident(); - + identa=self.CCident(); + self.CCidentstr(); - #print "Target identifies as %s." % ident; - #print "Status: %s." % self.status(); - self.CCreleasecpu(); - self.CChaltcpu(); + ident=self.CCident(); #Get SmartRF Studio regs if they exist. self.loadsymbols(); - + #print "Status: %s" % self.status(); def stop(self): """Stop debugging.""" self.writecmd(self.APP,0x21,0,self.data);