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
8 # pylint: disable=protected-access, no-self-use
10 """SPI Base Class for RP2040 u2if"""
14 def __init__(self, index, *, baudrate=100000):
16 self._frequency = baudrate
17 rp2040_u2if.spi_set_port(self._index)
18 rp2040_u2if.spi_configure(self._frequency)
20 # pylint: disable=too-many-arguments,unused-argument
32 """Initialize the Port"""
33 self._frequency = baudrate
34 rp2040_u2if.spi_set_port(self._index)
35 rp2040_u2if.spi_configure(self._frequency)
37 # pylint: enable=too-many-arguments
41 """Return the current frequency"""
42 return self._frequency
44 def write(self, buf, start=0, end=None):
45 """Write data from the buffer to SPI"""
46 rp2040_u2if.spi_write(buf, start=start, end=end)
48 def readinto(self, buf, start=0, end=None, write_value=0):
49 """Read data from SPI and into the buffer"""
50 rp2040_u2if.spi_readinto(buf, start=start, end=end, write_value=write_value)
52 # pylint: disable=too-many-arguments
54 self, buffer_out, buffer_in, out_start=0, out_end=None, in_start=0, in_end=None
56 """Perform a half-duplex write from buffer_out and then
57 read data into buffer_in
59 rp2040_u2if.spi_write_readinto(
68 # pylint: enable=too-many-arguments
72 """SPI Class for Pico u2if"""
74 def __init__(self, clock, *, baudrate=100000):
81 raise ValueError("No SPI port on specified pin.")
82 super().__init__(index, baudrate=baudrate)
85 class SPI_Feather(SPI):
86 """SPI Class for Feather u2if"""
88 def __init__(self, clock, *, baudrate=100000):
93 raise ValueError("No SPI port on specified pin.")
94 super().__init__(index, baudrate=baudrate)
97 class SPI_Feather_CAN(SPI):
98 """SPI Class for Feather EPD u2if"""
100 def __init__(self, clock, *, baudrate=100000):
105 raise ValueError("No SPI port on specified pin.")
106 super().__init__(index, baudrate=baudrate)
109 class SPI_Feather_EPD(SPI):
110 """SPI Class for Feather EPD u2if"""
112 def __init__(self, clock, *, baudrate=100000):
119 raise ValueError("No SPI port on specified pin.")
120 super().__init__(index, baudrate=baudrate)
123 class SPI_Feather_RFM(SPI):
124 """SPI Class for Feather EPD u2if"""
126 def __init__(self, clock, *, baudrate=100000):
131 raise ValueError("No SPI port on specified pin.")
132 super().__init__(index, baudrate=baudrate)
136 """SPI Class for QT Py u2if"""
138 def __init__(self, clock, *, baudrate=100000):
143 raise ValueError("No SPI port on specified pin.")
144 super().__init__(index, baudrate=baudrate)
147 class SPI_ItsyBitsy(SPI):
148 """SPI Class for ItsyBitsy u2if"""
150 def __init__(self, clock, *, baudrate=100000):
155 raise ValueError("No SPI port on specified pin.")
156 super().__init__(index, baudrate=baudrate)
159 class SPI_MacroPad(SPI):
160 """SPI Class for MacroPad u2if"""
162 def __init__(self, clock, *, baudrate=100000):
167 raise ValueError("No SPI port on specified pin.")
168 super().__init__(index, baudrate=baudrate)
171 class SPI_KB2040(SPI):
172 """SPI Class for KB2040 u2if"""
174 def __init__(self, clock, *, baudrate=100000):
179 raise ValueError("No SPI port on specified pin.")
180 super().__init__(index, baudrate=baudrate)
183 class SPI_Radxa_X4(SPI):
184 """SPI Class for Radxa X4 u2if"""
186 def __init__(self, clock, *, baudrate=100000):
193 raise ValueError("No SPI port on specified pin.")
194 super().__init__(index, baudrate=baudrate)