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

通常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,操作更方便哦

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值