From 43f50970e78843e02cfa981005165ef0b64381a0 Mon Sep 17 00:00:00 2001 From: travisutk Date: Wed, 15 Aug 2012 22:20:13 +0000 Subject: [PATCH] goodfet.mcpcan client, code that nearly works for packet sniffing. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1229 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/GoodFETMCPCAN.py | 18 +++++++++++ client/goodfet.mcpcan | 70 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100755 client/goodfet.mcpcan diff --git a/client/GoodFETMCPCAN.py b/client/GoodFETMCPCAN.py index c00af14..0cbc090 100644 --- a/client/GoodFETMCPCAN.py +++ b/client/GoodFETMCPCAN.py @@ -59,6 +59,24 @@ class GoodFETMCPCAN(GoodFETSPI): 0x00, 0x00, 0x00, 0x00 ]); return data[1:len(data)]; + def rxpacket(self): + """Reads the next incoming packet from either buffer. + Returns None immediately if no packet is waiting.""" + status=self.MCPrxstatus()&0xC0; + if status&0x40: + #Buffer 0 has higher priority. + return self.rxbuffer(0); + elif status&0x80: + #Buffer 1 has lower priority. + return self.rxbuffer(1); + else: + return None; + def packet2str(self,packet): + """Converts a packet from the internal format to a string.""" + toprint=""; + for bar in packet: + toprint=toprint+("%02x "%ord(bar)) + return toprint; def peek8(self,adr): """Read a byte from the given address. Untested.""" data=self.SPItrans([0x03,adr&0xFF,00]); diff --git a/client/goodfet.mcpcan b/client/goodfet.mcpcan new file mode 100755 index 0000000..35fc1d4 --- /dev/null +++ b/client/goodfet.mcpcan @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# GoodFET SPI Flash Client +# +# (C) 2012 Travis Goodspeed +# +# This code is being rewritten and refactored. You've been warned! + +import sys; +import binascii; +import array; + +from GoodFETMCPCAN import GoodFETMCPCAN; +from intelhex import IntelHex; + +if(len(sys.argv)==1): + print "Usage: %s verb [objects]\n" % sys.argv[0]; + print "%s info" % sys.argv[0]; + print "%s test" % sys.argv[0]; + print "%s peek 0x$start [0x$stop]" % sys.argv[0]; + #print "%s poke 0x$adr 0x$val" % sys.argv[0]; + + print "\n%s sniff" % sys.argv[0]; + sys.exit(); + +#Initialize FET and set baud rate +client=GoodFETMCPCAN(); +client.serInit() + + +client.MCPsetup(); + +#Dummy read. +#Might read as all ones if chip has a startup delay. + +if(sys.argv[1]=="info"): + print "MCP2515 Info:"; + print "Read Status: %02x" % client.MCPreadstatus(); + print "Rx Status: %02x" % client.MCPrxstatus(); + print "Tx Errors: %3d" % client.peek8(0x1c); + print "Rx Errors: %3d" % client.peek8(0x1d); + print "RX Buffers:" + packet0=client.readrxbuffer(0); + packet1=client.readrxbuffer(1); + for foo in [packet0, packet1]: + print client.packet2str(foo); +if(sys.argv[1]=="sniff"): + while 1: + packet=client.rxpacket(); + if packet!=None: + print client.packet2str(packet); +if(sys.argv[1]=="test"): + print "MCP2515 Self Test:"; + + client.poke8(0x00,0xde); + if client.peek8(0x00)!=0xde: + print "ERROR: Poke to TEC failed."; + else: + print "SUCCESS: Register read/write."; + +if(sys.argv[1]=="peek"): + start=0x0000; + if(len(sys.argv)>2): + start=int(sys.argv[2],16); + stop=start; + if(len(sys.argv)>3): + stop=int(sys.argv[3],16); + print "Peeking from %04x to %04x." % (start,stop); + while start<=stop: + print "%04x: %02x" % (start,client.peek8(start)); + start=start+1; -- 2.20.1