Glitch app is in progress, first support will be for AVR.
[goodfet] / client / goodfet.avr
1 #!/usr/bin/env python
2
3 import sys;
4 import binascii;
5
6 from GoodFETAVR import GoodFETAVR;
7 from intelhex import IntelHex16bit, IntelHex;
8
9 if(len(sys.argv)==1):
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" % sys.argv[0];
14     #print "%s dump $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];
19     sys.exit();
20
21 #Initialize FET and set baud rate
22 client=GoodFETAVR();
23 client.serInit()
24
25 #Connect to target
26 client.start();
27
28 if(sys.argv[1]=="glitch"):
29     print "Identifies as %s" % client.identstr();
30     for i in range(1,20):
31         client.start();
32         print "Identifies as %s, fused 0x%02x" % (
33             client.identstr(),
34             client.lockbits());
35
36 if(sys.argv[1]=="info"):
37     print "Identifies as %s" % client.identstr();
38 if(sys.argv[1]=="erase"):
39     print "Erasing %s" % client.identstr();
40     client.erase();
41 if(sys.argv[1]=="lockbits"):
42     print "Lockbits are 0x%02x" % client.lockbits();
43 #if(sys.argv[1]=="lock"):
44 #if(sys.argv[1]=="unlock"):
45     
46
47
48 if(sys.argv[1]=="dump"):
49     f = sys.argv[2];
50     start=0x0000;
51     stop=0xFFFF;
52     if(len(sys.argv)>3):
53         start=int(sys.argv[3],16);
54     if(len(sys.argv)>4):
55         stop=int(sys.argv[4],16);
56     
57     print "Dumping from %04x to %04x as %s." % (start,stop,f);
58     #h = IntelHex16bit(None);
59     h = IntelHex(None);
60     i=start;
61     while i<=stop:
62         data=client.flashpeekblock(i);
63         print "Dumped %06x."%i;
64         for j in data:
65             if i<=stop: h[i]=ord(j);
66             i+=1;
67     h.write_hex_file(f);
68
69
70 if(sys.argv[1]=="peekeeprom"):
71     start=0x0000;
72     if(len(sys.argv)>2):
73         start=int(sys.argv[2],16);
74     stop=start;
75     if(len(sys.argv)>3):
76         stop=int(sys.argv[3],16);
77     print "Peeking from %06x to %06x." % (start,stop);
78     while start<=stop:
79         print "%06x: %02x" % (start,client.eeprompeek(start));
80         start=start+1;
81 if(sys.argv[1]=="peekflash"):
82     start=0x0000;
83     if(len(sys.argv)>2):
84         start=int(sys.argv[2],16);
85     stop=start;
86     if(len(sys.argv)>3):
87         stop=int(sys.argv[3],16);
88     print "Peeking from %06x to %06x." % (start,stop);
89     while start<=stop:
90         print "%06x: %02x" % (start,client.flashpeek(start));
91         start=start+1;
92
93 if(sys.argv[1]=="pokeeeprom"):
94     start=0x0000;
95     val=0x00;
96     if(len(sys.argv)>2):
97         start=int(sys.argv[2],16);
98     if(len(sys.argv)>3):
99         val=int(sys.argv[3],16);
100     client.eeprompoke(start,val);
101
102