【四旋翼飞行器】76小时吃透四轴算法!史上最强软硬结合实战项目,👉戳此立抢👈

深度解析Linux SPI总线和设备驱动架构

嵌入式ARM 2018-02-07 08:16 次阅读

SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是:

· CS    片选信号

· SCK  时钟信号

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

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

硬件结构

通常,负责发出时钟信号的设备我们称之为主设备,另一方则作为从设备,下图是一个SPI系统的硬件连接示例:

深度解析Linux 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协议驱动程序了解设备的功能和通信数据的协议格式。向下,协议驱动通过通用接口层和控制器交换数据,向上,协议驱动通常会根据设备具体的功能和内核的其它子系统进行交互,例如,和MTD层交互以便把SPI接口的存储设备实现为某个文件系统,和TTY子系统交互把SPI设备实现为一个TTY设备,和网络子系统交互以便把一个SPI设备实现为一个网络设备,等等。当然,如果是一个专有的SPI设备,我们也可以按设备的协议要求,实现自己的专有协议驱动。

SPI通用设备驱动程序

有时候,考虑到连接在SPI控制器上的设备的可变性,在内核没有配备相应的协议驱动程序,对于这种情况,内核为我们准备了通用的SPI设备驱动程序,该通用设备驱动程序向用户空间提供了控制SPI控制的控制接口,具体的协议控制和数据传输工作交由用户空间根据具体的设备来完成,在这种方式中,只能采用同步的方式和SPI设备进行通信,所以通常用于一些数据量较少的简单SPI设备。

原文标题:Linux SPI总线和设备驱动架构你都懂了吗?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

北大开源了一个中文分词工具包,名为——PKUSeg

多领域分词:不同于以往的通用中文分词工具,此工具包同时致力于为不同领域的数据提供个性化的预训练模型。....
的头像 电子发烧友网工程师 发表于 01-16 10:29 153次 阅读
北大开源了一个中文分词工具包,名为——PKUSeg

如何学习Linux学习Linux的详细步骤说明

Linux系统现在越来越满足人们对技术的要求,因此Linux不论在市场中还是企业里都备受欢迎,所以学....
发表于 01-15 17:17 24次 阅读
如何学习Linux学习Linux的详细步骤说明

Linux系统是什么

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任....
的头像 发烧友学院 发表于 01-15 16:36 105次 阅读
Linux系统是什么

嵌入式系统入门教程之嵌入式LINUX开发入门课件免费下载

本文适用于对嵌入式系统没有概念和经验,渴望进入嵌入式系统开发的领域,但又觉得系统太复杂,要学的东西太....
发表于 01-15 16:12 20次 阅读
嵌入式系统入门教程之嵌入式LINUX开发入门课件免费下载

Linux技术一般都应用在哪些领域

常用的IT服务器有Linux、Unix和Windows操作系统,其中Linux因其稳定、开源、免费、安全、高效的特点,发展迅猛,在服务器市...
发表于 01-15 15:41 192次 阅读
Linux技术一般都应用在哪些领域

零基础如何进行linux学习

Linux是一款免费、稳定、性能好的开源软件,在服务器端得到了广泛的应用,对于不懂Linux得人员来说,相当神秘,对初学者来说,...
发表于 01-15 15:40 177次 阅读
零基础如何进行linux学习

不使用SPC5Studio的情况下交叉编译代码

你好, 我想在不使用SPC5Studio的情况下交叉编译代码 Linux盒子上的SPC570S5E1,我需要哪个版本的gcc以及我应该使用...
发表于 01-15 13:27 36次 阅读
不使用SPC5Studio的情况下交叉编译代码

树莓派教程之从零开始学树莓派开发超好玩的智能小硬件制作书PDF

本书以实战开发为出发点,以Raspberry Pi应用开发为主线,通过Python开发简单的树莓派单....
发表于 01-15 10:06 32次 阅读
树莓派教程之从零开始学树莓派开发超好玩的智能小硬件制作书PDF

实现组合设备除了修改描述符还需要修改什么

研究组合设备,对描述符倒是摸索的差不多,我将VID和PID改成cp210x串口的,在Windows和linux下分别进行测试,没法进行进行...
发表于 01-15 08:07 141次 阅读
实现组合设备除了修改描述符还需要修改什么

如何从Ubuntu终端获取温度和光传感器值

嗨,In LoRawan与RN2483MODE,我看到GPIO12和GPIO13引脚提供温度的读数。光。我如何在Linux PC或Linux PC...
发表于 01-15 06:12 15次 阅读
如何从Ubuntu终端获取温度和光传感器值

Linux 下 rpm程序包命令介绍及使用方法

rpm包的安装方式非常简单,这里以el6平台下的mysql-5.6.34版本为例,首先,要通过上述搜狐镜像地址下载到如下四个MySQL相关软...
发表于 01-14 17:49 171次 阅读
Linux 下 rpm程序包命令介绍及使用方法

