# If we don't enable promiscous mode, we'll miss a lot of
# packets. It can be manually disabled later.
- self.poke8(0x60,0xFF); #TODO Does this have any unpleasant side effects?
+ #self.poke8(0x60,0xFF); #TODO Does this have any unpleasant side effects?
+ self.poke8(0x60,0x66); #Wanted FF, but some bits are reserved.
- #Set the default rate of 125kHz.
- self.MCPsetrate(125);
+ #Set the default rate.
+ self.MCPsetrate();
+
+ #Array of supported rates.
+ MCPrates=[83.3, 100, 125,
+ 250, 500, 1000];
def MCPsetrate(self,rate=125):
"""Sets the data rate in kHz."""
# );
- #These are the new examples.
+ print "Setting rate of %i kHz." % rate;
+ #These are the new examples.
if rate==125:
#125 kHz, 16 TQ, not quite as worked out above.
CNF1=0x04;
CNF2=0xB8;
CNF3=0x05;
- elif rate==500:
- #500 kHz, 20 TQ
- CNF1=0x00;
- CNF2=0xBA;
- CNF3=0x07;
- pass;
elif rate==100:
#100 kHz, 20 TQ
CNF1=0x04;
CNF2=0xBA;
CNF3=0x07;
- pass;
+ elif rate>83 and rate<83.5:
+ #83+1/3 kHz, 8 TQ
+ # 0.04% error from 83.30
+ CNF1=0x0E;
+ CNF2=0x90;
+ CNF3=0x02;
+ elif rate==250:
+ #256 kHz, 20 TQ
+ CNF1=0x01;
+ CNF2=0xBA;
+ CNF3=0x07;
+ elif rate==500:
+ #500 kHz, 20 TQ
+ CNF1=0x00;
+ CNF2=0xBA;
+ CNF3=0x07;
elif rate==1000:
#1,000 kHz, 10 TQ
CNF1=0x00;
CNF3=0x02;
print "WARNING: Because of chip errata, this probably won't work."
else:
- print "Given unsupported rate of %i kHz.";
+ print "Given unsupported rate of %i kHz." % rate;
print "Defaulting to 125kHz.";
CNF1=0x04;
CNF2=0xB8;
def poke8(self,adr,val):
"""Poke a value into RAM. Untested"""
self.SPItrans([0x02,adr&0xFF,val&0xFF]);
+ newval=self.peek8(adr);
+ if newval!=val:
+ print "Failed to poke %02x to %02x. Got %02x." % (adr,val,newval);
+ print "Are you not in idle mode?";
return val;