Linux 核心 SPI驅動收發函式API
阿新 • • 發佈:2019-02-02
傳送字串
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);
}