基于2.6.28.6内核的SPI驱动总结

参考: PowerPC+Linux2.6.25 平台下的SPI驱动构架分析

 

 1、SPI总体构架

      SPI的驱动分为三个层次:硬件抽象层、平台依赖层和用户接口层。

 1.1、硬件抽象层(核心层)

      drivers/spi/spi.c、spi.h为主体框架代码,spi.h提供核心数据结构的定义,如spi_driver、spi_device、spi_board_info、 

      spi_master和一些基本的函数定义;spi.c主要是注册spi_bus_type,定义一些函数,如spi_add_device、

      spi_register_master、spi_register_board_info;

      核心层为硬件平台无关层,向下屏蔽了物理总线控制器的差异,定义了统一的访问策略和接口;向上提供统一的接口,以便spi设备驱动 

      通过总线控制器收发数据。

      struct spi_master{

            struct device dev;

            u16    bus_num;    对应spi0或spi1

            u16    num_chipselect;  对应挂接的spi_slaves

            int (*setup) (struct spi_device *spi)  供spi driver调用来进行设置

            int (*transfer) (struct spi_device *spi, struct spi_message *mesg);

            void (*cleanup) (struct spi_device *spi);

1.2、平台依赖层(platform总线设备和驱动)

      drivers/spi/spi_sam.c,注册名为sam_spi的platform驱动。arch/arm/mach-s3c6410/plat-s3c64xx定义名为sam_spi的

      platform设备,并在 arch/arm/mach-s3c6410/mach-smdk6410中添加设备。

      mach-smdk6410中还注册了spi_board_info结构体(modalias为用户接口层的驱动名),它用来选择哪个主spi以及挂接在其上的哪 

      个从spi;(arm/mach-s3c6410文件夹下的makefile中mach-support项添加的是mach-smdk6410项,用于平台相关的)

      spi总线的master是一条spi总线的控制器,在物理上连接若干spi从设备。每种处理器平台都有自已的控制器驱动,属于平台移植相 

      关层。本处是spi_sam.c,其按照核心层定义的接口实现了spi_master结构(probe函数最后调用spi_register_master)。

1.3、 用户接口层

      drivers/spi/spidev.c向spi_bus_type总线上添加名为spidev的驱动,它的probe函数创建设备结点供用户调用,它的ioctrl提供给

       用户读写寄存器或收发数据;

       spidev驱动和sam_spi驱动都需要维护一个共同master结构体,spidev最终通过sam_spi实现底层的传输。

       spi_device和spi_add_device在spi.c中定义,它通过master定位一个具体的硬件设备,通过modalias找到它对应的驱动;这样在

       sys/bus/spi/devices下看到的设备名为spi0.0可能不和驱动名spidev相同,但是设备结构体中有master和modalias,它会根据

       modalias找到驱动。

 

测试程序在Documentation/spi/spidev_test.c

 

调试记录:

      在arch/arm/mach-s3c6410/mach-smdk6410中的spi_board_info结构体里面把两个spi都加上(主要是bus_num和num_chipslect来确定),然后bus/spi/devices下边就会有两个设备了(spi0.0和spi1.0),/dev下也创建了两个结点。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值