Linux SPI设备接口函数解析&QT调试Demo

通常SPI通过4个引脚与外部器件相连:

MISO:主设备输入/从设备输出引脚。

MOSI主设备输出/从设备输入引脚

SCK:串口时钟,作为主设备的输出,从设备的输入

NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。

 

时序:

SPI有4种工作时序模式:

Linux SPI设备接口函数解析&QT调试Demo_第1张图片

 

CPOL表示时钟信号的初始电平的状态,CPOL为0表示时钟信号初始状态为低电平,为1表示时钟信号的初始电平是高电平

CPHA来表示在那个时钟沿采样数据,CPHA为0表示在首个时钟变化沿采样数据,而CPHA为1则表示要在第二个时钟变化沿来采样数据

  • CPOL=0,CPHA=0        模式0
  • CPOL=0,CPHA=1        模式1
  • CPOL=1,CPHA=0        模式2
  • CPOL=1,CPHA=1        模式3

模式的设置在Linux.h

 

内部工作机理:

Linux SPI设备接口函数解析&QT调试Demo_第2张图片

SSPSR 是 SPI 设备内部的移位寄存器(Shift Register). 它的主要作用是根据 SPI时钟信号状态, 往 SSPBUF 里移入或者移出数据, 每次移动的数据大小由 Bus-Width 以
及 Channel-Width 所决定.

 

Linux SPI设备接口函数

1.  open/close
       打开和关闭设备节点,直接使用open/write就可以了。

2.  read/write
       读写SPI设备可以直接使用read/write函数,但是每次读或者写的大小不能大于4096Byte。每次读写,Linux会自动把CS和NSS置高或置低。

3.  IOCTL命令
       用户空间对spidev设备节点使用IOCTL命令失败会返回-1。

l        SPI_IOC_RD_MODE
读取SPI设备对应的spi_device.mode。使用的方法如下:
                   ioctl(fd,SPI_IOC_RD_MODE, &mode);
              其中第三个参数是一个uint8_t类型的变量。
l        SPI_IOC_WR_MODE
设置SPI设备对应的spi_device.mode。使用的方式如下:
                   ioctl(fd,SPI_IOC_WR_MODE, &mode);
l SPI_IOC_RD_LSB_FIRST
查看设备传输的时候是否先传输低比特位。如果是的话,返回1。使用的方式如下:
                   ioctl(fd,SPI_IOC_RD_LSB_FIRST, &lsb);
              其中lsb是一个uint8_t类型的变量。返回的结果存在lsb中。
l SPI_IOC_WR_LSB_FIRST
设置设备传输的时候是否先传输低比特位。当传入非零的时候,低比特在前,当传入0的时候高比特在前(默认)。使用的方式如下:
                   ioctl(fd,SPI_IOC_WR_LSB_FIRST, &lsb);
l SPI_IOC_RD_BITS_PER_WORD
读取SPI设备的字长。使用的方式如下:
                   ioctl(fd,SPI_IOC_RD_BITS_PER_WORD, &bits);
              其中bits是一个uibt8_t类型的变量。返回的结果保存在bits中。
l SPI_IOC_WR_BITS_PER_WORD
设置SPI通信的字长。使用的方式如下:
                   ioctl(fd,SPI_IOC_WR_BITS_PER_WORD, &bits);
l SPI_IOC_RD_MAX_SPEED_HZ
读取SPI设备的通信的最大时钟频率。使用的方式如下:
                   ioctl(fd,SPI_IOC_RD_MAX_SPEED_HZ, &speed);
              其中speed是一个uint32_t类型的变量。返回的结果保存在speed中。
l SPI_IOC_WR_MAX_SPEED_HZ
设置SPI设备的通信的最大时钟频率。使用的方式如下:
                   ioctl(fd,SPI_IOC_WR_MAX_SPEED_HZ, &speed);
l SPI_IOC_MESSAGE(N)
一次进行双向/多次读写操作。使用的方式如下:
                   structspi_ioc_transfer  xfer[2];
                   ......
                   status= ioctl(fd, SPI_IOC_MESSAGE(2), xfer);

 

QT调试SPI Demo(Linux下使用):

界面:

Linux SPI设备接口函数解析&QT调试Demo_第3张图片

链接:https://pan.baidu.com/s/1tnQT_rKr7Gg-U3czuElikQ 
提取码:9an5 
复制这段内容后打开百度网盘手机App,操作更方便哦

你可能感兴趣的:(QT类,spi)