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();
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 MSP430peek(self,adr):
"""Read a word at an address."""
self.data=[adr&0xff, (adr&0xff00)>>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,