在嵌入式设备中用到spi的器件有很多,目前常见的有刷卡器、蓝牙模块等,都是通过spi总线来通信的。本文来讲解一下SPI应用程序开发的常见模式。
一 、 主要结构体
linux中,应用开发常用的结构体主要是struct spi_ioc_transfer:
struct spi_ioc_transfer {
__u64 tx_buf;
__u64 rx_buf;
__u32 len;
__u32 speed_hz;
__u16 delay_usecs;
__u8 bits_per_word;
__u8 cs_change;
__u32 pad;
};
#define SPI_MSGSIZE(N) \
((((N)*(sizeof (struct spi_ioc_transfer))) < (1 << _IOC_SIZEBITS)) \
? ((N)*(sizeof (struct spi_ioc_transfer))) : 0)
#define SPI_IOC_MESSAGE(N) _IOW(SPI_IOC_MAGIC, 0, char[SPI_MSGSIZE(N)])
只要对spi_ioc_transfer进行赋值,就可以进行读写操作了,很简单。
二、 SPI设备的初始化
void spi_Init()
{
int ret = 0;
spifd = open(device, O_RDWR);
if (spifd < 0)
pabort("can't open device");
/*
* spi mode