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