深度解析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】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

Linux ACL权限详细分析

ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问....

的头像 马哥Linux运维 发表于 10-22 10:00 47次 阅读
Linux ACL权限详细分析

Linux服务器被入侵后的检测过程详细资料分享

故事是这样的,大年初一,客户反应他们服务器无法访问,查看路由,发现某oracle+tomcat服务器....

的头像 嵌入式资讯精选 发表于 10-20 11:53 269次 阅读
Linux服务器被入侵后的检测过程详细资料分享

GitHub贡献第一的公司竟然是微软

提起微软公司,不少人第一反应是老牌巨头专注于私有化软件盈利模式,这大抵是源于微软前CEO Steve....

的头像 人工智能 发表于 10-20 11:01 264次 阅读
GitHub贡献第一的公司竟然是微软

网上流传的一份没有答案的Linux运维面试题详细分析

近网上流传了一份没有答案的Linux运维面试题。趁工作之余,利用自己三年的运维经验交出了一份答卷。欢....

的头像 马哥Linux运维 发表于 10-20 10:05 198次 阅读
网上流传的一份没有答案的Linux运维面试题详细分析

linux入门教程之简单快速的了解linux

Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而....

发表于 10-19 17:46 49次 阅读
linux入门教程之简单快速的了解linux

Linux教程之linux下如何备份还原mysql数据库

本文介绍了linux下如何备份与恢复mysql数据库。数据库备份是非常重要的。如果定期做好备份,这样....

发表于 10-19 17:18 27次 阅读
Linux教程之linux下如何备份还原mysql数据库

有关Linux支持的任何更新

自从digikey宣布这些工具以来,已经有好几年了,而且对Linux的支持还有一些模糊的承诺......对此有何更新? 以上来自于谷歌翻...

发表于 10-19 16:51 33次 阅读
有关Linux支持的任何更新

FPGA编辑器浏览按钮在Linux上不起作用

当我尝试打开文件并单击“浏览...”按钮时,我在Linux上使用fpga_editor描述了AR#20250上描述的问题。 我尝试了什么(没有成...

发表于 10-19 14:40 43次 阅读
FPGA编辑器浏览按钮在Linux上不起作用

Linux Boot卡在闪烁的LED服务器上

大家好, 两天前,一切都工作得很好,但现在我突然开始面对这个问题。 每当我尝试启动Cyclone V板时,Linux启动都会停留在“...

发表于 10-19 14:17 34次 阅读
Linux Boot卡在闪烁的LED服务器上

想知道在哪里可以获得英特尔Galileo的LINUX IMAGE FOR SD

我想知道在哪里可以获得英特尔Galileo的LINUX IMAGE FOR SD。 我需要这个图像用于无线通信配置。 拜托我需要...

发表于 10-19 14:12 17次 阅读
想知道在哪里可以获得英特尔Galileo的LINUX IMAGE FOR SD

嵌入式Linux教程之学习嵌入式Linux系统入门要进行的六个步骤

以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做lin....

发表于 10-19 11:12 35次 阅读
嵌入式Linux教程之学习嵌入式Linux系统入门要进行的六个步骤

linux mail命令的的使用方法详细资料解分

在这里整理一下Linux中mail命令的使用。mail也是一个常用的命令,我们在很多地方都要用到它,....

发表于 10-18 18:44 23次 阅读
linux mail命令的的使用方法详细资料解分

linux下awk以及重定向命令如何使用?

awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文....

发表于 10-18 17:25 16次 阅读
linux下awk以及重定向命令如何使用?

redhat linux安装和使用基础教程资料免费下载

1、收集系统资料:为了能够顺利安装和设置Linux系统,你必须将以下资料记录在案,以备系统安装时使用....

发表于 10-18 17:25 31次 阅读
redhat linux安装和使用基础教程资料免费下载

如何用iPhone远程管理Linux服务器

Workflow 如它名字一样是工作流的意思,它是一款 iOS 平台的神级自动化流程应用。简单的说就....

的头像 阿铭linux 发表于 10-17 17:25 388次 阅读
如何用iPhone远程管理Linux服务器

穿有不同外衣的Linux发布版无处不在

