Linux spi master dev驱动及测试例程

spidev

设备:

			spidev@0{
				compatible = "xxx,spidev";
				reg = <0>;
				spi-max-frequency = <1000000>;
				spi-cpha;
				spi-cpol;
			};

驱动:

kernel/linux-4.14/drivers/spi/spidev.c(由平台原创)

测试spidev程序

 

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

#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
unsigned char  default_tx[] = {
	0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
	0xff, 0xfe,
};
unsigned char default_rx[ARRAY_SIZE(default_tx)] = {0, };
int main(int argc, char **argv)
{
	int		fd;
	char		dev_node[16];
	int		mode = 0, bits = 8, speed = 500 * 1000;
	int		ret = 0;
	unsigned char	tx_buf[1000], rx_buf[1000];
	struct spi_ioc_transfer tr;
	int		i, t1, t2;

	sprintf(dev_node, "/dev/spidev%d.0", atoi(argv[1]));
	fd = open(dev_node, O_RDWR);
	if (fd < 0) {
		perror("open");
		return -1;
	}

	/* Mode */
	ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
	if (ret < 0) {
		perror("SPI_IOC_WR_MODE");
		return -1;
	}
	ret = ioctl(fd, SPI_IOC_RD_MODE, &mode);
	if (ret < 0) {
		perror("SPI_IOC_RD_MODE");
		return -1;
	}

	/* bpw */
	ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
	if (ret < 0) {
		perror("SPI_IOC_WR_BITS_PER_WORD");
		return -1;
	}
	ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
	if (ret < 0) {
		perror("SPI_IOC_RD_BITS_PER_WORD");
		return -1;
	}

	/* speed */
	ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
	if (ret < 0) {
		perror("SPI_IOC_WR_MAX_SPEED_HZ");
		return -1;
	}
	ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
	if (ret < 0) {
		perror("SPI_IOC_RD_MAX_SPEED_HZ");
		return -1;
	}

	printf("Mode = %d\n", mode);
	printf("Bpw = %d\n", bits);
	printf("Baudrate = %d\n", speed);

	tr.tx_buf = (unsigned long)default_tx;
	tr.rx_buf = (unsigned long)default_rx;
	tr.len = sizeof(default_tx);
	tr.delay_usecs = 0;
	tr.speed_hz = speed;
	tr.bits_per_word = bits;

while(1){
	ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
	sleep(1);
};

	return 0;
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值