class GoodFETCC(GoodFET):
"""A GoodFET variant for use with Chipcon 8051 Zigbeema SoC."""
+ APP=0x30;
+
def CChaltcpu(self):
"""Halt the CPU."""
self.writecmd(0x30,0x86,0,self.data);
if(pc!=self.CCgetPC()):
print "ERROR: PC changed during CCdebuginstr([NOP])!";
+ print "Checking pokes to XRAM."
+ for i in range(0xf000,0xf020):
+ self.CCpokedatabyte(i,0xde);
+ if(self.CCpeekdatabyte(i)!=0xde):
+ print "Error in XDATA at 0x%04x" % i;
#print "Status: %s." % self.CCstatusstr();
#Exit debugger
- self.CCstop();
+ self.stop();
print "Done.";
def setup(self):
def CClockchip(self):
"""Set the flash lock bit in info mem."""
self.writecmd(0x30, 0x9A, 0, None);
+ def lock(self):
+ """Set the flash lock bit in info mem."""
+ self.CClockchip();
CCversions={0x0100:"CC1110",
0xA500:"CC2530", #page 52 of SWRU191
0xB500:"CC2531",
0xFF00:"CCmissing"};
+ CCpagesizes={0x01: 1024, #"CC1110",
+ 0x85: 2048, #"CC2430",
+ 0x89: 2048, #"CC2431",
+ 0x81: 1024, #"CC2510",
+ 0x91: 1024, #"CC2511",
+ 0xA5: 2048, #"CC2530", #page 52 of SWRU191
+ 0xB5: 2048, #"CC2531",
+ 0xFF: 0 } #"CCmissing"};
+
def CCidentstr(self):
ident=self.CCident();
chip=self.CCversions.get(ident&0xFF00);
chip=ord(self.data[0]);
rev=ord(self.data[1]);
return (chip<<8)+rev;
+ def CCpagesize(self):
+ """Get a chipcon's ID."""
+ self.writecmd(0x30,0x8B,0,None);
+ chip=ord(self.data[0]);
+ size=self.CCpagesizes.get(chip);
+ if(size<10):
+ print "ERROR: Pagesize undefined.";
+ print "chip=%02x" %chip;
+ sys.exit(1);
+ #return 2048;
+ return size;
def CCgetPC(self):
"""Get a chipcon's PC."""
self.writecmd(0x30,0x83,0,None);
hi=ord(self.data[0]);
lo=ord(self.data[1]);
return (hi<<8)+lo;
+ def CCcmd(self,phrase):
+ self.writecmd(0x30,0x00,len(phrase),phrase);
+ val=ord(self.data[0]);
+ print "Got %02x" % val;
+ return val;
def CCdebuginstr(self,instr):
self.writecmd(0x30,0x88,len(instr),instr);
return ord(self.data[0]);
def CCchiperase(self):
"""Erase all of the target's memory."""
self.writecmd(0x30,0x80,0,None);
+ def erase(self):
+ """Erase all of the target's memory."""
+ self.CCchiperase();
+
def CCstatus(self):
"""Check the status."""
self.writecmd(0x30,0x84,0,None);
"""Start debugging."""
self.writecmd(0x30,0x20,0,self.data);
ident=self.CCidentstr();
- print "Target identifies as %s." % ident;
+ #print "Target identifies as %s." % ident;
#print "Status: %s." % self.CCstatusstr();
self.CCreleasecpu();
self.CChaltcpu();