Herbert.xu,两年前来西邮兴趣小组与大家有过面对面的交流,也就是在那次交流中,得知其14岁开....

的头像 Linuxer 发表于 10-17 14:23 175次 阅读
穿有不同外衣的Linux发布版无处不在

Linux身份鉴别机制技术方案及原理

在Linux系统中,系统设置了多个帐号和组来进行管理,每个帐号都具有不同的权限,例如超级用户root....

的头像 Linuxer 发表于 10-17 14:17 175次 阅读
Linux身份鉴别机制技术方案及原理

NUC5i5RYB,linux下的hdmi音频调低采样率低

你好, 我在Linux下使用HDMI音频,但音频音调低,似乎采样率低。 安装以下BIOS, 版本:RYBDWi35.86A.0371.2...

发表于 10-17 11:55 36次 阅读
NUC5i5RYB,linux下的hdmi音频调低采样率低

Linux Make的使用以及命令安装详解

  对于GNU Make或许很多Windows开发的程序员并不是很了解,因为Windows中的很多集成开发环境(IDE)都帮我们做了这件事...

发表于 10-17 09:55 435次 阅读
Linux Make的使用以及命令安装详解

Linux c多线程编程的4个实例

[table] [tr][td]在主流的操作系统中,多任务一般都提供了进程和线程两种实现方式,进程享有独立的进程空间,而线程相对于进程来...

发表于 10-17 09:32 412次 阅读
Linux c多线程编程的4个实例

Linux嵌入式系统初学者的常见问题解决方法大全

该文档为Linux嵌入式系统初学者的常见问题解决方法大全(Linux学习指引篇)讲解文档,是一份不错的参考资料,感兴趣的可以下载看...

发表于 10-16 16:12 286次 阅读
Linux嵌入式系统初学者的常见问题解决方法大全

嵌入式Linux系统开发教程及案例分析(配套PPT)

本文主要介绍了嵌入式Linux系统开发教程及案例分析。 ...

发表于 10-16 15:52 459次 阅读
嵌入式Linux系统开发教程及案例分析(配套PPT)

成为嵌入式Linux工程师需要懂什么?

随着嵌入式行业的迅猛发展,嵌入式Linux凭借其系统发展的成熟度、市场应用的高份额也受到更多工程师朋友的青睐,越来越多的企业...

发表于 10-16 15:32 246次 阅读
成为嵌入式Linux工程师需要懂什么?

Linux图形界面的原理与构成和Linux命令行和vi编辑器的使用手册

本文档的主要内容详细介绍的是Linux基础教案主要内容是:(1) 了解Linux图形界面的原理与构成....

发表于 10-16 14:49 25次 阅读
Linux图形界面的原理与构成和Linux命令行和vi编辑器的使用手册

Linux入门教材之Linux设备驱动程序第三版电子教材免费下载

以 Linux 为代表的自由操作系统的很多优点之一, 是它们的内部是开放给所有人看的。 操作系统, ....

发表于 10-16 14:27 26次 阅读
Linux入门教材之Linux设备驱动程序第三版电子教材免费下载

操作系统是什么?Linux操作系统的原理与应用资料概述

认识操作系统-从使用者的角度看打开计算机,首先跳入眼帘的是什么?要拷贝一个文件,具体的拷贝操作是谁完....

发表于 10-15 18:20 22次 阅读
操作系统是什么?Linux操作系统的原理与应用资料概述

linux内核入门教材之linux内核设计与实现第二版中文版免费下载

此书是当今首屈一指的linux内核入门最佳图书。作者是为2.6内核加入了抢占的人,对调度部分非常精通....

发表于 10-15 18:20 26次 阅读
linux内核入门教材之linux内核设计与实现第二版中文版免费下载

Linux和C语言教程之Linux C编程一站式学习教材免费下载

本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一。该课程是为....

发表于 10-15 17:45 31次 阅读
Linux和C语言教程之Linux C编程一站式学习教材免费下载

若忘记了Linux系统的root密码,该怎么办?

很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?

的头像 嵌入式ARM 发表于 10-15 16:49 179次 阅读
若忘记了Linux系统的root密码,该怎么办?

微软宣布加入一个为保护Linux免于诉讼而设立的开源专利组织

