Linux系统SPI驱动学习笔记(二)
来源:互联网 发布:php程序用什么软件 编辑:程序博客网 时间:2024/05/01 10:21
五. SPI驱动的软件架构
在内核的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设备。
个人理解,对应的SPI控制器驱动程序即spi-imx.c,SPI通过接口封装层即spi.c,SPI协议驱动程序类似摄像头驱动,SPI通用设备驱动程序是spidev.c。
0 0
- Linux系统SPI驱动学习笔记(二)
- Linux系统SPI驱动学习笔记(二)
- Linux系统SPI驱动学习笔记(二)
- Linux系统SPI驱动学习笔记(一)
- Linux系统SPI驱动学习笔记(一)
- Linux系统SPI驱动学习笔记(一)
- Linux spi驱动(二)
- LINUX SPI驱动笔记
- Linux驱动笔记:SPI驱动
- 二、Linux spi 控制器驱动
- linux SPI驱动框架(二) -- 设备驱动
- Linux系统spi驱动程序分析---(二)
- Linux SPI驱动之笔记
- linux spi驱动开发学习
- linux spi驱动开发学习(二)-----spidev.c和spi test app
- Linux下的SPI总线驱动(二)
- linux内核SPI总线驱动分析(二)
- Linux下的SPI总线驱动(二)
- java之访问日志
- 数据库工具类实现
- springmvc前端控制器的配置
- MySQL索引背后的数据结构及算法原理
- 2017技术准备
- Linux系统SPI驱动学习笔记(二)
- 异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小结)
- 字母,数字,下划线或者数字的正则表达式
- PHP记录代码执行时间
- oj 中G++和C++区别
- 整型数据的溢出
- php写一个操作mysql的类
- 【设计模式】C#版单例模式实例讲解
- Monkeyrunner 脚本使用