深圳集团网站开发公司,wordpress管理员页面404,网站推广优化是什么意思,房价2024年暴跌SPI驱动框架
SPI驱动属于总线-设备-驱动模型的#xff0c;与I2C总线设备驱动模型相比#xff0c;大体框架是一样#xff0c;他们都是实际的总线。总体框架如下图所示#xff1a; 从上到下#xff0c;分为三层#xff0c;用户空间#xff0c;内核空间#xff0c;和硬件…SPI驱动框架
SPI驱动属于总线-设备-驱动模型的与I2C总线设备驱动模型相比大体框架是一样他们都是实际的总线。总体框架如下图所示 从上到下分为三层用户空间内核空间和硬件层。
用户空间
在用户空间/dev/spi0和/dev/spi1是SPI总线的设备节点它们在用户空间提供了对SPI总线设备的访问接口。
/dev/spi0和/dev/spi1分别对应于SPI总线上的两个片选信号Chip Select。SPI总线上的每个设备都需要通过一个唯一的片选信号来选择与之通信的设备。因此对于每个片选信号都会创建一个对应的设备节点。
通过打开这些设备节点用户可以使用标准的读写操作来与SPI设备进行数据传输。例如可以通过向设备节点写入数据来发送数据到SPI设备或者通过从设备节点读取数据来接收SPI设备发送的数据。
内核空间
SPI设备驱动
SPI设备驱动用于支持连接到总线上的具体设备。对于SPI总线来说SPI设备驱动就是设备驱动的一种实现负责与SPI外设进行通信。
SPI设备驱动相比于I2C设备驱动需要提供更多的硬件信息设备名称、片选信号、最大传输速率、模式、中断号等在driver里则使用spi_read、spi_writer 等函数最终也会调用到 master-transfer 函数进行发送接收。
跟平台总线设备驱动模型类似Linux中也有一个SPI总线设备驱动模型
spi_driver使用C文件实现里面有id_table表示能支持哪些SPI设备有probe函数spi_device用来描述SPI设备比如它的片选引脚、频率 可以来自设备树比如由SPI控制器驱动程序解析设备树后创建、注册spi_device可以来自C文件比如使用spi_register_board_info创建、注册spi_device
SPI控制器驱动
SPI控制器驱动是总线设备驱动模型中的一种具体实现控制器驱动负责与硬件控制器进行通信并提供控制器的初始化、配置和控制等操作。
在设备树里描述SPI控制器的硬件信息在设备树子节点里描述挂在下面的SPI设备的信息在platform_driver中提供一个probe函数 它会注册一个spi_master还会解析设备树子节点创建spi_device结构体
SPI控制器驱动程序叫做spi_masterspi_controller主要提供transfer函数进行SPI协议的数据传输。spi_master驱动也是基于platform模型的注册spi_master时也会扫描一个链表进行SPI从设备的注册这和I2C适配器驱动基本一致。
SPI Core
SPI核心是Linux内核中的核心模块提供了SPI子系统的基本功能和接口。它包含了SPI总线设备的注册、注销、传输管理以及与SPI控制器和设备驱动的交互。SPI核心还提供了一组API供设备驱动程序使用如spi_register_driver()和spi_setup()等。
硬件层
SPI Host Controller
SPI Host Controller驱动是用于支持特定硬件平台上SPI控制器的驱动程序。
通过SPI Host Controller驱动用户空间程序可以通过标准的SPI设备节点如/dev/spi0、/dev/spi1来与SPI总线进行交互。 SPI Host Controller驱动提供了对SPI总线的底层硬件控制和传输操作的支持使得用户空间程序能够方便地与连接到SPI总线上的外设进行通信和控制。
SPI从设备
SPI从设备是连接到SPI总线上的外设。每个SPI从设备都有一个唯一的片选信号Chip Select用于选择与之通信的具体设备。从设备通常由设备驱动程序来管理它们可以是各种外设如传感器、存储器、显示器等。 小结 在一个SoC上可能有多条SPI总线一条总线对应一个SPI总线驱动每一条总线上又可以接多个SPI设备。 SPI-Core管理SOC上的所有 platform_device 和 platform_driver spi_devicespi_driver。