xref: /aosp_15_r20/external/pigweed/pw_spi_rp2040/docs.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_spi_rp2040:
2*61c4878aSAndroid Build Coastguard Worker
3*61c4878aSAndroid Build Coastguard Worker==============
4*61c4878aSAndroid Build Coastguard Worker pw_spi_rp2040
5*61c4878aSAndroid Build Coastguard Worker==============
6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module::
7*61c4878aSAndroid Build Coastguard Worker   :name: pw_spi_rp2040
8*61c4878aSAndroid Build Coastguard Worker
9*61c4878aSAndroid Build Coastguard Worker``pw_spi_rp2040`` implements the :ref:`module-pw_spi` interface using the
10*61c4878aSAndroid Build Coastguard Worker`Raspberry Pi Pico SDK <https://github.com/raspberrypi/pico-sdk/>`_.
11*61c4878aSAndroid Build Coastguard Worker
12*61c4878aSAndroid Build Coastguard WorkerThe implementation is based on the SPI driver from the Pico SDK. SPI transfers
13*61c4878aSAndroid Build Coastguard Workeruse the blocking driver API which uses busy waiting under the hood.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard WorkerThe PicoSDK's ``spi_init()`` must be called before using the initiator in order
16*61c4878aSAndroid Build Coastguard Workerto enable the SPI peripheral and set its bus speed.
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Worker.. note::
19*61c4878aSAndroid Build Coastguard Worker   There is currently no support for RP2040 hardware CSn
20*61c4878aSAndroid Build Coastguard Worker   pins. :cpp:class:`pw::spi::DigitalOutChipSelector` is
21*61c4878aSAndroid Build Coastguard Worker   used instead.
22*61c4878aSAndroid Build Coastguard Worker
23*61c4878aSAndroid Build Coastguard WorkerUsage
24*61c4878aSAndroid Build Coastguard Worker=====
25*61c4878aSAndroid Build Coastguard Worker.. code-block:: cpp
26*61c4878aSAndroid Build Coastguard Worker
27*61c4878aSAndroid Build Coastguard Worker   #include "hardware/spi.h"
28*61c4878aSAndroid Build Coastguard Worker   #include "pw_digital_io/polarity.h"
29*61c4878aSAndroid Build Coastguard Worker   #include "pw_digital_io_rp2040/digital_io.h"
30*61c4878aSAndroid Build Coastguard Worker   #include "pw_spi/chip_selector_digital_out.h"
31*61c4878aSAndroid Build Coastguard Worker   #include "pw_spi/device.h"
32*61c4878aSAndroid Build Coastguard Worker   #include "pw_sync/borrow.h"
33*61c4878aSAndroid Build Coastguard Worker   #include "pw_sync/mutex.h"
34*61c4878aSAndroid Build Coastguard Worker
35*61c4878aSAndroid Build Coastguard Worker   constexpr pw::spi::Config kSpiConfig8Bit{
36*61c4878aSAndroid Build Coastguard Worker       .polarity = pw::spi::ClockPolarity::kActiveHigh,
37*61c4878aSAndroid Build Coastguard Worker       .phase = pw::spi::ClockPhase::kFallingEdge,
38*61c4878aSAndroid Build Coastguard Worker       .bits_per_word = pw::spi::BitsPerWord(8),
39*61c4878aSAndroid Build Coastguard Worker       .bit_order = pw::spi::BitOrder::kMsbFirst,
40*61c4878aSAndroid Build Coastguard Worker   };
41*61c4878aSAndroid Build Coastguard Worker
42*61c4878aSAndroid Build Coastguard Worker   pw::digital_io::Rp2040DigitalInOut display_cs_pin({
43*61c4878aSAndroid Build Coastguard Worker      .pin = 12,
44*61c4878aSAndroid Build Coastguard Worker      .polarity = pw::digital_io::Polarity::kActiveLow,
45*61c4878aSAndroid Build Coastguard Worker   });
46*61c4878aSAndroid Build Coastguard Worker   DigitalOutChipSelector spi_chip_selector(display_cs_pin);
47*61c4878aSAndroid Build Coastguard Worker
48*61c4878aSAndroid Build Coastguard Worker   Rp2040Initiator spi_initiator(spi0);
49*61c4878aSAndroid Build Coastguard Worker   VirtualMutex spi_initiator_mutex;
50*61c4878aSAndroid Build Coastguard Worker   Borrowable<Initiator> borrowable_spi_initiator(spi_initiator,
51*61c4878aSAndroid Build Coastguard Worker                                                  spi_initiator_mutex);
52*61c4878aSAndroid Build Coastguard Worker   pw::spi::Device spi_8_bit(borrowable_spi_initiator,
53*61c4878aSAndroid Build Coastguard Worker                             kSpiConfig8Bit,
54*61c4878aSAndroid Build Coastguard Worker                             spi_chip_selector);
55