可以说I2C已经成为嵌入式设备不可或缺的总线形式。嵌入式处理器通常作为I2C总线的主设备,而传感器等外围设备是总线上的从设备。I2C总线数据传输信号规范如图7-2所示。图7-2I2C总线数据传输信号规范从图7-2可见,具体传输是由Start和Stop标记的,并且每传送一个字长都需要有ACK标记。总体上来说,系统对I2C总线驱动的需求就是要能实现总线的各种功能,并且满足以上的各种无关性需求。......
2023-11-22
I2C(Inter-Integrated Circuit)总线是一种由Philips公司开发的两线式串行总线(分别是时钟信号SCL和数据信号SDA)。如果带有高速扩展,则最高可到3.4MHz。其具有简单高效,总线占用空间小,使用芯片引脚少,互连成本低,可以进行多设备互连等优点,被广泛应用于处理器与外围设备的连接。
由于传感器技术的大力发展,且不需要大量的数据交换,所以I2C总线已被广泛用于处理器连接各种传感器。可以说I2C已经成为嵌入式设备不可或缺的总线形式。
从形式上看I2C是主/从形式总线,在任何时间点上只能有一个主控。嵌入式处理器通常作为I2C总线的主设备,而传感器等外围设备是总线上的从设备。从设备通常有固化的地址,主设备通过地址与从设备通信。
I2C总线连接的基本形式如图7-1所示。图7-1引自《DM 3730芯片手册》中第2777页框图。
图7-1 I2C总线连接基本形式框图
从图7-1可见,处理器中可以有多个I2C总线控制器,每个总线控制器形成一个单独的I2C总线,一条I2C总线允许连接多个设备,而且设备允许使用不同的接口电压,这些不同接口电压的设备分布要合理。如芯片的IO接口电压是1.8V,所以1.8V的设备要接近芯片,而高电压3.0V接口的设备则通过level shift实现升压后进行连接。(www.chuimin.cn)
总线可以连接各种设备,在物理设备上包含总线控制器以及总线设备。另外系统的硬件连接需要具有灵活性,不同的总线控制器可以连接不同的总线设备,也就是说总线控制器与总线设备要独立,不能够彼此相关。在软件方面也需要具有高度的灵活性,设备信息要与驱动无关,总线控制器的操作方法要与属性无关,还要在软件层面满足总线控制器与总线设备无关。
另外从设备的角度来看,I2C总线设备有具体的功能,而总线是实现功能的媒介,通过总线传输命令、状态信息等。这就需要总线系统提供信息交互的接口及规范,即总线数据传输的信号规范。I2C总线数据传输信号规范如图7-2所示。图7-2引自《DM 3730芯片手册》中第2778页框图。
图7-2 I2C总线数据传输信号规范
从图7-2可见,具体传输是由Start和Stop标记的,并且每传送一个字长都需要有ACK标记。通常传输信号的正确性是由物理的控制器来保证的,也可以通过GPIO进行模拟,但是需要软件进行配合。
总体上来说,系统对I2C总线驱动的需求就是要能实现总线的各种功能,并且满足以上的各种无关性需求。
有关深入剖析Linux内核与设备驱动的文章
可以说I2C已经成为嵌入式设备不可或缺的总线形式。嵌入式处理器通常作为I2C总线的主设备,而传感器等外围设备是总线上的从设备。I2C总线数据传输信号规范如图7-2所示。图7-2I2C总线数据传输信号规范从图7-2可见,具体传输是由Start和Stop标记的,并且每传送一个字长都需要有ACK标记。总体上来说,系统对I2C总线驱动的需求就是要能实现总线的各种功能,并且满足以上的各种无关性需求。......
2023-11-22
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
整个系统启动和初始化的过程,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
相关推荐