self.serialport.flushOutput()
#Read and handle the initial command.
- client.readcmd();
- client.handlecmd();
-
time.sleep(1);
+ client.readcmd(); #Read the first command.
+ if(self.verb!=0x7F):
+ print "Verb is wrong. Incorrect firmware?";
+
+
def writecmd(self, app, verb, count, data):
+ """Write a command and some data to the GoodFET."""
self.serialport.write(chr(app));
self.serialport.write(chr(verb));
self.serialport.write(chr(count));
#print "count=%02x, len(data)=%04x" % (count,len(data));
- for d in data:
- self.serialport.write(chr(d));
+ if count!=0:
+ for d in data:
+ self.serialport.write(chr(d));
+ self.readcmd(); #Uncomment this later, to ensure a response.
def readcmd(self):
+ """Read a reply from the GoodFET."""
self.app=ord(self.serialport.read(1));
self.verb=ord(self.serialport.read(1));
self.count=ord(self.serialport.read(1));
if self.count>0:
self.data=self.serialport.read(self.count);
#print "%02x %02x %02x" % (self.app, self.verb, self.count);
- def handlemonitor(self):
- if self.verb==0x7E:
- print "Monitor: NOK";
- if self.verb==0x7F:
- print "Monitor: OK";
- def handlecmd(self):
- if self.app==0:
- #print "Monitor command."
- self.handlemonitor();
- else:
- print "Unknown application %02x." % self.app
+ #Monitor stuff
def peekbyte(self,address):
"""Read a byte of memory from the monitor."""
self.data=[address&0xff,address>>8];
self.writecmd(0,0x02,2,self.data);
- self.readcmd();
+ #self.readcmd();
return ord(self.data[0]);
def peekword(self,address):
"""Read a word of memory from the monitor."""
"""Set a byte of memory by the monitor."""
self.data=[address&0xff,address>>8,value];
self.writecmd(0,0x03,3,self.data);
- self.readcmd();
- #print "POKE returned %02x" % ord(self.data[0]);
return ord(self.data[0]);
def monitortest(self):
self.pokebyte(0x0021,1); #Light LED
print "Self-test complete.";
+
+ def spisetup(self):
+ """Moved the FET into the SPI application."""
+ print "Initializing SPI.";
+ self.writecmd(1,0x10,0,self.data); #SPI/SETUP
+ #self.readcmd();
+ def spitrans8(self,byte):
+ """Read and write 8 bits by SPI."""
+ self.data=[byte];
+ self.writecmd(1,0,1,self.data); #SPI exchange
+ #self.readcmd();
+
+ if self.app!=1 or self.verb!=0:
+ print "Error in SPI transaction; app=%02x, verb=%02x" % (self.app, self.verb);
+ return ord(self.data[0]);
client=Client();
client.serInit("/dev/ttyUSB0")
-
-
client.monitortest();
+client.spisetup();
+while 1:
+ print "%02x" % client.spitrans8(5);
+ time.sleep(0.1);