Linux内核中SPI总线驱动分析

Linux内核中SPI总线驱动分析

ID:39465482

大小:63.00 KB

页数:8页

时间:2019-07-04

Linux内核中SPI总线驱动分析_第1页
Linux内核中SPI总线驱动分析_第2页
Linux内核中SPI总线驱动分析_第3页
Linux内核中SPI总线驱动分析_第4页
Linux内核中SPI总线驱动分析_第5页
资源描述:

《Linux内核中SPI总线驱动分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux内核中SPI总线驱动分析本文主要有两个大的模块:一个是SPI总线驱动的分析(研究了具体实现的过程);另一个是SPI总线驱动的编写(不用研究具体的实现过程)。 1 SPI概述     SPI是英语SerialPeripheralinterface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PC

2、B的布局上节省空间,提供方便。     SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要4根线,事实上3根也可以。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCLK(时钟),CS(片选)。     MOSI(SDO):主器件数据输出,从器件数据输入。     MISO(SDI):主器件数据输入,从器件数据输出。     SCLK:时钟信号,由主器件产生。     CS:从器件使能信号,由主器件控制。     其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(

3、高电位或低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能。需要注意的是,在具体的应用中,当一条SPI总线上连接有多个设备时,SPI本身的CS有可能被其他的GPIO脚代替,即每个设备的CS脚被连接到处理器端不同的GPIO,通过操作不同的GPIO口来控制具体的需要操作的SPI设备,减少各个SPI设备间的干扰。     SPI是串行通讯协议,也就是说数据是一位一位从MSB或者LSB开始传输的,这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,MISO、MOSI则基于此脉冲完成数据传输。SPI支持4-32bits的串行数据传输,支持MS

4、B和LSB,每次数据传输时当从设备的大小端发生变化时需要重新设置SPIMaster的大小端。2 LinuxSPI驱动总体架构     在2.6的linux内核中,SPI的驱动架构可以分为如下三个层次:SPI核心层、SPI控制器驱动层和SPI设备驱动层。     Linux中SPI驱动代码位于drivers/spi目录。2.1 SPI核心层     SPI核心层是Linux的SPI核心部分,提供了核心数据结构的定义、SPI控制器驱动和设备驱动的注册、注销管理等API。其为硬件平台无关层,向下屏蔽了物理总线控制器的差异,定义了统一的访问策略和接口;其向上提供了统一

5、的接口,以便SPI设备驱动通过总线控制器进行数据收发。     Linux中,SPI核心层的代码位于driver/spi/spi.c。由于该层是平台无关层,本文将不再叙述,有兴趣可以查阅相关资料。2.2 SPI控制器驱动层     SPI控制器驱动层,每种处理器平台都有自己的控制器驱动,属于平台移植相关层。它的职责是为系统中每条SPI总线实现相应的读写方法。在物理上,每个SPI控制器可以连接若干个SPI从设备。     在系统开机时,SPI控制器驱动被首先装载。一个控制器驱动用于支持一条特定的SPI总线的读写。一个控制器驱动可以用数据结构structspi_m

6、aster来描述。  在include/liunx/spi/spi.h文件中,在数据结构structspi_master定义如下: struct spi_master {      struct device   dev;    s16         bus_num;   u16         num_chipselect;    int         (*setup)(struct spi_device *spi);    int         (*transfer)(struct spi_device *spi, struct spi_messag

7、e *mesg);    void    (*cleanup)(struct spi_device *spi); };       bus_num为该控制器对应的SPI总线号。     num_chipselect 控制器支持的片选数量,即能支持多少个spi设备    setup函数是设置SPI总线的模式,时钟等的初始化函数, 针对设备设置SPI的工作时钟及数据传输模式等。在spi_add_device函数中调用。    transfer函数是实现SPI总线读写方法的函数。实现数据的双向传输,可能会睡眠    cleanup注销时候调用2.3 SPI设备驱动层

8、     SPI设备驱动层为用户接口层

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。