2 # GoodFET SPI Flash Client
4 # (C) 2012 Travis Goodspeed <travis at radiantmachines.com>
6 # This code is being rewritten and refactored. You've been warned!
12 from GoodFETMCPCAN import GoodFETMCPCAN;
13 from intelhex import IntelHex;
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];
22 print "\n%s sniff [kHz]" % sys.argv[0];
23 print "\n%s isniff [kHz]" % sys.argv[0];
24 print "\nSupported rates: 83.3, 100, 125, 250, 500, 1000 kHz.";
27 #Initialize FET and set baud rate
28 client=GoodFETMCPCAN();
35 #Might read as all ones if chip has a startup delay.
37 if(sys.argv[1]=="info"):
38 print "MCP2515 Info:\n\n";
40 print "Mode: %s" % client.MCPcanstatstr();
41 print "Read Status: %02x" % client.MCPreadstatus();
42 print "Rx Status: %02x" % client.MCPrxstatus();
43 print "Tx Errors: %3d" % client.peek8(0x1c);
44 print "Rx Errors: %3d" % client.peek8(0x1d);
46 packet0=client.readrxbuffer(0);
47 packet1=client.readrxbuffer(1);
48 for foo in [packet0, packet1]:
49 print client.packet2str(foo);
51 if(sys.argv[1]=="sniff"):
53 rate=float(sys.argv[2]);
54 client.MCPsetrate(rate);
55 client.MCPreqstatListenOnly();
57 packet=client.rxpacket();
59 print client.packet2str(packet);
61 if(sys.argv[1]=="isniff"):
62 """ An intelligent sniffer, decodes message format """
63 """ More features to be added soon """
65 rate=float(sys.argv[2]);
66 client.MCPsetrate(rate);
67 client.MCPreqstatListenOnly();
69 packet=client.rxpacket();
78 print "\nArbID: " + client.packet2str(arbid);
79 print "EID: " + client.packet2str(eid);
80 print "DLC: " + client.packet2str(dlc);
81 print "Data: " + client.packet2str(data);
83 if(sys.argv[1]=="test"):
84 print "MCP2515 Self Test:";
86 #Switch to config mode and try to rewrite TEC.
87 client.MCPreqstatConfiguration();
88 client.poke8(0x00,0xde);
89 if client.peek8(0x00)!=0xde:
90 print "ERROR: Poke to TEC failed.";
92 print "SUCCESS: Register read/write.";
94 #Switch to Loopback mode and try to catch our own packet.
95 client.MCPreqstatLoopback();
96 client.txpacket([0xb1, 0x6b, 0x00, 0x65,
97 0xb1, 0x6b, 0x00, 0x65
99 print "Waiting on loopback packet.";
102 packet=client.rxpacket();
103 print "Success! Got %s" % client.packet2str(packet);
104 if(sys.argv[1]=="peek"):
107 start=int(sys.argv[2],16);
110 stop=int(sys.argv[3],16);
111 print "Peeking from %04x to %04x." % (start,stop);
113 print "%04x: %02x" % (start,client.peek8(start));