Support for the MSP430F23x0.
[goodfet] / client / GoodFETMSP430.py
index 884a47a..580534b 100644 (file)
@@ -45,8 +45,8 @@ class GoodFETMSP430(GoodFET):
     def MSP430peekblock(self,adr,blocks=1):
         """Grab a few block from an SPI Flash ROM.  Block size is unknown"""
         data=[adr&0xff, (adr&0xff00)>>8,
-                   (adr&0xff0000)>>16,(adr&0xff000000)>>24,
-                   blocks];
+              (adr&0xff0000)>>16,(adr&0xff000000)>>24,
+              blocks];
         
         self.writecmd(self.MSP430APP,0x02,5,data,blocks);
         return self.data;
@@ -116,6 +116,8 @@ class GoodFETMSP430(GoodFET):
         0xf213: "MSP430F21x1",
         0xf249: "MSP430F24x",
         0xf26f: "MSP430F261x",
+        0xf237: "MSP430F23x0",
+        
         
         #MSP430F1xx
         0xf16c: "MSP430F161x",
@@ -139,18 +141,39 @@ class GoodFETMSP430(GoodFET):
         """Test MSP430 JTAG.  Requires that a chip be attached."""
         if self.MSP430ident()==0xffff:
             print "Is anything connected?";
-        print "Testing RAM from 1c00 to 1d00.";
-        for a in range(0x1c00,0x1d00):
+        print "Testing RAM from 200 to 210.";
+        for a in range(0x200,0x210):
             self.MSP430poke(a,0);
             if(self.MSP430peek(a)!=0):
                 print "Fault at %06x" % a;
             self.MSP430poke(a,0xffff);
             if(self.MSP430peek(a)!=0xffff):
                 print "Fault at %06x" % a;
-        print "RAM Test Complete."
-        for a in range(1,5):
-            print "Identity %04x" % self.MSP430ident();
-            
+                
+        print "Testing identity consistency."
+        ident=self.MSP430ident();
+        for a in range(1,20):
+            ident2=self.MSP430ident();
+            if ident!=ident2:
+                print "Identity %04x!=%04x" % (ident,ident2);
+        
+        print "Testing flash erase."
+        self.MSP430masserase();
+        for a in range(0xffe0, 0xffff):
+            if self.MSP430peek(a)!=0xffff:
+                print "%04x unerased, equals %04x" % (
+                    a, self.MSP430peek(a));
+
+        print "Testing flash write."
+        for a in range(0xffe0, 0xffff):
+            self.MSP430pokeflash(a,0xbeef);
+            if self.MSP430peek(a)!=0xbeef:
+                print "%04x unset, equals %04x" % (
+                    a, self.MSP430peek(a));
+        
+        print "Tests complete, erasing."
+        self.MSP430masserase();
+        
     def MSP430flashtest(self):
         self.MSP430masserase();
         i=0x2500;
@@ -162,16 +185,7 @@ class GoodFETMSP430(GoodFET):
     def MSP430masserase(self):
         """Erase MSP430 flash memory."""
         self.writecmd(self.MSP430APP,0xE3,0,None);
-    def MSP430writeflash(self,adr,val):
-        """Write a word of flash memory."""
-        if(self.MSP430peek(adr)!=0xFFFF):
-            print "FLASH ERROR: %04x not clear." % adr;
-        data=[adr&0xFF,(adr&0xFF00)>>8,val&0xFF,(val&0xFF00)>>8];
-        self.writecmd(self.MSP430APP,0xE1,4,data);
-        rval=ord(self.data[0])+(ord(self.data[1])<<8);
-        if(val!=rval):
-            print "FLASH WRITE ERROR AT %04x.  Found %04x, wrote %04x." % (adr,rval,val);
-        
+    
     def MSP430dumpbsl(self):
         self.MSP430dumpmem(0xC00,0xfff);
     def MSP430dumpallmem(self):