The spi_dma_xchange() function uses DMA to exchange data between
the SPI master and an SPI device.
The prototype for this function is:
int spi_dma_xchange( int fd,
uint32_t device,
void *wbuf,
void *rbuf,
int len );
The arguments are:
- fd
- The file descriptor returned by spi_open().
- device
- The device ID with at most one of the following flags optionally ORed in:
- SPI_DEV_LOCK
- SPI_DEV_UNLOCK
- wbuf
- A pointer to the send buffer, or NULL if there's no
data to send.
- rbuf
- A pointer to the receive buffer, or NULL if there's no
data to receive.
- len
- The exchange length, in bytes.
This function calls
spi_dma_xfer()
to do the actual DMA.
If you're using the same buffer repeatedly, it's more efficient to call spi_dma_xfer() directly.
The spi_dma_xchange() function returns the number of bytes of data that it successfully
exchanged.
If an error occurred, the function returns -1 and sets errno:
- EIO
- The write to the device failed, or a hardware error occurred.
- EINVAL
- The device ID is invalid, or you're trying to unlock a device that
isn't locked, or the buffer address is invalid.
- ENOMEM
- Insufficient memory.
- EPERM
- The device is locked by another connection.
- ENOTSUP
- DMA isn't supported.
An SPI driver typically considers it to be an error if the number of bytes
returned by this function isn't the same as the number of bytes it asked
the function to exchange.
Note:
The application is responsible for allocating and managing the DMA buffer.
The application can call spi_getdrvinfo() to determine if
the driver supports DMA, and whether or not the DMA buffer requires alignment.