self.client=0;
def setup(self,arch="avr"):
self.client=getClient(arch);
- self.client.serInit();
+ self.client.serInit(); #No timeout
def glitchvoltages(self,time):
"""Returns list of voltages to train at."""
min=r[0];
max=r[1];
if(min==None or max==None): return [];
-
+
spread=max-min;
return range(min,max,1);
#If we get here, there are no points. Return empty set.
print "%i %i %i %i %i" % r;
def npoints(self):
c=self.db.cursor();
- c.execute("select time,vcc,gnd,glitchcount,count from glitches where lock=0 and count=0;");
+ c.execute("select time,vcc,gnd,glitchcount,count from glitches where lock=0 and glitchcount>0;");
print "time vcc gnd glitchcount count";
for r in c:
print "%i %i %i %i %i" % r;
self.scanat(1,trials,vcc,gnd,t);
def learn(self):
"""Learning phase. Finds thresholds at which the chip screws up."""
- trials=1;
+ trials=30;
lock=0; #1 locks, 0 unlocked
vstart=0;
- vstop=1024; #Could be as high as 0xFFF, but upper range is useless
+ vstop=200; #Could be as high as 0xFFF, but upper range is useless
vstep=1;
tstart=0;
tstop=self.client.glitchstarttime();
tstep=0x1; #Must be 1
self.scan(lock,trials,range(vstart,vstop),range(tstart,tstop));
- print "Learning phase complete, beginning to expore.";
+ print "Learning phase complete, beginning to crunch.";
+ self.crunch();
+ print "Crunch phase complete, beginning to explore.";
self.explore();
def scansetup(self,lock):
client=self.client;
+ client.verbose=0;
client.start();
client.erase();
+ print "Scanning %s" % client.infostring();
- self.secret=0x69;
+ self.secret=0x49;
while(client.getsecret()!=self.secret):
print "-- Setting secret";
#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();
#random.shuffle(times);
for vcc in voltages:
- if lock<0 and not self.vccexplored(vcc):
+ if not self.vccexplored(vcc):
print "Exploring vcc=%i" % vcc;
sys.stdout.flush();
for time in times: