9745a5a174bcb5ef20ab63779b6bf3305359f890
[goodfet] / client / goodfet.msp430
1 #!/usr/bin/env python
2
3 import sys;
4 import binascii;
5
6 from GoodFETMSP430 import GoodFETMSP430;
7 from intelhex import IntelHex16bit, IntelHex;
8
9
10
11 if(len(sys.argv)==1):
12     print "Usage: %s verb [objects]\n" % sys.argv[0];
13     print "%s test" % 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     sys.exit();
19
20 #Initialize FET and set baud rate
21 client=GoodFETMSP430();
22 client.serInit()
23
24 #Connect to target
25 client.MSP430setup();
26 #print "setup"
27
28 #Identify model number.
29 client.MSP430start();
30 #print "started"
31
32 if(sys.argv[1]=="info"):
33     #print "Model    %08x " % client.MSP430deviceid();
34     #print "Core     %04x " % client.MSP430coreid();
35     #print "Identity %04x" % client.MSP430ident();
36     print "Identifies as %s (%04x)" % (
37         client.MSP430identstr(),
38         client.MSP430ident());
39 if(sys.argv[1]=="test"):
40     client.MSP430test();
41 if(sys.argv[1]=="dump"):
42     f = sys.argv[2];
43     start=0x0200;
44     stop=0xFFFF;
45     if(len(sys.argv)>3):
46         start=int(sys.argv[3],16);
47     if(len(sys.argv)>4):
48         stop=int(sys.argv[4],16);
49     
50     print "Dumping from %04x to %04x as %s." % (start,stop,f);
51     #h = IntelHex16bit(None);
52     h = IntelHex(None);
53     i=start;
54     while i<=stop:
55         data=client.MSP430peekblock(i,0x20);
56         print "Dumped %06x."%i;
57         for j in data:
58             if i<=stop: h[i]=ord(j);
59             i+=1;
60     h.write_hex_file(f);
61 if(sys.argv[1]=="erase"):
62     client.MSP430masserase();
63 if(sys.argv[1]=="ivt"):
64     client.MSP430dumpmem(0xFFE0,0xFFFF);
65 if(sys.argv[1]=="flash"):
66     f=sys.argv[2];
67     start=0;
68     stop=0xFFFF;
69     if(len(sys.argv)>3):
70         start=int(sys.argv[3],16);
71     if(len(sys.argv)>4):
72         stop=int(sys.argv[4],16);
73     
74     h = IntelHex16bit(f);
75     
76     client.MSP430masserase();
77     for i in h._buf.keys():
78         #print "%04x: %04x"%(i,h[i>>1]);
79         if(i>=start and i<stop  and i&1==0):
80             client.MSP430writeflash(i,h[i>>1]);
81             if(i%0x100==0):
82                 print "%04x" % i;
83 if(sys.argv[1]=="flashtest"):
84     client.MSP430flashtest();
85 if(sys.argv[1]=="verify"):
86     f=sys.argv[2];
87     start=0;
88     stop=0xFFFF;
89     if(len(sys.argv)>3):
90         start=int(sys.argv[3],16);
91     if(len(sys.argv)>4):
92         stop=int(sys.argv[4],16);
93     
94     h = IntelHex16bit(f);
95     for i in h._buf.keys():
96         if(i>=start and i<stop and i&1==0):
97             peek=client.MSP430peek(i)
98             if(h[i>>1]!=peek):
99                 print "ERROR at %04x, found %04x not %04x"%(i,peek,h[i>>1]);
100             if(i%0x100==0):
101                 print "%04x" % i;
102 if(sys.argv[1]=="peek"):
103     start=0x0000;
104     if(len(sys.argv)>2):
105         start=int(sys.argv[2],16);
106     stop=start;
107     if(len(sys.argv)>3):
108         stop=int(sys.argv[3],16);
109     print "Peeking from %04x to %04x." % (start,stop);
110     while start<=stop:
111         print "%04x: %04x" % (start,client.MSP430peek(start));
112         start=start+2;
113
114 if(sys.argv[1]=="poke"):
115     start=0x0000;
116     val=0x00;
117     if(len(sys.argv)>2):
118         start=int(sys.argv[2],16);
119     if(len(sys.argv)>3):
120         val=int(sys.argv[3],16);
121     print "Poking %06x to become %04x." % (start,val);
122     
123     while client.MSP430peek(start)!=val:
124         client.MSP430pokeflash(start,val);
125         print "Poked to %04x" % client.MSP430peek(start);
126
127
128
129 if(sys.argv[1]=="whatever"):
130     for i in [0x24FF, 0x2500, 0x2502, 0x2504]:
131         print "%04x" % client.MSP430peek(i);
132
133 client.MSP430releasecpu();
134 client.MSP430stop();