Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4183712
  • 博文数量: 776
  • 博客积分: 13014
  • 博客等级: 上将
  • 技术积分: 10391
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 17:00
文章分类

全部博文(776)

文章存档

2015年(55)

2014年(43)

2013年(147)

2012年(20)

2011年(82)

2010年(429)

分类: LINUX

2011-01-04 15:21:42

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



我参考这两个帖子之后,我这样做的。
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
#include

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载入开发板。

3、使用document里面的spidev_test文件测试,把MOSI和MISO线连接到一起。跑测试程序。成功。
 
疑问1:这里的这句话是什么意思?.irq = IRQ_EINT9,?跟SPCONn的SMOD的中断模式有什么关系?
疑问2:我把 .chip_select        = 0,改成1,载入开发板后ls /dev/spi*没东西。为0的时候有/dev/spi0.0  为什么?
疑问3: .modalias = "spidev",这里的spidev能改吗?
1.如果使用中断模式,也就是SMOD为01时,使用IRQ_EINT9号中断。
3.不能改,否则还得改其他东西。和spidev.c里面的probe函数有关系。
4.spi_s3c24xx.c就是2440 spi的驱动。
5.主要分析spi_s3c24xx.c这个文件就好了,至于一些调用关系,建议用source insight分析。
通常情况下,SPI驱动不是给User Space的应用程序用的,而是提供接口给内核中的其他驱动使用。
但内核的SPI层提供了一个spidev,可以将SPI controller模拟成一个普通的字符设备供应用程序使用,具体用法看内核源代码目录下的Documentation/spi/spidev。
关于内核SPI层的更多信息,看Documentation/spi/下的文档


 
阅读(4760) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~