SPI是一种高速、全双工、同步总线。这样就允许单个SPI总线上连接多个SPI从设备。对于SPI总线从设备并没有固化的地址,而是通过CS信号区分不同的设备。另外因为SPI总线频率最高可以达到70MHz,所以需要较大吞吐量的操作方案进行数据传输,通常使用DMA进行操作。总体上来说,系统对于SPI总线驱动的需求就是要能实现总线的各种功能,并且满足类似于I2C总线的各种无关性需求。图7-5SPI总线数据传输信号规范......
2023-11-22
USB(Universal Serial Bus)是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等通信产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其他相关领域。
USB最初是由英特尔公司与微软公司倡导发起的,其最大的特点是支持热插拔和即插即用。当设备插入时,主机枚举到此设备并加载所需的驱动程序,使用比其他总线方便。在速度方面,USB 1.1的最大传输带宽为12Mbit/s,USB 2.0的最大传输带宽为480Mbit/s,USB 3.0的最大传输带宽为5Gbit/s。
USB的设计为非对称式的,它是主从式总线,任何USB事务都是由主机引发的。USB主机处于主模式,设备处于从模式。USB总线是由主机控制器和若干hub设备以及与hub连接的从设备组成的。USB总线拓扑如图7-12所示。图7-12引自《USB2.0规范》。
图7-12 USB总线拓扑
从图7-12可见,一个Host控制器会和root hub绑定,并可以通过Hub连接多个设备。
USB可以连接的外设有鼠标、键盘、游戏手柄、游戏杆、扫描仪、数码相机、打印机、硬盘和网络部件等各种设备。USB总线已经成为使用最广泛的设备连接标准。
规范中为了实现以上的功能对总线中的很多环节都进行了定义。一个USB物理设备可以承担多种功能,USB的术语中设备(device)指的是功能(functions),更注重逻辑性。规范中关于主从设备的交互如图7-13所示。
(www.chuimin.cn)
图7-13 USB主从设备交互框图
从图7-13可见,管道(pipe)把主机控制器和端点(endpoint)连接起来形成一个交互通道进行主从设备的交互。端点只能单向(进/出)传输数据,管道也是单向的。每个USB设备至少有两个端点/管道,分别是进和出两个方向,编号为0,用于控制总线上的设备。按照各自的传输类型,管道被分为4类:
●控制传输(Control)。一般用于短的、简单的设备命令和状态反馈,例如用于总线控制的0号管道。
●同步传输(Isochronous)。按照有保障的速度传输,可能有数据丢失,例如实时的音频和视频。
●中断传输(Interrupt)。用于必须保证尽快反应的设备(有限延迟),例如鼠标和键盘。
●批量传输(Bulk)。使用余下的带宽大量地(但是没有对于延迟、连续性、带宽和速度的保证)传输数据,例如普通的文件传输。
为了访问端点,必须获得设备一个分层的配置。连接到主机的设备只有一个设备描述符(device descriptors),而设备描述符有若干配置描述符(configuration descriptors)。这些配置一般与状态相对应,例如活跃和节能模式。每个配置描述符有若干接口描述符(interface setting),用于描述设备的一个功能方面,所以可以用于描述从设备不同的功能,如一个相机可能拥有视频和音频两个接口。接口描述符有一个默认接口设置(default interface set-tings)和可能多个替代接口设置(alternate interface settings),接口设置中包含端点描述符。一个端点能够在多个接口和替代接口设置之间复用。
总体上来说,系统对USB总线驱动的需求就是要能按规范实现总线的各种功能,并且满足总线的各种无关性的需求。
有关深入剖析Linux内核与设备驱动的文章
SPI是一种高速、全双工、同步总线。这样就允许单个SPI总线上连接多个SPI从设备。对于SPI总线从设备并没有固化的地址,而是通过CS信号区分不同的设备。另外因为SPI总线频率最高可以达到70MHz,所以需要较大吞吐量的操作方案进行数据传输,通常使用DMA进行操作。总体上来说,系统对于SPI总线驱动的需求就是要能实现总线的各种功能,并且满足类似于I2C总线的各种无关性需求。图7-5SPI总线数据传输信号规范......
2023-11-22
可以说I2C已经成为嵌入式设备不可或缺的总线形式。嵌入式处理器通常作为I2C总线的主设备,而传感器等外围设备是总线上的从设备。I2C总线数据传输信号规范如图7-2所示。图7-2I2C总线数据传输信号规范从图7-2可见,具体传输是由Start和Stop标记的,并且每传送一个字长都需要有ACK标记。总体上来说,系统对I2C总线驱动的需求就是要能实现总线的各种功能,并且满足以上的各种无关性需求。......
2023-11-22
DM 3730的I2C控制器框架如图7-4所示。图7-4引自《DM 3730芯片手册》中第2798页的框图。关于DM 3730I2C的驱动部分,主要分析相关初始化和总线传输的操作。由于I2C作为控制和获取状态信息,数据量并不大,而且相关的操作频率并不高,这样在中断中进行相关的处理,对系统的影响并不大。......
2023-11-22
整个系统启动和初始化的过程,Linux内核是在主处理器启动之后才会执行。不同的处理器启动流程并不相同,这就要求Linux内核能支持各种处理器的初始化操作。Linux内核各个模块,大部分设计时做到了体系结构无关。Linux内核是一个庞大的系统,最终生成的操作系统代码的执行文件非常大。......
2023-11-22
SPI总线框架对这两类设备进行管理,具体的框架如图7-6所示。通常的SPI驱动都是在内核实现并在内核态执行的,所以就不对spidev进行详细的分析。SPI总线框架整体的功能就是这样,接下来看看具体各部分的实现。在SPI总线框架中相应的实体是spi_board_info,内容如下:其中的主要信息是与总线信号相关的属性。......
2023-11-22
内存管理是Linux内核非常重要的功能,可以说是最基础的功能之一。图4-31存储系统层次结构整个内存管理的首要需求自然是内存物理空间的管理。特别是视频应用需求的不断增长使得内存管理的需求也发生了变化,由于图像分辨率以及显示分辨率的不断提高,而协处理器通常又需要连续的物理内存,这样就有对于几兆甚至十几兆连续内存管理的需求。而原有的Linux内核内存管理并不能满足这种需求,这样就需要开发新的内存管理方法。......
2023-11-22
也正是因为Linux内核的唯一性,各个不同发布版本拥有相同的框架。Linux内核是在整个Linux系统的最底层,它负责管理硬件,运行用户程序,并保持系统整体的安全性和完整性。可以说是Linux系统的根和灵魂。图3-1中看到Linux内核还有另一层面的含义。这对于Linux内核同样适用。所以对Linux内核的剖析、学习和研究也不能独立于系统进行,而是要综合考虑应用、内核和硬件等各方面的信息和内容。这样才能更全面、深刻地理解Linux内核。......
2023-11-22
相关推荐