LINUX驱动之SPI子系统之一概述

来源:互联网 发布:如何编写js插件 编辑:程序博客网 时间:2024/05/17 06:36

原文地址:http://fpcfjf.blog.163.com/blog/static/55469793201291184923309/

Spi子系统的访问可以有两种方式,一种是使用SPI控制器,第二种方法是使用GPIO模拟SPI的时序,但这种方法有一个很大的缺点,即时序的模拟需要耗费大量的时间,形成访问的瓶颈,造成效率不高。这两种方法对应的主要文件在内核的drivers/spi/spi_s3c24xx_gpio.c、drivers/spi/spi_s3c24xx.c两个文件上。

所以这里主要介绍使用SPI控制器的方法。在这里还有一处要说明,你虽然可以仍然使用平台设备platform_device_register和平台驱动platform_driver_register来实现驱动的注册,但SPI子系统单独提供了另外的注册函数,就象你可以使用subsys_initcall做为入口,也可以使用module_init做为入口(所用的地方不同但作用基本相同)。比如:

spi_register_driver对应platform_driver_register

下面有必要介绍一下SPI协议,它是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式。相关通讯设备可工作于m/s(主从)模式。主设备发起数据帧,允许多个从设备的存在。每个从设备有独立的片选信号,SPI一般来说是四线串行总线结构。
接口:
SCLK——Serial Clock(output from master)时钟(主设备发出)
MOSI/SIMO——Master Output, Slave Input(output from master)数据信号线mosi(主设备发出)
MISO/SOMI——Master Input,Slave Outpu(output from slave)数据信号线(从设备)
SS——Slave Select(active low;output from master)片选信号

更详细的大家可以参看相应的硬件的DATASHEET表,那个才是权威。

今天简单的说明一下整体的情况,从明天开始,详细的介绍SPI的工作流程。

努力要从今日始。