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

  • Post author:
  • Post category:linux





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



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


MOSI





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


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


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




时序:



SPI有4种工作时序模式:


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


内部工作机理:

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下使用):

界面:

链接:https://pan.baidu.com/s/1tnQT_rKr7Gg-U3czuElikQ

提取码:9an5

复制这段内容后打开百度网盘手机App,操作更方便哦



版权声明:本文为yaojinjian1995原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。