More glitching changes for MSP430.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Sun, 3 Apr 2011 20:13:22 +0000 (20:13 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Sun, 3 Apr 2011 20:13:22 +0000 (20:13 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@983 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

client/GoodFET.py
client/GoodFETGlitch.py
client/GoodFETMSP430.py

index 353d937..a602b1e 100755 (executable)
@@ -414,7 +414,7 @@ class GoodFET:
     def getsecret(self):
         """Get a secret word.  Used by glitcher."""
         #self.eeprompeek(0);
     def getsecret(self):
         """Get a secret word.  Used by glitcher."""
         #self.eeprompeek(0);
-        print "Secret setting is not yet suppored for this target.";
+        print "Secret getting is not yet suppored for this target.";
         print "Aborting.";
         sys.exit();
     
         print "Aborting.";
         sys.exit();
     
index 52ce187..e596d4e 100644 (file)
@@ -220,18 +220,24 @@ class GoodFETGlitch(GoodFET):
         client.erase();
         print "Scanning %s" % client.infostring();
         
         client.erase();
         print "Scanning %s" % client.infostring();
         
-        self.secret=0x49;
+        #Kind of arbitrary.
+        #16 bit minimum.
+        self.secret=0xdead;
+        
+        
+        print "-- Setting secret";
+        client.start();
+        
+        #Flash the secret, to try and recover it later.
+        client.erase();
+        print "-- Secret was %02x" % client.getsecret();
+        client.setsecret(self.secret);
+        print "-- Secret set to %02x" % client.getsecret();
+        sys.stdout.flush()
+        if(client.getsecret()!=self.secret):
+            print "Secret failed to set.  Exiting for safety.";
+            sys.exit();
         
         
-        while(client.getsecret()!=self.secret):
-            print "-- Setting secret";
-            client.start();
-            
-            #Flash the secret to the first two bytes of CODE memory.
-            client.erase();
-            print "-- Secret was %02x" % client.getsecret();
-            client.setsecret(self.secret);
-            sys.stdout.flush()
-            
         #Lock chip to unlock it later.
         if lock>0:
             client.lock();
         #Lock chip to unlock it later.
         if lock>0:
             client.lock();
index df6f20e..fc8e99b 100644 (file)
@@ -42,10 +42,13 @@ class GoodFETMSP430(GoodFET):
         return DeviceID;
     def peek16(self,adr,memory="vn"):
         return self.MSP430peek(adr);
         return DeviceID;
     def peek16(self,adr,memory="vn"):
         return self.MSP430peek(adr);
+    def peek(self,adr,memory="vn"):
+        return self.MSP430peek(adr);
     def peek8(self,adr, memory="vn"):
         adr=self.MSP430peek(adr&~1);
         if adr&1==0: return adr&0xFF;
         else: return adr>>8;
     def peek8(self,adr, memory="vn"):
         adr=self.MSP430peek(adr&~1);
         if adr&1==0: return adr&0xFF;
         else: return adr>>8;
+
     def MSP430peek(self,adr):
         """Read a word at an address."""
         self.data=[adr&0xff, (adr&0xff00)>>8,
     def MSP430peek(self,adr):
         """Read a word at an address."""
         self.data=[adr&0xff, (adr&0xff00)>>8,
@@ -79,6 +82,12 @@ class GoodFETMSP430(GoodFET):
                    val&0xff, (val&0xff00)>>8];
         self.writecmd(self.MSP430APP,0xE1,6,self.data);
         return ord(self.data[0])+(ord(self.data[1])<<8);
                    val&0xff, (val&0xff00)>>8];
         self.writecmd(self.MSP430APP,0xE1,6,self.data);
         return ord(self.data[0])+(ord(self.data[1])<<8);
+    def setsecret(self,value):
+        """Set a secret word for later retreival.  Used by glitcher."""
+        self.MSP430pokeflash(0xFFFE,value);
+    def getsecret(self):
+        """Get a secret word.  Used by glitcher."""
+        return self.peek(0xfffe);
     def MSP430pokeflashblock(self,adr,data):
         """Write many words to flash memory at an address."""
         self.data=[adr&0xff, (adr&0xff00)>>8,
     def MSP430pokeflashblock(self,adr,data):
         """Write many words to flash memory at an address."""
         self.data=[adr&0xff, (adr&0xff00)>>8,