SPI 读取不同长度 寄存器_树莓派之SPI编程

2eccc8d1d2e38cbced27ac8394fdceb6.png
确认spi是否启用:ls spi*
1、如有对应的文件:spidev0.0、spidev0.1,说明spi已启用。
2、如无对应文件,需运行:raspi-config,在内核启用spi。
3、确认内核已加载模块spidev:lsmod | grep spidev

流程[1]

3e0921eeaba0c3408e864c6e3c95a691.png

实例[2]

xwsheng:树莓派之SPI显示屏​zhuanlan.zhihu.com
dbe140cb4104e67ecfba0de2e8c26317.png

需要包含的头文件

#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>

open:打开设备

int 

IO Control:端口控制

int ioctl(int fd, int cmd, arg)
fd:文件句柄。
cmd:控制类型。
arg:类型参数,根据cmd可变长度和类型。

1、spi驱动数据结构

struct spi_device {
	struct device dev;
	struct spi_master *master;
	u32 max_speed_hz;			//通信时钟最大频率
	u8 chip_select; 			//片选信号
	u8 mode;				//SPI设备的模式
	u8 bits_per_word;			//每个通信字的字长(比特数)
	int irq;				//使用到的中断
	void *controller_state;
	void *controller_data;
	char modalias[32];			//设备驱动的名字
};

2、spidev驱动已定义参数(arg)

SPI_MODE_0			//SCLK空闲时为低电平,第一个时间沿采样
SPI_MODE_1			//SCLK空闲时为高电平,第一个时间沿采样
SPI_MODE_2			//SCLK空闲时为低电平,第二个时间沿采样
SPI_MODE_3			//SCLK空闲时为高电平,第二个时间沿采样
SPI_CS_HIGH			//片选为高
SPI_LSB_FIRST			//低位数据先传输
SPI_3WIRE			//三线式,输入输出数据线为一条线
SPI_LOOP			//回环模式
SPI_NO_CS			//没有片选信号

3、常用端口参数设置

A、设置或读取SPI工作模式:
    cmd:SPI_IOC_RD_MODE / SPI_IOC_WR_MODE
    arg: uint32_t *mode
    eg:
        mode = mode | SPI_MODE_0 | SPI_LSB_FIRST | SPI_LOOP;
        ioctl(fd, SPI_IOC_RD_MODE, &mode);
        ioctl(fd, SPI_IOC_WR_MODE, &mode);
B、设置或读取SPI字节
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值