Fixed the USB Mass Storage CBW in Facedancer. Was one byte short of the proper one...
[goodfet] / client / goodfet.mcpcan
1 #!/usr/bin/env python
2 # GoodFET SPI Flash Client
3 #
4 # (C) 2012 Travis Goodspeed <travis at radiantmachines.com>
5 #
6 # This code is being rewritten and refactored.  You've been warned!
7
8 import sys;
9 import binascii;
10 import array;
11
12 from GoodFETMCPCAN import GoodFETMCPCAN;
13 from intelhex import IntelHex;
14
15 if(len(sys.argv)==1):
16     print "Usage: %s verb [objects]\n" % sys.argv[0];
17     print "%s info" % sys.argv[0];
18     print "%s test" % sys.argv[0];
19     print "%s peek 0x$start [0x$stop]" % sys.argv[0];
20     #print "%s poke 0x$adr 0x$val" % sys.argv[0];
21
22     print "\n%s sniff" % sys.argv[0];
23     sys.exit();
24
25 #Initialize FET and set baud rate
26 client=GoodFETMCPCAN();
27 client.serInit()
28
29
30 client.MCPsetup();
31
32 #Dummy read.
33 #Might read as all ones if chip has a startup delay.
34
35 if(sys.argv[1]=="info"):
36     print "MCP2515 Info:\n\n";
37     
38     print "Mode: %s" % client.MCPcanstatstr();
39     print "Read Status: %02x" % client.MCPreadstatus();
40     print "Rx Status:   %02x" % client.MCPrxstatus();
41     print "Tx Errors:  %3d" % client.peek8(0x1c);
42     print "Rx Errors:  %3d" % client.peek8(0x1d);
43     print "RX Buffers:"
44     packet0=client.readrxbuffer(0);
45     packet1=client.readrxbuffer(1);
46     for foo in [packet0, packet1]:
47         print client.packet2str(foo);
48 if(sys.argv[1]=="sniff"):
49     client.MCPreqstatListenOnly();
50     while 1:
51         packet=client.rxpacket();
52         if packet!=None:
53             print client.packet2str(packet);
54
55 if(sys.argv[1]=="test"):
56     print "MCP2515 Self Test:";
57     
58     #Switch to config mode and try to rewrite TEC.
59     client.MCPreqstatConfiguration();
60     client.poke8(0x00,0xde);
61     if client.peek8(0x00)!=0xde:
62         print "ERROR: Poke to TEC failed.";
63     else:
64         print "SUCCESS: Register read/write.";
65     
66     #Switch to Loopback mode and try to catch our own packet.
67     client.MCPreqstatLoopback();
68     client.txpacket([0xb1, 0x6b, 0x00, 0x65,
69                      0xb1, 0x6b, 0x00, 0x65
70                      ]);
71     print "Waiting on loopback packet.";
72     packet=None;
73     while packet==None:
74         packet=client.rxpacket();
75     print "Success!  Got %s" % client.packet2str(packet);
76 if(sys.argv[1]=="peek"):
77     start=0x0000;
78     if(len(sys.argv)>2):
79         start=int(sys.argv[2],16);
80     stop=start;
81     if(len(sys.argv)>3):
82         stop=int(sys.argv[3],16);
83     print "Peeking from %04x to %04x." % (start,stop);
84     while start<=stop:
85         print "%04x: %02x" % (start,client.peek8(start));
86         start=start+1;