1. 程式人生 > >Linux 核心 SPI驅動收發函式API

Linux 核心 SPI驅動收發函式API

傳送字串

static int spi_write_bytes(struct spi_device *spi, unsigned char *txbuf, int txlen)
{
    int ret = 0;
    struct spi_message msg;
    struct spi_transfer xfer = {
        .len  = txlen,
        .tx_buf  = txbuf,
        .delay_usecs = 5,
        .bits_per_word = 8,
    };
    spi_message_init(&msg);
    spi_message_add_tail(&xfer, &msg);
    ret = spi_sync(spi, &msg);
    if
(ret < 0) printk(KERN_ERR "spi send error\n"); }

傳送單個字元

static int spi_write_byte(struct spi_device *spi, unsigned char data)
{
    int ret = 0;
    char buf[1];
    struct spi_message msg;
    struct spi_transfer xfer = {
        .len  = 1,
        .tx_buf  = buf,
        .bits_per_word
= 8, }; buf[0] = data; spi_message_init(&msg); spi_message_add_tail(&xfer, &msg); ret = spi_sync(spi, &msg); if (ret < 0) printk(KERN_ERR "spi send error\n"); }

讀取函式

static int spi_read(struct spi_device *spi, unsigned char addr,\
        unsigned
int length, unsigned char *data) { int ret = 0; unsigned char buf[1]; struct spi_message msg; struct spi_transfer xfer[] = { { .tx_buf = buf, .bits_per_word = 8, .len = sizeof(buf), }, { .rx_buf = data, .bits_per_word = 8, .len = length, } }; buf[0] = (addr | 0x80); if (!spi || !data) { ret = -EINVAL; return ret; } spi_message_init(&msg); spi_message_add_tail(&xfer[0], &msg); spi_message_add_tail(&xfer[1], &msg); return spi_sync(spi, &msg); }