Standardizing Chipcon interface, bringing it into line with the NRF code.
[goodfet] / client / goodfet.monitor
1 #!/usr/bin/env python
2
3 import sys;
4 import binascii;
5
6 from GoodFET import GoodFET;
7 from intelhex import IntelHex16bit;
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 dump $foo.hex [0x$start 0x$stop]" % sys.argv[0];
13     print "%s ivt" % sys.argv[0];
14     print "%s peek [0x$start 0x$stop]" % sys.argv[0];
15     print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0];
16     print "%s ramfill" % sys.argv[0];
17     print "%s ramdepth" % sys.argv[0];
18     print "%s info" % sys.argv[0];
19     print "%s call 0x$start" % sys.argv[0];
20     print "%s exec '0x35 0x00 0x..'" % sys.argv[0];
21     sys.exit();
22
23 #Initialize FET and set baud rate
24 client=GoodFET();
25 client.serInit()
26 #client.verbose=1;
27
28 if(sys.argv[1]=="on"):
29     client.dir(0xFF);
30     client.out(0xFF);
31 if(sys.argv[1]=="off"):
32     client.out(0x00);
33
34 if(sys.argv[1]=="glitchtest"):
35     client.writecmd(client.GLITCHAPP,0x20,0,None);
36
37 if(sys.argv[1]=="call"):
38     adr=int(sys.argv[2],16);
39     print "Calling %04x" % adr;
40     client.call(adr);
41 if(sys.argv[1]=="exec"):
42     code="";
43     for foo in sys.argv[2].split(" "):
44         code+=chr(int(foo,16));
45     code+="\x30\x41";
46     client.execute(code);
47     
48 if(sys.argv[1]=="info"):
49     print "GoodFET with %s MCU" % client.infostring();
50     print "Clocked at %s" % client.monitorclocking();
51 if(sys.argv[1]=="clocktest"):
52     print "GoodFET with %s MCU" % client.infostring();
53     clocking=client.monitorgetclock();
54     print "Clocked at 0x%04x" % clocking;
55     for foo in range(1,50):
56         client.monitorsetclock(clocking+foo);
57         print "+0x%04x: %s" % (foo,client.infostring());
58         client.monitorsetclock(clocking-foo);
59         print "-0x%04x: %s" % (foo,client.infostring());
60         
61     
62 if(sys.argv[1]=="ramfill"):
63     client.monitor_ram_pattern();
64 if(sys.argv[1]=="ramdepth"):
65     print "0x%04x RAM bytes free." % client.monitor_ram_depth();
66 if(sys.argv[1]=="test"):
67     client.monitortest();
68 if(sys.argv[1]=="findbaud"):
69     client.findbaud();
70 if(sys.argv[1]=="dump"):
71     f = sys.argv[2];
72     start=0x0200;
73     stop=0xFFFF;
74     if(len(sys.argv)>3):
75         start=int(sys.argv[3],16);
76     if(len(sys.argv)>4):
77         stop=int(sys.argv[4],16);
78     
79     print "Dumping from %04x to %04x as %s." % (start,stop,f);
80     h = IntelHex16bit(None);
81     i=start;
82     while i<stop:
83         h[i>>1]=client.peekword(i);
84         if(i%0x100==0):
85             print "Dumped %04x."%i;
86         i+=2;
87     h.write_hex_file(f);
88 if(sys.argv[1]=="erase"):
89     client.masserase();
90 if(sys.argv[1]=="ivt"):
91     client.dumpmem(0xFFE0,0xFFFF);
92
93 if(sys.argv[1]=="peek"):
94     start=0xFFE0;
95     stop=0xFFFF;
96     if(len(sys.argv)>2):
97         start=int(sys.argv[2],16);
98         stop=start+1
99     if(len(sys.argv)>3):
100         stop=int(sys.argv[3],16);
101     
102     client.dumpmem(start,stop);
103 if(sys.argv[1]=="verify"):
104     f=sys.argv[2];
105     start=0;
106     stop=0xFFFF;
107     if(len(sys.argv)>3):
108         start=int(sys.argv[3],16);
109     if(len(sys.argv)>4):
110         stop=int(sys.argv[4],16);
111     
112     h = IntelHex16bit(f);
113     for i in h._buf.keys():
114         if(i>=start and i<stop and i&1==0):
115             peek=client.peek(i)
116             if(h[i>>1]!=peek):
117                 print "ERROR at %04x, found %04x not %04x"%(i,peek,h[i>>1]);
118             if(i%0x100==0):
119                 print "%04x" % i;
120
121 if(sys.argv[1]=="whatever"):
122     for i in [0x24FF, 0x2500, 0x2502, 0x2504]:
123         print "%04x" % client.peekword(i);
124