宋宝华:一种非常经典简单的设计模式——模板方法

而其中的step1()、step2()、step3()、step4()具体如何实现则是因人而异,所以....
的头像 Linuxer 发表于 01-14 16:05 122次 阅读
宋宝华:一种非常经典简单的设计模式——模板方法

10+年资深嵌入式讲师带您完全掌握Android嵌入式智能硬件开发!硬件电路图、项目源码100%完全开源!

【100%开源可编程】10+年资深嵌入式讲师带您完全掌握Android嵌入式智能硬件开发!硬件电路图、项目源码100%完全开源! 参与An...
发表于 01-14 14:06 160次 阅读
10+年资深嵌入式讲师带您完全掌握Android嵌入式智能硬件开发!硬件电路图、项目源码100%完全开源!

带您完全掌握Android嵌入式智能硬件开发!硬件电路图、项目源码100%完全开源!

参与Android嵌入式开发众筹,可获得以下随项目附赠内容: 1. 《Android嵌入式Li....
发表于 01-14 11:34 0次 阅读
带您完全掌握Android嵌入式智能硬件开发!硬件电路图、项目源码100%完全开源!

部署EMC RecoverPoint的理解和心得

EMC RecoverPoint产品根据我的理解就是一个数据同步的产品,在2个机房内如果都部署有EM....
发表于 01-12 09:21 78次 阅读
部署EMC RecoverPoint的理解和心得

linux安装配置ElasticSearch之源码安装

ElasticSearch是基于Lucene这个非常成熟的索引方案,另加上一些分布式的实现:集群,sharding,replication等。以下是对其采用...
发表于 01-11 17:27 414次 阅读
linux安装配置ElasticSearch之源码安装

在linux中如何查询端口被占用的情况

今天要使用python写一个端口探测的小程序,以检测一些特定的服务端口有没有被占用,突然发现自己居然....
的头像 马哥Linux运维 发表于 01-11 16:37 350次 阅读
在linux中如何查询端口被占用的情况

Linux学习教程之从菜鸟到Linux安全专家PDF教材免费下载

本书通过实际故事场景对linux安全技术和应用方法进行了全面、深入和系统的分析。分别从黑客攻击的基本....
发表于 01-10 18:10 50次 阅读
Linux学习教程之从菜鸟到Linux安全专家PDF教材免费下载

Linux Shell脚本攻略PDF中文版免费下载

本书通过细致剖析实际应用中的110多个案例,使许多看似复杂的inuxshel脚本任务迎刃而解作者在L....
发表于 01-10 16:48 25次 阅读
Linux Shell脚本攻略PDF中文版免费下载

如何在麒麟系统上安装Java环境指南的详细资料说明

本文档的主要内容详细介绍的是如何在麒麟系统上安装Java环境指南的详细资料说明1、介绍 请以root....
发表于 01-10 16:21 27次 阅读
如何在麒麟系统上安装Java环境指南的详细资料说明

养成良好习惯 避免Linux文件误删除

企业运维工作中50%以上的故障都是因内部人员管理失误造成的,“某程”就是个典型例子。如果规范工作中的一举一动,就会不断的犯错...
发表于 01-10 15:13 451次 阅读
养成良好习惯 避免Linux文件误删除

Android教程之第一行代码:Android电子教材免费下载

Android 从面世以来到现在已经发布了近二十个版本了。在这几年的发展过程中,谷歌为Android....
发表于 01-10 14:59 31次 阅读
Android教程之第一行代码:Android电子教材免费下载

Linux和Windows操作系统你更希望用哪个?

两个操作系统其实各有优势。你想用到的软件都有windows版本。而linux系统下却不一定,。lin....
发表于 01-10 14:52 129次 阅读
Linux和Windows操作系统你更希望用哪个?

Windows和Linux系统的优势与不足

Windows主要面对个人用户,主要用于日常工作以及玩游戏,软件游戏丰富;而Linux主要面对开发者....
发表于 01-10 14:46 98次 阅读
Windows和Linux系统的优势与不足

iTOP-iMX6UL全能板-linux-usb-wifi的使用

实验调试步骤。我们使用的是 imx6ul 全功能底板。 1 硬件 本文档测试使用一块 imx6ul 全功能开发板,我们需要确定底板有 wifi ...
发表于 01-10 10:15 458次 阅读
iTOP-iMX6UL全能板-linux-usb-wifi的使用

如何在Linux上创建tarball

tarball 通常用于备份个人或系统文件来创建存档,特别是在进行可能需要撤消的更改之前。例如,Li....
的头像 Linux爱好者 发表于 01-09 16:08 250次 阅读
如何在Linux上创建tarball

串行外设接口SPI通信协议的应用

