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. Thespi
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
HISTORY
The spi
API first appeared in
NetBSD 4.0.