6 from GoodFETAVR import GoodFETAVR;
7 from intelhex import IntelHex16bit, IntelHex;
10 print "Usage: %s verb [objects]\n" % sys.argv[0];
11 print "%s test" % sys.argv[0];
12 print "%s info" % sys.argv[0];
13 print "%s lockbits [value]" % sys.argv[0];
14 print "%s dumpflash $foo.hex [0x$start 0x$stop]" % sys.argv[0];
15 print "%s erase" % sys.argv[0];
16 #print "%s flash $foo.hex [0x$start 0x$stop]" % sys.argv[0];
17 #print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0];
18 print "%s peekeeprom 0x$start [0x$stop]" % sys.argv[0];
21 #Initialize FET and set baud rate
28 if(sys.argv[1]=="glitch"):
29 print "Identifies as %s" % client.identstr();
30 client.glitchVoltages(0x880, 0xfff);
31 for i in range(1,2000):
33 print "Identifies as %s, fused 0x%02x; eeprom(0)=%02x" % (
36 client.eeprompeek(0));
37 if(sys.argv[1]=="glitchgraph"):
38 print "Identifies as %s" % client.identstr();
39 for voltage in range(0x860,0x890,5):
42 #five minutes for 1,80
43 #thirty minutes for 1,500
46 client.glitchVoltages(voltage, voltage);
48 if(client.lockbits()==0xFF):
51 print "%04x %s" % (voltage,str);
52 #print "%f, %i" % (voltage*(3.3/4096.0),count);
53 if(sys.argv[1]=="info"):
54 print "Identifies as %s, lock=%02x" % (client.identstr(),client.lockbits());
55 if(sys.argv[1]=="erase"):
56 print "Erasing %s" % client.identstr();
58 if(sys.argv[1]=="lockbits"):
59 print "Lockbits are 0x%02x" % client.lockbits();
61 print "Lockbits set 0x%02x" % client.setlockbits(int(sys.argv[2],16));
62 if(sys.argv[1]=="lock"):
63 client.setlockbits(0xFC);
65 if(sys.argv[1]=="unlock"):
66 print "Identifies as %s" % client.identstr();
67 client.glitchVoltages(0x880, 0xfff);
70 print "Identifies as %s, fused 0x%02x; eeprom(0)=%02x" % (
73 client.eeprompeek(0));
74 if(client.lockbits()==0xFF):
75 client.setlockbits(0xFF);
76 print "Chip unlocked!"
78 #if(sys.argv[1]=="unlock"):
82 if(sys.argv[1]=="dumpflash"):
87 start=int(sys.argv[3],16);
89 stop=int(sys.argv[4],16);
91 print "Dumping from %04x to %04x as %s." % (start,stop,f);
92 #h = IntelHex16bit(None);
96 data=client.flashpeekblock(i);
97 print "Dumped %06x."%i;
99 if i<=stop: h[i]=ord(j);
104 if(sys.argv[1]=="peekeeprom"):
107 start=int(sys.argv[2],16);
110 stop=int(sys.argv[3],16);
111 print "Peeking from %06x to %06x." % (start,stop);
113 print "%06x: %02x" % (start,client.eeprompeek(start));
116 if(sys.argv[1]=="peekflash"):
119 start=int(sys.argv[2],16);
122 stop=int(sys.argv[3],16);
123 print "Peeking from %06x to %06x." % (start,stop);
125 print "%06x: %02x" % (start,client.flashpeek(start));
128 if(sys.argv[1]=="pokeeeprom"):
132 start=int(sys.argv[2],16);
134 val=int(sys.argv[3],16);
135 client.eeprompoke(start,val);