X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/a8662a122f5985fc07bac4046d450dcb5e1854f6..75639a87c5f96157babb936208cb7c19404d2638:/src/adafruit_blinka/microcontroller/nova/spi.py diff --git a/src/adafruit_blinka/microcontroller/nova/spi.py b/src/adafruit_blinka/microcontroller/nova/spi.py new file mode 100644 index 0000000..7882f23 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/nova/spi.py @@ -0,0 +1,49 @@ +from adafruit_blinka.microcontroller.nova.pin import Pin + +class SPI: + MSB = 0 + + def __init__(self): + from pyftdi.spi import SpiController + self._spi = SpiController(cs_count=1) + self._spi.configure('ftdi:///1') + self._port = self._spi.get_port(0) + self._port.set_frequency(100000) + self._port._cpol = 0 + self._port._cpha = 0 + # Change GPIO controller to SPI + Pin.ft232h_gpio = self._spi.get_gpio() + + def init(self, baudrate=100000, polarity=0, phase=0, bits=8, + firstbit=MSB, sck=None, mosi=None, miso=None): + self._port.set_frequency(baudrate) + self._port._cpol = polarity + self._port._cpha = phase + + @property + def frequency(self): + return self._port.frequency + + def write(self, buf, start=0, end=None): + end = end if end else len(buf) + chunks, rest = divmod(end - start, self._spi.PAYLOAD_MAX_LENGTH) + for i in range(chunks): + chunk_start = start + i * self._spi.PAYLOAD_MAX_LENGTH + chunk_end = chunk_start + self._spi.PAYLOAD_MAX_LENGTH + self._port.write(buf[chunk_start:chunk_end]) + if rest: + self._port.write(buf[-1*rest:]) + + def readinto(self, buf, start=0, end=None, write_value=0): + end = end if end else len(buf) + result = self._port.read(end-start) + for i, b in enumerate(result): + buf[start+i] = b + + def write_readinto(self, buffer_out, buffer_in, out_start=0, out_end=None, in_start=0, in_end=None): + out_end = out_end if out_end else len(buffer_out) + in_end = in_end if in_end else len(buffer_in) + result = self._port.exchange(buffer_out[out_start:out_end], + in_end-in_start, duplex=True) + for i, b in enumerate(result): + buffer_in[in_start+i] = b