事实上,Azure客户广泛使用Linux,微软也在Windows之外,向Linux提供SQL Ser....

的头像 科技美学 发表于 10-15 14:48 625次 阅读
微软宣布加入一个为保护Linux免于诉讼而设立的开源专利组织

嵌入式Linux C的基本知识点详解

嵌入式系统专业是综合了计算机硬件技术、计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知....

的头像 嵌入式ARM 发表于 10-15 09:20 550次 阅读
嵌入式Linux C的基本知识点详解

资深linux运维工程师的工作经验分享

本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧

的头像 工程师人生 发表于 10-15 09:20 262次 阅读
资深linux运维工程师的工作经验分享

Linux磁盘管理好坏或有什么影响

df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩....

的头像 嵌入式ARM 发表于 10-14 09:52 218次 阅读
Linux磁盘管理好坏或有什么影响

Linux中有哪些常见的文件类型?

本文档的主要内容详细介绍的是Linux中有哪些常见的文件类型?

发表于 10-12 18:02 39次 阅读
Linux中有哪些常见的文件类型?

Linux系统vi(vim)编辑器命令使用教程

vi(vim)是上Linux非常常用的代码编辑器,很多Linux发行版都默认安装了vi(vim)。v....

的头像 机器人在线订阅号 发表于 10-12 16:53 322次 阅读
Linux系统vi(vim)编辑器命令使用教程

如何进行单片机的安装详细方法电路图和程序资料免费下载

单片机技术自发展以来已走过了近20年的发展路程 。单片机技术的发展以微处理器(MPU)技术及超大规模....

发表于 10-12 16:44 48次 阅读
如何进行单片机的安装详细方法电路图和程序资料免费下载

大数据的学习中你需要掌握的十二大技术

大数据是对海量数据进行存储、计算、统计、分析处理的一系列处理手段,处理的数据量通常是TB级,甚至是P....

发表于 10-11 17:46 218次 阅读
大数据的学习中你需要掌握的十二大技术

你应该知道的27个Linux文档编辑命令

在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文....

的头像 马哥Linux运维 发表于 10-11 16:43 233次 阅读
你应该知道的27个Linux文档编辑命令

符合汽车级要求的Linux系统,AGL呼之欲出!

Linux是一个操作系统,类似于大家常见的Windows、Mac OS,区别于后者主要在于Linux....

的头像 高工智能汽车 发表于 10-11 10:01 467次 阅读
符合汽车级要求的Linux系统,AGL呼之欲出!

Linux常用命令的全拼整理

本文整理了常用命令的全拼,好像混进了什么奇怪的东西。

的头像 Linux爱好者 发表于 10-10 17:19 494次 阅读
Linux常用命令的全拼整理

为什么大部分手机供应商都不更新Linux内核?

相比消费者级的电子产品,企业级Linux系统供应商通常会及时更新内核。

的头像 嵌入式资讯精选 发表于 10-10 15:53 234次 阅读
为什么大部分手机供应商都不更新Linux内核?

在Linux上如何配置基于密钥认证的SSH?

众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和....

的头像 嵌入式资讯精选 发表于 10-09 17:28 214次 阅读
在Linux上如何配置基于密钥认证的SSH?

如何检测Linux系统是否被黑客入侵?

俗称“脚本小鬼”的家伙 是属于那种很糟糕的黑客,因为基本上他们中的许多和大多数人都是如此的没有技巧。

的头像 嵌入式ARM 发表于 10-06 09:13 193次 阅读
如何检测Linux系统是否被黑客入侵?

一文详解Linux内核的栈回溯与妙用

网上或多或少都能找到栈回溯的一些文章,但是讲的都并不完整,没有将内核栈回溯的功能用于实际的内核、应用....

的头像 Linuxer 发表于 10-05 10:02 225次 阅读
一文详解Linux内核的栈回溯与妙用

看看Linux中形形色色的接口

如果将内核比作一座工厂,那么Linux中众多的接口就是通往这个巨大工厂的高速公路。

的头像 Linuxer 发表于 10-04 09:19 173次 阅读
看看Linux中形形色色的接口

如何快速入门运维?了解Linux中的10个命令链接操作符

Linux命令中链接的意思是,通过操作符的行为将几个命令组合执行。Linux中的链接命令,有些像你在....

