• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.. _module-pw_spi_rp2040:
2
3==============
4 pw_spi_rp2040
5==============
6.. pigweed-module::
7   :name: pw_spi_rp2040
8
9``pw_spi_rp2040`` implements the :ref:`module-pw_spi` interface using the
10`Raspberry Pi Pico SDK <https://github.com/raspberrypi/pico-sdk/>`_.
11
12The implementation is based on the SPI driver from the Pico SDK. SPI transfers
13use the blocking driver API which uses busy waiting under the hood.
14
15.. note::
16   There is currently no support for RP2040 hardware CSn
17   pins. :cpp:class:`pw::spi::DigitalOutChipSelector` is
18   used instead.
19
20Usage
21=====
22.. code-block:: cpp
23
24   #include "hardware/spi.h"
25   #include "pw_digital_io/polarity.h"
26   #include "pw_digital_io_rp2040/digital_io.h"
27   #include "pw_spi/chip_selector_digital_out.h"
28   #include "pw_spi/device.h"
29   #include "pw_sync/borrow.h"
30   #include "pw_sync/mutex.h"
31
32   constexpr pw::spi::Config kSpiConfig8Bit{
33       .polarity = pw::spi::ClockPolarity::kActiveHigh,
34       .phase = pw::spi::ClockPhase::kFallingEdge,
35       .bits_per_word = pw::spi::BitsPerWord(8),
36       .bit_order = pw::spi::BitOrder::kMsbFirst,
37   };
38
39   pw::digital_io::Rp2040DigitalInOut display_cs_pin({
40      .pin = 12,
41      .polarity = pw::digital_io::Polarity::kActiveLow,
42   });
43   DigitalOutChipSelector spi_chip_selector(display_cs_pin);
44
45   Rp2040Initiator spi_initiator(spi0);
46   VirtualMutex spi_initiator_mutex;
47   Borrowable<Initiator> borrowable_spi_initiator(spi_initiator,
48                                                  spi_initiator_mutex);
49   pw::spi::Device spi_8_bit(borrowable_spi_initiator,
50                             kSpiConfig8Bit,
51                             spi_chip_selector);
52