Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.


SPI(9)                     Kernel Developer's Manual                    SPI(9)

NAME
     spi_configure, spi_transfer, spi_transfer_init, spi_chunk_init,
     spi_transfer_add, spi_wait, spi_done, spi_send, spi_recv, spi_send_recv -
     Serial Peripheral Interface (SPI) kernel interface

SYNOPSIS
     #include <dev/spi/spivar.h>

     int
     spi_configure(struct spi_handle *sh, int mode, int speed);

     int
     spi_transfer(struct spi_handle *sh, struct spi_transfer *st);

     void
     spi_transfer_init(struct spi_transfer *st);

     void
     spi_chunk_init(struct spi_chunk *chunk, int cnt, const uint8_t *wptr,
         uint8_t *rptr);

     void
     spi_transfer_add(struct spi_transfer *st, struct spi_chunk *chunk);

     void
     spi_wait(struct spi_transfer *st);

     void
     spi_done(struct spi_transfer *st, int err);

     int
     spi_recv(struct spi_handle *sh, int cnt, uint8_t *data);

     int
     spi_send(struct spi_handle *sh, int cnt, const uint8_t *data);

     int
     spi_send_recv(struct spi_handle *sh, int scnt, const uint8_t *snd,
         int rcnt, const uint8_t *rcv);

DESCRIPTION
     SPI is a 4-wire synchronous full-duplex serial bus.  It is commonly used
     for connecting devices such as EEPROMs, displays, and other types of
     integrated circuits.  The spi interface provides a means of communicating
     with SPI-connected devices.

FUNCTIONS
     The following functions comprise the API provided to drivers of SPI-
     connected devices.

     The struct spi_handle corresponding to the device is passed in the driver
     attachment.

     spi_configure(sh, mode, speed)
                        Sets mode and speed for subsequent communication with
                        a SPI slave.

     spi_transfer(sh, st)
                        Queue transfer to SPI controller.  spi_transfer()
                        returns an errno value when the transfer couldn't be
                        queued.

     spi_transfer_init(st)
                        Initialize a transfer structure.

     spi_chunk_init(chunk, cnt, wptr, rptr")
                        Initialize a chunk structure, each chunk corresponds
                        to a possibly bi-directional transfer where the same
                        amount of bytes is shifted in and out.

     spi_transfer_add(st, chunk)
                        Append a chunk to transfer structure.

     spi_wait(st)       Wait for a transfer to complete.  When the transfer
                        has failed for some reason, the field st->st_errno is
                        set to a non-zero value.

     spi_done(st, err)  Called back machine-dependent backend to signal
                        completion of a transfer.

     For simplicity there are convenience functions that combine common
     operations.  These functions return an errno value when the transfer
     failed.

     spi_recv(sh, cnt, data)
                        Prepares a chunk for receiving data, queues a transfer
                        and waits for it to complete.

     spi_send(sh, cnt, data)
                        Prepares a chunk for sending data, queues a transfer
                        and waits for it to complete.

     spi_send_recv(sh, scnt, snd, rcnt, rcv)
                        Prepares two chunks for sending data first and then
                        receiving an answer, queues a transfer and waits for
                        it to complete.  This is not a full-duplex operation.

SEE ALSO
     spi(4)

HISTORY
     The spi API first appeared in NetBSD 4.0.

NetBSD 10.99                   February 23, 2019                  NetBSD 10.99