added new mcpCAN communication file to allow for easier testing and data storage.
[goodfet] / client / goodfet.em260
1 #!/usr/bin/env python
2
3 #GoodFET SPI Flash Client
4 #by Travis Goodspeed
5
6 # Pinout:
7 #  1 MISO
8 #  2 VCC
9 #  3 MOSI
10 #  4
11 #  5 !SS
12 #  6
13 #  7 CLK
14 #  8 !HOST_INT
15 #  9 GND
16 # 11 !WAKE
17
18 import sys;
19 import binascii;
20 import array;
21
22 from GoodFETEM260 import GoodFETEM260;
23 from intelhex import IntelHex;
24
25 if(len(sys.argv)==1):
26     print "Usage: %s verb [objects]\n" % sys.argv[0];
27     print "%s info" % sys.argv[0];
28     print "%s test" % sys.argv[0];
29     print "%s randtest" % sys.argv[0];
30     #print "%s dump $foo.rom [0x$start 0x$stop]" % sys.argv[0];
31     #print "%s erase" % sys.argv[0];
32     #print "%s flash $foo.rom [0x$start 0x$stop]" % sys.argv[0];
33     #print "%s verify $foo.rom [0x$start 0x$stop]" % sys.argv[0];
34     print "%s peek 0x$start [0x$stop]" % sys.argv[0];
35     print "%s poke 0x$adr 0x$val" % sys.argv[0];
36     sys.exit();
37
38 #Initialize FET and set baud rate
39 client=GoodFETEM260();
40 client.serInit()
41 #client.verbose=1;
42
43 client.SPIsetup();
44
45 #Dummy read.
46 #Might read as all ones if chip has a startup delay.
47 client.EM260spiversion();
48
49 if(sys.argv[1]=="info"):
50     client.info();
51 if(sys.argv[1]=="test"):
52     print "Grabbing info three times."
53     client.info();
54     client.info();
55     client.info();
56     
57     print "Some random numbers from EZSP."
58     for foo in range(0,4):
59         print "%04x" % client.rand16();
60 if(sys.argv[1]=="randtest"):
61     print "Even Odd HEven LEven Hodd Lodd "
62     max=2**33;
63     foo=0;
64     while foo<max:
65         even=client.rand16();
66         odd=client.rand16();
67         print "%8i %8i %8i %8i %8i %8i" % (
68             even,
69             odd,
70             even>>8,
71             even&0xFF,
72             odd>>8,
73             odd&0xFF);
74         sys.stdout.flush()
75         foo=foo+1;
76
77 if(sys.argv[1]=="dump"):
78     f = sys.argv[2];
79     start=0x0000;
80     stop=4*1024;
81     if(len(sys.argv)>3):
82         start=int(sys.argv[3],16);
83     if(len(sys.argv)>4):
84         stop=int(sys.argv[4],16);
85     
86     print "Dumping from %04x to %04x as %s." % (start,stop,f);
87     h = IntelHex(None);
88     i=start;
89     while i<=stop:
90         data=client.peek8(i);
91         print "Dumped %04x=%02x."%(i,data);
92         h[i]=data;
93         i+=1;
94     h.write_hex_file(f);
95
96 if(sys.argv[1]=="peek"):
97     start=0x0000;
98     if(len(sys.argv)>2):
99         start=int(sys.argv[2],16);
100     stop=start;
101     if(len(sys.argv)>3):
102         stop=int(sys.argv[3],16);
103     print "Peeking from %04x to %04x." % (start,stop);
104     while start<=stop:
105         print "%04x: %02x" % (start,client.peek8(start));
106         start=start+1;
107 if(sys.argv[1]=="poke"):
108     start=0x0000;
109     if(len(sys.argv)>2):
110         start=int(sys.argv[2],16);
111     val=0xde;
112     if(len(sys.argv)>3):
113         val=int(sys.argv[3],16);
114     print "Poking %02x to be %02x." % (start,val);
115     client.poke8(start,val);
116