spi总线 上层调用_Linux SPI总线和设备驱动架构.pdf

一、系统概述

SPI 是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接

微控制器、传感器、存储设备,SPI 设备分为主设备和从设备两种,用于通信和控制的四根

线分别是:

 CS 片选信号

 SCK 时钟信号

 MISO 主设备的数据输入、从设备的数据输出脚

 MOSI 主设备的数据输出、从设备的数据输入脚

因为在大多数情况下,CPU 或SOC 一侧通常都是工作在主设备模式,所以,目前的Linux

内核版本中,只实现了主模式的驱动框架。

/****************************************************************************************************

*/

声明:本博内容均由/droidphone 原创,转载请注明出处,谢谢!

/****************************************************************************************************

*/

硬件结构

通常,负责发出时钟信号的设备我们称之为主设备,另一方则作为从设备,下图是一个SPI

系统的硬件连接示例:

图1.1 SPI 硬件结构图

如上图所示,主设备对应SOC 芯片中的SPI 控制器,通常,一个SOC 中可能存在多个SPI

控制器,像上面的例子所示,SOC 芯片中有3 个SPI 控制器。每个控制器下可以连接多个

SPI 从设备,每个从设备有各自独立的CS 引脚。每个从设备共享另外3 个信号引脚:SCK、

MISO、MOSI。任何时刻,只有一个CS 引脚处于有效状态,与该有效CS 引脚连接的设备

此时可以与主设备(SPI 控制器)通信,其它的从设备处于等待状态,并且它们的3 个引脚

必须处于高阻状态。

工作时序

按照时钟信号和数据信号之间的相位关系,SPI 有4 种工作时序模式:

我们用CPOL 表示时钟信号的初始电平的状态,CPOL 为0 表示时钟信号初始状态为低电

平,为 1 表示时钟信号的初始电平是高电平。另外,我们用CPHA 来表示在那个时钟沿采

样数据,CPHA 为0 表示在首个时钟变化沿采样数据,而CPHA 为1 则表示要在第二个时

钟变化沿来采样数据。内核用CPOL 和CPHA 的组合来表示当前SPI 需要的工作模式:

 CPOL=0,CPHA=1 模式0

 CPOL=0,CPHA=1 模式1

 CPOL=1,CPHA=0 模式2

 CPOL=1,CPHA=1 模式3

软件架构

在内核的SPI 驱动的软件架构中,进行了合理的分层和抽象,如下图所示:

图2.1 SPI 驱动的软件架构

SPI 控制器驱动程序

SPI 控制器不用关心设备的具体功能,它只负责把上层协议驱动准备好的数据按SPI 总线的

时序要求发送给 SPI 设备,同时把从设备收到的数据返回给上层的协议驱动,因此,内核

把SPI 控制器的驱动程序独立出来。SPI 控制器驱动负责控制具体的控制器硬件,诸如DMA

和中断操作等等,因为多个上层的协议驱动可能会通过控制器请求数据传输操作,所以,

SPI 控制器驱动同时也要负责对这些请求进行队列管理,保证先进先出的原则。

SPI 通用接口封装层

为了简化SPI 驱动程序的编程工作,同时也为了降低协议驱动程序和控制器驱动程序的耦

合程度,内核把控制器驱动和协议驱动的一些通用操作封装成标准的接口,加上一些通用的

逻辑处理操作,组成了SPI 通用接口封装层。这样的好处是,对于控制器驱动程序,只要

实现标准的接口回调API ,并把它注册到通用接口层即可,无需直接和协议层驱动程序进行

交互。而对于协议层驱动来说,只需通过通用接口层提供的API 即可完成设备和驱动的注

册,并通过通用接口层的API 完成数据的传输,无需关注SPI 控制器驱动的实现细节。

SPI 协议驱动程序

上面我们提到,控制器驱动程序并不清楚和关注设备的具体功能,SPI 设备的具体功能是由

SPI 协议驱动程序完成的,SPI 协议驱动程序了解设备的功能和通信数据的协议格式。向下,

协议驱动通过通用接口层和控制器交换数据,向上,协议驱动通常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值