+# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
"""SPI Class for FTDI MPSSE"""
from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.pin import Pin
+from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.url import (
+ get_ft232h_url,
+ get_ft2232h_url,
+)
# pylint: disable=protected-access
class SPI:
MSB = 0
- def __init__(self, id=None):
+ def __init__(self, spi_id=None):
# pylint: disable=import-outside-toplevel
from pyftdi.spi import SpiController
# pylint: enable=import-outside-toplevel
self._spi = SpiController(cs_count=1)
- if id is None:
- self._spi.configure("ftdi://ftdi:ft232h/1", frequency=frequency)
- else
- self._spi.configure("ftdi://ftdi:ft2232h/{}".format(id+1), frequency=frequency)
+ if spi_id is None:
+ self._spi.configure(get_ft232h_url())
+ else:
+ self._spi.configure(get_ft2232h_url(spi_id + 1))
self._port = self._spi.get_port(0)
self._port.set_frequency(100000)
self._port._cpol = 0
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 :])
+ rest_start = start + chunks * self._spi.PAYLOAD_MAX_LENGTH
+ self._port.write(buf[rest_start:end])
# pylint: disable=unused-argument
def readinto(self, buf, start=0, end=None, write_value=0):
"""Read data from SPI and into the buffer"""
end = end if end else len(buf)
- result = self._port.read(end - start)
+ buffer_out = [write_value] * (end - start)
+ result = self._port.exchange(buffer_out, end - start, duplex=True)
for i, b in enumerate(result):
buf[start + i] = b