SPI是一种高速、全双工、同步总线。这样就允许单个SPI总线上连接多个SPI从设备。对于SPI总线从设备并没有固化的地址,而是通过CS信号区分不同的设备。另外因为SPI总线频率最高可以达到70MHz,所以需要较大吞吐量的操作方案进行数据传输,通常使用DMA进行操作。总体上来说,系统对于SPI总线驱动的需求就是要能实现总线的各种功能,并且满足类似于I2C总线的各种无关性需求。图7-5SPI总线数据传输信号规范......
2023-11-22
对总线来说,总线设备的多样性是一个方面,另一个方面处理器中对总线的管理也是多样的。比如USB总线,Intel处理器的总线管理设备(即总线控制器)和ARM处理器的总线管理设备就有很大的差别。总线上连接的设备并不想知道自己具体和哪些总线管理设备进行交互。总线控制器只关注于具体的总线操作,所以总线控制器也并不关心连接在总线上的设备如何使用总线实现其功能。总线控制器是一个服务管理的实体,要能为所有连接到总线上的设备进行服务,并管理它们,不至于彼此冲突。
可见总线控制器和总线设备两者要完成的任务有联系,但是彼此不能限定对方,这就要求实现总线控制器和总线设备的无关。
图3-18和图3-19分别展示了Linux内核在USB和I2C总线框架上如何实现总线控制器和总线设备无关。
图3-18 USB总线框架
从图3-18和3-19中可见,不同的总线框架解决总线控制器和总线设备无关是使用了相同的方法,就是抽象出总线核心来管理总线控制器和总线设备,并将两者有机的结合。对于USB总线有USB Core,对于I2C总线有I2C Core,都是完成总线核心的功能。
可见总线核心是要同时管理总线控制器和总线设备的。如图3-20所示,以USB总线为例展示了Linux内核如何实现该功能。(www.chuimin.cn)
从图3-20中可见,无论是总线控制器USB adapter还是总线设备USB device都会注册到USB core中,这样USB core就可以对两者进行管理。这其中的管理还包括在两者之间进行必要的绑定,比如说连接到USB总线控制器的USB设备,其操作必然要经过该总线控制器完成。这种绑定都可以通过USB设备发现由USB Core自动完成。
通过这些方法就能够实现总线控制器和总线设备无关。
图3-19 I2C总线框架
图3-20 Linux内核USB管理框架
有关深入剖析Linux内核与设备驱动的文章
SPI是一种高速、全双工、同步总线。这样就允许单个SPI总线上连接多个SPI从设备。对于SPI总线从设备并没有固化的地址,而是通过CS信号区分不同的设备。另外因为SPI总线频率最高可以达到70MHz,所以需要较大吞吐量的操作方案进行数据传输,通常使用DMA进行操作。总体上来说,系统对于SPI总线驱动的需求就是要能实现总线的各种功能,并且满足类似于I2C总线的各种无关性需求。图7-5SPI总线数据传输信号规范......
2023-11-22
DM 3730的I2C控制器框架如图7-4所示。图7-4引自《DM 3730芯片手册》中第2798页的框图。关于DM 3730I2C的驱动部分,主要分析相关初始化和总线传输的操作。由于I2C作为控制和获取状态信息,数据量并不大,而且相关的操作频率并不高,这样在中断中进行相关的处理,对系统的影响并不大。......
2023-11-22
USB的设计为非对称式的,它是主从式总线,任何USB事务都是由主机引发的。USB总线拓扑如图7-12所示。图7-12引自《USB2.0规范》。USB总线已经成为使用最广泛的设备连接标准。每个USB设备至少有两个端点/管道,分别是进和出两个方向,编号为0,用于控制总线上的设备。总体上来说,系统对USB总线驱动的需求就是要能按规范实现总线的各种功能,并且满足总线的各种无关性的需求。......
2023-11-22
1框架总体设计从输入设备框架的需求可知,内核的整个输入流程应该分为下层的各种输入设备和上层与用户的控制信息交互两个方面。从图6-1可见,输入设备系统框架的核心部分从底到上分为input driver,input core和event handler三个部分。应用层则要根据输入设备的事件进行相应的操作,为了给应用层统一的接口,输入设备框架对于输入事件进行了规范。......
2023-11-22
SPI总线框架对这两类设备进行管理,具体的框架如图7-6所示。通常的SPI驱动都是在内核实现并在内核态执行的,所以就不对spidev进行详细的分析。SPI总线框架整体的功能就是这样,接下来看看具体各部分的实现。在SPI总线框架中相应的实体是spi_board_info,内容如下:其中的主要信息是与总线信号相关的属性。......
2023-11-22
可以说I2C已经成为嵌入式设备不可或缺的总线形式。嵌入式处理器通常作为I2C总线的主设备,而传感器等外围设备是总线上的从设备。I2C总线数据传输信号规范如图7-2所示。图7-2I2C总线数据传输信号规范从图7-2可见,具体传输是由Start和Stop标记的,并且每传送一个字长都需要有ACK标记。总体上来说,系统对I2C总线驱动的需求就是要能实现总线的各种功能,并且满足以上的各种无关性需求。......
2023-11-22
图3-3Linux内核整体框架③bridges:桥梁层。Linux内核通过统一的接口操作设备,这样就屏蔽了各个设备的差异,从而降低了和硬件的耦合关系。Linux内核为了简化实现,将共享资源的进程作为线程。考虑到外部事件需要对执行流程进行转换,另外不同的应用执行流程之间需要切换,这就要在Linux内核的逻辑层抽象出调度器这一逻辑功能。......
2023-11-22
相关推荐