X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETCC.py;h=83d0b9ffe86f82d597437a9fdcb1e4088f3322e5;hp=3f4d1d91e79391be62dfce970550484b267b9ae8;hb=a456d2fbf645904f642f714fa86766f195384d94;hpb=c9fa78dd91736cd5004d23fd9535c30be4f978ff diff --git a/client/GoodFETCC.py b/client/GoodFETCC.py index 3f4d1d9..83d0b9f 100644 --- a/client/GoodFETCC.py +++ b/client/GoodFETCC.py @@ -13,6 +13,8 @@ from intelhex import IntelHex; 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); @@ -47,10 +49,15 @@ class GoodFETCC(GoodFET): 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): @@ -67,6 +74,9 @@ class GoodFETCC(GoodFET): 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", @@ -77,6 +87,15 @@ class GoodFETCC(GoodFET): 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); @@ -87,12 +106,28 @@ class GoodFETCC(GoodFET): 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]); @@ -132,6 +167,10 @@ class GoodFETCC(GoodFET): 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); @@ -167,7 +206,7 @@ class GoodFETCC(GoodFET): """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();