天嵌 ARM开发社区

 找回密码
 注册
查看: 5967|回复: 9

用TQ210开发板通过SPI控制一个芯片,该如何?

[复制链接]
lǐtáng 发表于 2013-11-18 11:38:07 | 显示全部楼层 |阅读模式
是像天嵌的那个《安卓完全开发手册》里面写的那个顺序那样?写驱动->HAL->JNI->APP?
驱动层怎么写,那个手册里面只写了申请一个IO,不知道怎么去操作SPI?

不知道怎么下手啊,求
Calvin 发表于 2013-11-18 12:01:46 | 显示全部楼层
你可以看下内核目录下的/drivers/spi/spi_s3c64xx.c和spidev.c
 楼主| lǐtáng 发表于 2013-11-18 14:31:01 | 显示全部楼层
Calvin 发表于 2013-11-18 12:01
你可以看下内核目录下的/drivers/spi/spi_s3c64xx.c和spidev.c

好的,正在看spidev.c
 楼主| lǐtáng 发表于 2013-11-19 14:28:05 | 显示全部楼层
本帖最后由 lǐtáng 于 2013-11-19 14:37 编辑
lǐtáng 发表于 2013-11-18 14:31
好的,正在看spidev.c

编译这个led_test,能通过,但是编译spi_test的时候提示找不到linux/spi/spidev.h
怎么办?



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| lǐtáng 发表于 2013-11-19 14:40:50 | 显示全部楼层
Calvin 发表于 2013-11-18 12:01
你可以看下内核目录下的/drivers/spi/spi_s3c64xx.c和spidev.c


编译这个led_test,能通过,但是编译spi_test的时候提示找不到linux/spi/spidev.h
怎么办?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
we_4690 发表于 2013-11-19 16:49:44 | 显示全部楼层
你好,我也在学习安卓下SPI的APP编写,想问下能不能留个联系方式交流下,谢谢!542715879@qq.com
we_4690 发表于 2013-11-19 17:00:16 | 显示全部楼层
在/opt/EmbedSky/TQ210/Kernel_3.0.8_TQ210_for_Android_v1.4/include/linux/spi里有个spidev.h文件,应该是这个吧,还想问下spi_test是自己写吗?在内核里能找到吗?
 楼主| lǐtáng 发表于 2013-11-20 15:25:39 | 显示全部楼层
we_4690 发表于 2013-11-19 17:00
在/opt/EmbedSky/TQ210/Kernel_3.0.8_TQ210_for_Android_v1.4/include/linux/spi里有个spidev.h文件,应该 ...

恩,后来找到了,复制过去就编译过了
spi_test.c是在网上搜索到的
395816902@qq.com
070 发表于 2013-11-20 20:28:21 | 显示全部楼层
本帖最后由 070 于 2013-11-20 20:32 编辑

Linux中,在已经实现了SPI主控制器驱动的情况,有两种驱动编写方法:
1、内核级的SPI从设备驱动
2、利用已有的SPI用户模式接口的应用程序式驱动

这次就简单介绍一下第二种的驱动编写方法:

TQ210的内核已经包含了SPIDEV驱动了。通过访问/dev/spidev_0.0和/dev/spidev_1.0两个设备文件,可以访问开发板上的两个SPI口。
至于SPI通信的话,我给个例子给你,就知道如何用了(你至少要知道SPI从设备的操作协议)。我以NRF24L01无线通信模块的读取状态寄存器的代码作为说明。访问NRF24L01无线通信模块的STATUS状态寄存器,首先往SPI中写入STATUS寄存器的地址0x07,然后写入0xFF读取状态。


  1. #define READ_REG_CMD_SIZE 2
  2. #define STATUS              0x07
  3. int fd_spidev = open("/dev/spidev_1.0", O_WR);

  4. char tx[READ_REG_CMD_SIZE] = { STATUS,  0xFF };
  5. char rx[READ_REG_CMD_SIZE] = { 0x00, 0x00 };
  6. struct spi_ioc_transfer tr = {
  7.            .tx_buf = (unsigned long)tx,
  8.            .rx_buf = (unsigned long)rx,
  9.            .len    = READ_REG_CMD_SIZE,
  10. };        
  11. ret = ioctl(fd_spidev, SPI_IOC_MESSAGE(1), &tr);
  12. char stat = rx[1]; // 状态存储在rx[1]上。
复制代码




 楼主| lǐtáng 发表于 2013-11-25 12:03:23 | 显示全部楼层
070 发表于 2013-11-20 20:28
Linux中,在已经实现了SPI主控制器驱动的情况,有两种驱动编写方法:
1、内核级的SPI从设备驱动
2、利用 ...

恩,是用的第二种方式,在写jni层了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-2 08:47 , Processed in 1.046875 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表