self._mode = mode #hack to get an initial value
self.set_pins(pinstate, pindir)
self.set_mode(mode)
+
+ #cs doesn't (shouldn't) change, cache the values for SPEED
+ self._cs_cmd_cache = {}
+ for dev in self.cs.keys():
+ self._cs_cmd_cache[dev] = self._cs_cmd(dev)
+
self.ftdi.usb_purge_buffers(self.context)
def _raw_write(self, data):
The device is used to select the desired CS pin state as cs_active =
self.cs[device].
"""
- cmd = (self._cs_cmd(device) + self._write_cmd(data) +
- self._cs_cmd('_idle'))
+ cmd = (self._cs_cmd_cache[device] +
+ self._write_cmd(data) +
+ self._cs_cmd_cache['_idle'])
self._raw_write(cmd)
def read(self, n, device):
"""Read data from the selected device, DO pin stays in its last
state.
"""
- cmd = (self._cs_cmd(device) + self._read_cmd(n) +
- self._cs_cmd('_idle'))
+ cmd = (self._cs_cmd_cache[device] + self._read_cmd(n) +
+ self._cs_cmd_cache['_idle'])
self._raw_write(cmd)
return self._raw_read(n)
the current SPI mode. The device is used to select the desired CS pin
state as cs_active = self.cs[device].
"""
- cmd = (self._cs_cmd(device) + self._exchange_cmd(data) +
- self._cs_cmd('_idle'))
+ cmd = (self._cs_cmd_cache[device] +
+ self._exchange_cmd(data) +
+ self._cs_cmd_cache['_idle'])
self._raw_write(cmd)
return self._raw_read(len(data))
return b
def send(self):
- self.bus.exchange(str(self), 'dac')
+ self.bus.write(str(self), 'dac')
#
# internal functions to help construct a command