• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 使用linux自带的SPI驱动的疑问 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 5706
精华: 0
发帖: 119
金钱: 780 两
威望: 406 点
贡献值: 0 点
综合积分: 238 分
注册时间: 2009-05-05
最后登录: 2011-05-22
楼主  发表于: 2010-01-19 20:57

 使用linux自带的SPI驱动的疑问

我刚接触这个没几天,看到有自带的驱动程序,我想用spi自带的驱动程序,可是发现里面好多个文件。学习了好多天了,不知道他们的相互包含关系?越看越有点晕。
我用的是mini2440, linux2.6.29。我想借这个平台整理一下我的思路,并请帮忙解答。
http://www.aiothome.net/read.php?tid-2378-keyword-spi.html
http://www.aiothome.net/read.php?tid-3620-keyword-spi.html

我参考这两个帖子之后,我这样做的。
1、在配置Linux 编译选项时,开启相应的SPI 选项,如下所示
    -> Device Drivers
      -> SPI support
       SPI support
          *** SPI Master Controller Drivers ***
      -*- Bitbanging SPI master
      <*> Samsung S3C24XX series SPI
      < > Samsung S3C24XX series SPI by GPIO
          *** SPI Protocol Masters ***
      < > SPI EEPROMs from most vendors
      <*> User mode SPI device driver support
      < > Infineon TLE62X0 (for power switching)
设置完成保存。
2、修改文件arch/arm/mach-s3c2440/mach-mini2440.c

添加
#include <linux/spi/spi.h>
#include <mach/spi.h>

static struct spi_board_info s3c2410_spi0_board[] = {
        [0] = {
                 .modalias = "spidev",
                .bus_num        = 0,  
                .chip_select        = 0,
                .irq = IRQ_EINT9,
                .max_speed_hz         = 500*1000,
        },
};

static struct s3c2410_spi_info s3c2410_spi0_platdata = {
        .pin_cs = S3C2410_GPB1,
        .num_cs = 1,
        .bus_num = 0,
};
mini2440_devices数组中添加
&s3c_device_spi0
mini2440_machine_init函数中添加
s3c_device_spi0.dev.platform_data= &s3c2410_spi0_platdata;
spi_register_board_info(s3c2410_spi0_board, ARRAY_SIZE(s3c2410_spi0_board));

完成保存。编译内核生成zImage,通过USB载入开发板。
疑问1:这里的这句话是什么意思?.irq = IRQ_EINT9,?跟SPCONn的SMOD的中断模式有什么关系?
疑问2:我把 .chip_select        = 0,改成1,载入开发板后ls /dev/spi*没东西。为0的时候有/dev/spi0.0  为什么?
疑问3: .modalias = "spidev",这里的spidev能改吗?
疑问4:以上的步骤设置和修改,跟这个文件spi_s3c24xx.c有关系吗?spi_s3c24xx.c是什么文件呢?s3c24xx的spi驱动程序?应用程序可以直接调用里面的函数?

3、使用document里面的spidev_test文件测试,把MOSI和MISO线连接到一起。跑测试程序。成功。

疑问5: 内核中有这么多个文件,spi.c spidev.c spi_s3c24xx.c (列出相关的)。这几个文件之间是有什么包含关系呢?以上三个步骤用到哪几个文件?有用到spi_s3c24xx.c文件吗?如果有,spidev.c是如何进行调用spi_s3c24xx.c的呢?
还是说spi_s3c24xx.c这个是独立的驱动程序?如果是,测试应用程序调用spi_s3c24xx.c里面的函数吗?

疑问看上去比较多,希望有人能帮我解答一二。不胜感激。我正一头雾水。
[ 此帖被cyndy在2010-01-19 21:03重新编辑 ]
级别: 侠客
UID: 5706
精华: 0
发帖: 119
金钱: 780 两
威望: 406 点
贡献值: 0 点
综合积分: 238 分
注册时间: 2009-05-05
最后登录: 2011-05-22
1楼  发表于: 2010-01-20 09:03
有谁能帮忙一下?谢谢!!
级别: 新手上路
UID: 7241
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2009-07-06
最后登录: 2011-05-24
2楼  发表于: 2010-01-21 17:59
顶一下
级别: 新手上路
UID: 12830
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2010-01-14
最后登录: 2012-09-23
3楼  发表于: 2010-01-22 16:29
1.如果使用中断模式,也就是SMOD为01时,使用IRQ_EINT9号中断。
3.不能改,否则还得改其他东西。和spidev.c里面的probe函数有关系。
4.spi_s3c24xx.c就是2440 spi的驱动。
5.主要分析spi_s3c24xx.c这个文件就好了,至于一些调用关系,建议用source insight分析。
[ 此帖被ljslvye在2010-01-22 16:39重新编辑 ]
级别: 侠客
UID: 5706
精华: 0
发帖: 119
金钱: 780 两
威望: 406 点
贡献值: 0 点
综合积分: 238 分
注册时间: 2009-05-05
最后登录: 2011-05-22
4楼  发表于: 2010-01-25 18:41
是不是spidev.c会自动调用spi_s3c24xx.c呢?
级别: 侠客
UID: 5706
精华: 0
发帖: 119
金钱: 780 两
威望: 406 点
贡献值: 0 点
综合积分: 238 分
注册时间: 2009-05-05
最后登录: 2011-05-22
5楼  发表于: 2010-01-25 18:48
ARM端想做为SPI的主设备,我现在想用外部中断IRQ_EINT9来接收数据,如果IRQ_EINT9产生中断,应用程序就判断有没有中断产生,如果有IRQ_EINT9产生中断,就开始启动SPI准备接收数据。
这个ARM如何知道有没有EINT9的中断产生,应用程序该如何写,等待接收数据呢?
级别: 新手上路
UID: 12830
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2010-01-14
最后登录: 2012-09-23
6楼  发表于: 2010-01-25 21:01
判断有没有中断产生是驱动要做的事,不是应用程序要做的事。
建议先拿个按键驱动程序好好分析一下,明白驱动的一些原理,再来写SPI驱动。
级别: 侠客
UID: 5706
精华: 0
发帖: 119
金钱: 780 两
威望: 406 点
贡献值: 0 点
综合积分: 238 分
注册时间: 2009-05-05
最后登录: 2011-05-22
7楼  发表于: 2010-01-26 18:02
好的~~谢谢~~
级别: 新手上路
UID: 5379
精华: 0
发帖: 5
金钱: 30 两
威望: 14 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2009-04-20
最后登录: 2014-05-31
8楼  发表于: 2010-01-30 18:58
我想问一下如何在一个总线上挂载多设备呢
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
9楼  发表于: 2010-01-30 21:10

 回 8楼(lj33072315) 的帖子

这是SPI协议需要考虑的事情
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go