SPI是串行外设接口(SerialPeripheral Interface)的缩写。SPI,是一种高....
发表于 01-09 14:58 124次 阅读
串行外设接口SPI通信协议的应用

Linux教程之Linux命令、编程器、Shell编程、实例大全pdf免费下载

本书全面、系统地介绍了Linux命令、编辑器及Shell编程的相关内容。既便于读者深入了解Linux....
发表于 01-08 14:55 34次 阅读
Linux教程之Linux命令、编程器、Shell编程、实例大全pdf免费下载

Linux操作系统之奥秘PDF中文版教材免费下载

通过本书规划的三大架构:进入系统、管理系统、Gl界面,你将可以完整地看到硬件、软件与操作系统的密切整....
发表于 01-08 14:55 38次 阅读
Linux操作系统之奥秘PDF中文版教材免费下载

Linux服务器搭建实践详解pdf中文版免费下载

本书首先对Linux操作系统进行了相关概述,并讲解了安装Red Hat Enterprise Lin....
发表于 01-08 14:55 34次 阅读
Linux服务器搭建实践详解pdf中文版免费下载

Linux教程之Linux命令详解词典PDF中文版免费下载

Linux图形模式下的各种应用程序、工具程序日益完善,操作界面也更为友善。对一般仅需计算机完成日常文....
发表于 01-08 14:55 37次 阅读
Linux教程之Linux命令详解词典PDF中文版免费下载

如何使用Linux进行C语言教学详细资料研究探讨

C 语言程序设计是高校计算机专业学生必修的一门专业基础课, 对掌握计算机技术起到具有十分重要的基础作....
发表于 01-08 11:26 32次 阅读
如何使用Linux进行C语言教学详细资料研究探讨

浅谈Linux的路由与网关

路由(Routing):路由是指从一个设备(一般指路由器)的接口上接收到数据包,依据设备所既定的某些....
发表于 01-04 15:10 157次 阅读
浅谈Linux的路由与网关

在嵌入式系统中使用Linux操作系统有以下优势

计算机用于嵌入式控制设备领域的历史和计算机本身的历史一样久远。最初的用于控制机电式电话交换器的通讯设....
发表于 01-04 15:05 155次 阅读
在嵌入式系统中使用Linux操作系统有以下优势

在嵌入式应用的领域里 Linux操作系统的前景很光明

现在 广泛用于各类计算应用,不仅包括 微型 腕表、手持设备( 和蜂窝电话)、因特网装置、瘦客户机、防....
发表于 01-04 14:55 147次 阅读
在嵌入式应用的领域里 Linux操作系统的前景很光明

ROM教程之Windows下解包编辑打包img使用教程

自从得知rom助手可以解包IMG的文件后,再也不用安装LINUX系统来解包和打包system.img....
发表于 01-04 11:31 43次 阅读
ROM教程之Windows下解包编辑打包img使用教程

如何进行Linux系统下的分区详细方法规格说明

关于Linux系统下的“分区”问题,对于新手来说一直是很头疼的。我来简单写一下,它的“分区”方法,规....
发表于 01-04 11:31 37次 阅读
如何进行Linux系统下的分区详细方法规格说明

基于μCLinux嵌入式操作系统上的浏览器内存管理策略研究详解

在嵌入式系统中,由于设备性能限制系统总的可分配内存相对较小,而在嵌入式平台上浏览器正常运行所需内存一....
发表于 01-03 15:13 114次 阅读
基于μCLinux嵌入式操作系统上的浏览器内存管理策略研究详解

【硬见小百科】SPI总线是什么?

SPI全称是串行外设接口(Serial Peripheral Interface),是由Motoro....
的头像 云创硬见 发表于 01-03 12:30 218次 阅读
【硬见小百科】SPI总线是什么?

Beyond Compare文件夹和文件对比工具应用程序免费下载

Beyond Compare是一款不可多得的专业级的文件夹和文件对比工具。使用它可以很方便地对比出两....
发表于 01-03 10:40 44次 阅读
Beyond Compare文件夹和文件对比工具应用程序免费下载

给嵌入式初学者推荐的书籍教程

本文档的主要内容详细介绍的是给嵌入式初学者推荐的书籍教程找本好好书可以让学习事半功倍。
发表于 01-03 09:42 88次 阅读
给嵌入式初学者推荐的书籍教程

如何使用ARM虚拟化扩展进行Android内核动态度量方法说明

针对现阶段内核级攻击对Android系统完整性的威胁,提出一种基于ARM虚拟化扩展的Android内....
发表于 01-03 09:11 67次 阅读
如何使用ARM虚拟化扩展进行Android内核动态度量方法说明

禁用Linux USB存储设备的三大方法

为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部....
发表于 01-01 10:54 94次 阅读
禁用Linux USB存储设备的三大方法

重装Linux操作系统为什么识别不了硬盘

