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