1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
3 # SPDX-License-Identifier: MIT
4 """SPI Classes for RP2040s with u2if firmware"""
5 from .rp2040_u2if import rp2040_u2if
7 # pylint: disable=protected-access, no-self-use
9 """SPI Base Class for RP2040 u2if"""
13 def __init__(self, index, *, baudrate=100000):
15 self._frequency = baudrate
16 rp2040_u2if.spi_set_port(self._index)
17 rp2040_u2if.spi_configure(self._frequency)
19 # pylint: disable=too-many-arguments,unused-argument
31 """Initialize the Port"""
32 self._frequency = baudrate
33 rp2040_u2if.spi_set_port(self._index)
34 rp2040_u2if.spi_configure(self._frequency)
36 # pylint: enable=too-many-arguments
40 """Return the current frequency"""
41 return self._frequency
43 def write(self, buf, start=0, end=None):
44 """Write data from the buffer to SPI"""
45 rp2040_u2if.spi_write(buf, start=start, end=end)
47 def readinto(self, buf, start=0, end=None, write_value=0):
48 """Read data from SPI and into the buffer"""
49 rp2040_u2if.spi_readinto(buf, start=start, end=end, write_value=write_value)
51 # pylint: disable=too-many-arguments
53 self, buffer_out, buffer_in, out_start=0, out_end=None, in_start=0, in_end=None
55 """Perform a half-duplex write from buffer_out and then
56 read data into buffer_in
58 rp2040_u2if.spi_write_readinto(
67 # pylint: enable=too-many-arguments
70 """SPI Class for Pico u2if"""
72 def __init__(self, clock, *, baudrate=100000):
79 raise ValueError("No SPI port on specified pin.")
80 super().__init__(index, baudrate=baudrate)
83 class SPI_Feather(SPI):
84 """SPI Class for Feather u2if"""
86 def __init__(self, clock, *, baudrate=100000):
91 raise ValueError("No SPI port on specified pin.")
92 super().__init__(index, baudrate=baudrate)
94 class SPI_Feather_CAN(SPI):
95 """SPI Class for Feather EPD u2if"""
97 def __init__(self, clock, *, baudrate=100000):
102 raise ValueError("No SPI port on specified pin.")
103 super().__init__(index, baudrate=baudrate)
105 class SPI_Feather_EPD(SPI):
106 """SPI Class for Feather EPD u2if"""
108 def __init__(self, clock, *, baudrate=100000):
115 raise ValueError("No SPI port on specified pin.")
116 super().__init__(index, baudrate=baudrate)
118 class SPI_Feather_RFM(SPI):
119 """SPI Class for Feather EPD u2if"""
121 def __init__(self, clock, *, baudrate=100000):
126 raise ValueError("No SPI port on specified pin.")
127 super().__init__(index, baudrate=baudrate)
130 """SPI Class for QT Py u2if"""
132 def __init__(self, clock, *, baudrate=100000):
137 raise ValueError("No SPI port on specified pin.")
138 super().__init__(index, baudrate=baudrate)
141 class SPI_ItsyBitsy(SPI):
142 """SPI Class for ItsyBitsy u2if"""
144 def __init__(self, clock, *, baudrate=100000):
149 raise ValueError("No SPI port on specified pin.")
150 super().__init__(index, baudrate=baudrate)
153 class SPI_MacroPad(SPI):
154 """SPI Class for MacroPad u2if"""
156 def __init__(self, clock, *, baudrate=100000):
161 raise ValueError("No SPI port on specified pin.")
162 super().__init__(index, baudrate=baudrate)