Linux SPI 原理and驱动介绍

技术的东西,混是混不过去的!


一、SPI基础知识

SPI是英语Serial Peripheral interface的缩写,是串行外围设备接口,是一种**高速,全双工,同步的通信总线。

SPI总线定义两个及以上设备间的数据通信,提供时钟的设备为主设备Master,接收时钟的设备为从设备Slave。

信号定义如下:
SCK : Serial Clock 串行时钟
​
MOSI : Master Output, Slave Input 主发从收信号
​
MISO : Master Input, Slave Output 主收从发信号
​
SS/CS : Slave Select 片选信号

电路连接如下:

单个主设备和单个从设备:

单个主设备和多个从设备,通过多个片选信号或者菊花链方式实现:(其实就是串并联两种方式)

片选时,主机的NSS信号为高电平,从机的NSS信号被主机片选,即低电平的被选中。

 

二、Linux SPI驱动总体架构

在2.6的linux内核中,SPI的驱动架构可以分为如下三个层次:SPI 核心层、SPI控制器驱动层和SPI设备驱动层。Linux 中SPI驱动代码位于drivers/spi目录。

1.SPI核心层

SPI核心层是Linux的SPI核心部分,提供了核心数据结构的定义、SPI控制器驱动和设备驱动的注册、注销管理等API。其为硬件平台无关层,向下屏蔽了物理总线控制器的差异,定义了统一的访问策略和接口;其向上提供了统一的接口,以便SPI设备驱动通过总线控制器进行数据收发。 Linux中,SPI核心层的代码位于driver/spi/spi.c。

2.SPI控制器驱动层

SPI控制器驱动层,每种处理器平台都有自己的控制器驱动,属于平台移植相关层。它的职责是为系统中每条SPI总线实现相应的读写方法。在物理上,每个SPI控制器可以连接若干个SPI从设备。 在系统开机时,SPI控制器驱动被首先装载。一个控制器驱动用于支持一条特定的SPI总线的读写。一个控制器驱动可以用数据结构struct spi_master来描述。

3.SPI设备驱动层

SPI设备驱动层为用户接口层,其为用户提供了通过SPI总线访问具体设备的接口。 SPI设备驱动层可以用两个模块来描述,struct spi_driver和struct spi_device。 Driver是为device服务的,spi_driver注册时会扫描SPI bus上的设备,进行驱动和设备的绑定,probe函数用于驱动和设备匹配时被调用

发布了42 篇原创文章 · 获赞 8 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章