的头像 马哥Linux运维 发表于 10-03 19:33 237次 阅读
如何快速入门运维?了解Linux中的10个命令链接操作符

linux常用命令缩写和全拼资料免费下载

pwd:print work directory 打印当前目录 显示出当前工作目录的绝对路径 ps....

的头像 马哥Linux运维 发表于 10-03 10:58 415次 阅读
linux常用命令缩写和全拼资料免费下载

可用于管理进程的整个生命周期的八个Linux命令

一般来说,应用程序进程的生命周期有三种主要状态:启动、运行和停止。如果我们想成为称职的管理员,每个状....

的头像 嵌入式资讯精选 发表于 10-02 17:22 517次 阅读
可用于管理进程的整个生命周期的八个Linux命令

ACL是什么?ACL有什么用?

常见的文件操作命令 cp 和 mv 等都支持 ACL 权限,只是 cp 命令需要加上 -p 参数。但....

的头像 Linux爱好者 发表于 09-30 16:52 337次 阅读
ACL是什么?ACL有什么用?

Linux引发争议,贡献者能否删除上传的代码?

多位贡献者和社区成员对 COC 进行批判和反对,甚至有人在邮件列表发起了撤销贡献代码的讨论。

的头像 Linux爱好者 发表于 09-30 14:46 272次 阅读
Linux引发争议,贡献者能否删除上传的代码?

Linus Torvalds宣布暂时退出Linux内核的维护进程

“专注于技术的优势在于你可以拥有一些主要的客观衡量标准,这样一些共识才有可能达成,而社区也会非常健康....

的头像 Linux爱好者 发表于 09-30 09:05 307次 阅读
Linus Torvalds宣布暂时退出Linux内核的维护进程

Linux实用教程之Linux文件和目录操作总结

在Linux系统下除了一般文件之外,所有的目录和设备(光驱、硬盘等)都是以文件的形式存在的,本节主要....

发表于 09-29 16:18 71次 阅读
Linux实用教程之Linux文件和目录操作总结

你想知道的Ocaml语言

关于OCaml,最早称为Objective Caml,是Caml编程语言的主要实现,开发工具包含交互....

发表于 09-29 14:23 121次 阅读
你想知道的Ocaml语言

基于ARM的嵌入式Linux系统开发技术详解(完整版)电子教材免费下载

以嵌入式Linux 系统开发流程为主线,剖析了嵌入式Linux 系统构建的各个环节。从嵌入式系统基础....

发表于 09-29 08:00 108次 阅读
基于ARM的嵌入式Linux系统开发技术详解(完整版)电子教材免费下载

linux C语言教程之linux C编程实战电子教材免费下载

Linux开创了操作系统历史上的一一个奇迹,它不仅免费,而且开放全部的源代码。Linux已经发展成为....

发表于 09-27 17:32 56次 阅读
linux C语言教程之linux C编程实战电子教材免费下载

如何在Linux录制一个终端操作视频详细资料分析

录制一个终端操作可能是一个帮助他人学习 Linux 、展示一系列正确命令行操作的和分享知识的通俗易懂....

发表于 09-27 16:32 43次 阅读
如何在Linux录制一个终端操作视频详细资料分析

嵌入式Linux是什么?基础知识,系统环境搭建和综合应用详细讲解

本书从嵌入式Linux 的基础知识、系统环境搭建到综合应用,共分三个层次深入浅出地为读者拨开萦绕于嵌....

发表于 09-27 14:49 56次 阅读
嵌入式Linux是什么?基础知识,系统环境搭建和综合应用详细讲解

资深linux运维工程师的经验分享

这个阶段就是用已知软件架构大规模集群方案以及实现各种技术方案

的头像 工程师人生 发表于 09-27 10:59 328次 阅读
资深linux运维工程师的经验分享

3分钟搞定Linux正则表达式!

正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。

的头像 嵌入式资讯精选 发表于 09-26 16:04 258次 阅读
3分钟搞定Linux正则表达式!

Ubuntu安装教程详细资料免费下载

Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubun....

发表于 09-26 15:45 61次 阅读
Ubuntu安装教程详细资料免费下载

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 20次 阅读
AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)