背景介绍:紧接着上一篇文章,当成功添加spi字符设备后,我们就可以在用户空间的应用程序中对spi外设进行“读”“写”“设置”操作,而spidev.c提供了两种读写模式:全双工模式和半双工模式。这里仍然参考文章:
http://zch7811.blog.163.com/blog/static/1770522820135423251597/ ,其详细的介绍了两种模式下应用程序的编写。其中全双工模式应用程序,其实就是Linux自带的kernel.sdk/Documentation/spi/spidev_test.c。这里转载其半双工模式的应用程序见如下,并记录了我自己的调试过程。
半双工应用程序
-
#include <stdio.h>
-
#include <fcntl.h>
-
#include <stdlib.h>
-
-
#define ARRAY_SIZE(array) sizeof(array)/sizeof(array[0])
-
-
int main(int argc, char **argv)
-
{
-
int i,fd;
-
char wr_buf[]={0xff,0x00,0x00,0xff};
-
char rd_buf[10];;
-
-
if (argc<2) {
-
printf("Usage:\n%s [device]\n", argv[0]);
-
exit(1);
-
}
-
-
fd = open(argv[1], O_RDWR);
-
if (fd<=0) {
-
printf("%s: Device %s not found\n", argv[0], argv[1]);
-
exit(1);
-
}
-
-
if (write(fd, wr_buf, ARRAY_SIZE(wr_buf)) != ARRAY_SIZE(wr_buf))
-
perror("Write Error");
-
if (read(fd, rd_buf, ARRAY_SIZE(rd_buf)) != ARRAY_SIZE(rd_buf))
-
perror("Read Error");
-
else
-
for (i=0;i<ARRAY_SIZE(rd_buf);i++) {
-
printf("0x%02X ", rd_buf[i]);
-
if (i%2)
-
printf("\n");
-
}
-
-
close(fd);
-
return 0;
-
}
调试步骤
1 使用交叉编译工具链编译好半双工模式的应用程序,重命名为spidevtest。半双工应用程序不再列出,见如上链接。
2 拷贝应用程序spidevtest到单板。使用tftp下载或nfs方法都可以。
3 单板启动后,串口下执行:./spidevtest /dev/spidev1.1。与此同时,使用示波器测量spi1的数据输出Pin的电平信号,与软件所写的数据一致,即可证明应用程序写OK;并且,串口打印出来的读数据,也与软件所写的数据一致,即可证明应用程序读OK。
阅读(3052) | 评论(0) | 转发(0) |