]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/pico_u2if/spi.py
7ce2158116ac1314ddb3bdf2c5cc602d5324dc6f
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / pico_u2if / spi.py
1 """SPI Class for Pico u2if"""
2 from .pico_u2if import pico_u2if
3
4 # pylint: disable=protected-access
5 class SPI:
6     """Custom SPI Class for Pico u2if"""
7
8     MSB = 0
9
10     def __init__(self, clock, *, baudrate=100000):
11         index = None
12         if clock.id == 18:
13             index = 0
14         if clock.id == 10:
15             index = 1
16         if index is None:
17             raise ValueError("No SPI port on specified pin.")
18         self._index = index
19         self._frequency = baudrate
20         pico_u2if.spi_set_port(self._index)
21         pico_u2if.spi_configure(self._frequency)
22
23     # pylint: disable=too-many-arguments,unused-argument
24     def init(
25         self,
26         baudrate=1000000,
27         polarity=0,
28         phase=0,
29         bits=8,
30         firstbit=MSB,
31         sck=None,
32         mosi=None,
33         miso=None,
34     ):
35         """Initialize the Port"""
36         self._frequency = baudrate
37         pico_u2if.spi_set_port(self._index)
38         pico_u2if.spi_configure(self._frequency)
39
40     # pylint: enable=too-many-arguments
41
42     @property
43     def frequency(self):
44         """Return the current frequency"""
45         return self._frequency
46
47     def write(self, buf, start=0, end=None):
48         """Write data from the buffer to SPI"""
49         pico_u2if.spi_write(buf, start=start, end=end)
50
51     def readinto(self, buf, start=0, end=None, write_value=0):
52         """Read data from SPI and into the buffer"""
53         pico_u2if.spi_readinto(buf, start=start, end=end, write_value=write_value)
54
55     # pylint: disable=too-many-arguments
56     def write_readinto(
57         self, buffer_out, buffer_in, out_start=0, out_end=None, in_start=0, in_end=None
58     ):
59         """Perform a half-duplex write from buffer_out and then
60         read data into buffer_in
61         """
62         pico_u2if.spi_write_readinto(
63             buffer_out,
64             buffer_in,
65             out_start=out_start,
66             out_end=out_end,
67             in_start=in_start,
68             in_end=in_end,
69         )
70
71     # pylint: enable=too-many-arguments