Interactive debugger, or parts of one.
[goodfet] / client / GoodFETCC.py
index 69ef8b9..894db94 100644 (file)
@@ -13,13 +13,15 @@ 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);
     def CCreleasecpu(self):
         """Resume the CPU."""
         self.writecmd(0x30,0x87,0,self.data);
-    def CCtest(self):
+    def test(self):
         self.CCreleasecpu();
         self.CChaltcpu();
         #print "Status: %s" % self.CCstatusstr();
@@ -72,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",
@@ -83,14 +88,15 @@ class GoodFETCC(GoodFET):
                 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"};
-
+                 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 infostring(self):
+        return self.CCidentstr();
     def CCidentstr(self):
         ident=self.CCident();
         chip=self.CCversions.get(ident&0xFF00);
@@ -105,8 +111,13 @@ class GoodFETCC(GoodFET):
         """Get a chipcon's ID."""
         self.writecmd(0x30,0x8B,0,None);
         chip=ord(self.data[0]);
-        
-        return self.CCpagesizes.get(chip);
+        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);
@@ -121,6 +132,9 @@ class GoodFETCC(GoodFET):
     def CCdebuginstr(self,instr):
         self.writecmd(0x30,0x88,len(instr),instr);
         return ord(self.data[0]);
+    def peek8(self,address, memory="vn"):
+        return self.CCpeekcodebyte(address);
+
     def CCpeekcodebyte(self,adr):
         """Read the contents of code memory at an address."""
         self.data=[adr&0xff, (adr&0xff00)>>8];
@@ -157,6 +171,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);
@@ -178,7 +196,7 @@ class GoodFETCC(GoodFET):
                   0x01 : "sel_flash_info_page" #stricken from CC2530
                   };
                   
-    def CCstatusstr(self):
+    def status(self):
         """Check the status as a string."""
         status=self.CCstatus();
         str="";
@@ -192,11 +210,11 @@ class GoodFETCC(GoodFET):
         """Start debugging."""
         self.writecmd(0x30,0x20,0,self.data);
         ident=self.CCidentstr();
-        print "Target identifies as %s." % ident;
-        #print "Status: %s." % self.CCstatusstr();
+        #print "Target identifies as %s." % ident;
+        #print "Status: %s." % self.status();
         self.CCreleasecpu();
         self.CChaltcpu();
-        #print "Status: %s." % self.CCstatusstr();
+        #print "Status: %s." % self.status();
         
     def stop(self):
         """Stop debugging."""