硬盘的历史中,以往并行接口的 IDE 硬盘已经逐渐退出市场,而 SATA 串行机械硬盘,目前已是主流....
发表于 01-01 10:01 158次 阅读
重装Linux操作系统为什么识别不了硬盘

一文详解Linux内核测试现状

新的内核总是会定期发布出来,但是其实大家并不是十分了解内核是如何被深入测试的。那么这里可以提前告诉大....
的头像 Linuxer 发表于 01-01 09:06 264次 阅读
一文详解Linux内核测试现状

Linux经常出现的3道基础面试题快来复习吧

一请问uboot启动过程都做了些什么?二为什么uboot要关掉cache? 三nandflash和....
的头像 嵌入式ARM 发表于 12-31 10:40 470次 阅读
Linux经常出现的3道基础面试题快来复习吧

你所不知道的linux匿名管道知识详解

通过上面的解释可以看到, 假设 COMMAND1 | COMMAND2, 那么COMMAND1的标准....
的头像 马哥Linux运维 发表于 12-31 09:04 384次 阅读
你所不知道的linux匿名管道知识详解

Linux教程之Linux的系统指令大全资料免费下载

本文档的主要内容详细介绍的是Linux教程之Linux的系统指令大全资料免费下载
发表于 12-29 16:48 195次 阅读
Linux教程之Linux的系统指令大全资料免费下载

基于世界目前上三种通用的嵌入式操作系统分析比较研究

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、....
发表于 12-29 15:32 766次 阅读
基于世界目前上三种通用的嵌入式操作系统分析比较研究

关于嵌入式系统可视化集成开发平台的详细剖析

嵌入系统开发已经趋于规范化,但是嵌入式系统的开发并不像在普通PC机上进行软件开发那样容易,它同样需要....
发表于 12-29 15:22 396次 阅读
关于嵌入式系统可视化集成开发平台的详细剖析

五个主流Linux发行版在过去近三年里所经历的性能变化

可以看到,测试所使用的机器配置十分强劲,英特尔酷睿 i7 5775C 仍然是强大的 CPU,特别是其....
的头像 Linux爱好者 发表于 12-28 17:38 1226次 阅读
五个主流Linux发行版在过去近三年里所经历的性能变化

Linux静态元件库资料合集免费下载

本文档的主要内容详细介绍的是Linux静态元件库资料合集免费下载
发表于 12-28 17:04 183次 阅读
Linux静态元件库资料合集免费下载

Linux的封装库文件详细资料合集免费下载

本文档的主要内容详细介绍的是Linux的封装库文件详细资料合集免费下载。
发表于 12-28 16:41 173次 阅读
Linux的封装库文件详细资料合集免费下载

使用Linux进行GPS的卫星信号欺骗源码详细资料免费下载

本文档的主要内容详细介绍的是使用Linux进行GPS的卫星信号欺骗源码详细资料免费下载。
发表于 12-28 08:00 207次 阅读
使用Linux进行GPS的卫星信号欺骗源码详细资料免费下载

Windows或成“弃子” Linux终上位

时光倒退二十年,彼时不可一世的微软将开源软件视为眼中钉肉中刺,甚至吐槽其是知识产权的癌症。如今,从“....
的头像 嵌入式ARM 发表于 12-27 15:17 570次 阅读
Windows或成“弃子” Linux终上位

Linux4.21内核新增对AMD7nmeEPYCRome处理器的优化

AMD 7nm Zen2处理器预计将在明年一季度大规模上市,其中第二代EPYC霄龙先行,随后是消费级....
发表于 12-26 09:43 295次 阅读
Linux4.21内核新增对AMD7nmeEPYCRome处理器的优化

Linux操作系统的四道测试题和答案概述

本文档的主要内容详细介绍的是Linux操作系统的四道测试题和答案概述。
的头像 嵌入式ARM 发表于 12-25 18:51 765次 阅读
Linux操作系统的四道测试题和答案概述

一个python脚本看透Linux程序对库的依赖

我今天写了一个小小的python程序,可以在完全不看源代码的情况下,分析a如果调用b.so的时候,会....
的头像 Linuxer 发表于 12-24 13:44 520次 阅读
一个python脚本看透Linux程序对库的依赖

Linux关于Makefile的用法介绍

Make可以从一个名为Makefile的文件中获得如何构建程序的知识,该文件列出了每个非源文件以及如....
发表于 12-24 10:36 308次 阅读
Linux关于Makefile的用法介绍

汽车安全技术护驾卫士使用说明书资料免费下载

护驾卫士是一款集成了多种汽车主动安全技术的产品。使用目前市场上性能最高护驾卫士是一款集成了多种汽车主....
发表于 12-24 08:00 221次 阅读
汽车安全技术护驾卫士使用说明书资料免费下载

AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)

TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...
发表于 09-25 11:51 50次 阅读
AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)