RK3568驱动指南|第十六篇 SPI-第185章 SPI子系统框架

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。

【视频观看】嵌入式学习之Linux驱动(第十六篇 SPI_全新升级)_基于RK3568


  1.  第185章 SPI子系统框架

可以将整个SPI子系统用下面的框图来描述:

可以将上面这一SPI子系统划分为三个层次,分别为用户空间、内核空间和硬件层,内核空间就包括SPI设备驱动层、SPI核心层和SPI适配器驱动层,而本章的主要内容就是介绍SPI子系统框架中的内核空间。

185.1 SPI设备驱动层

SPI 设备驱动层的主要作用是编写驱动程序,使 SPI 外设能够正常工作。它创建了对应的设备节点,提供了标准化的接口,使得上层应用程序能够方便地与 SPI 设备进行交互。

具体来说,SPI 设备驱动层包含以下几个关键部分:

1. spi_device

·代表一个连接到 SPI 总线上的从设备

·包含从设备的地址、所属的 SPI 主设备等信息。

2. /dev/spiX 设备节点

·为上层应用程序提供设备访问的接口

·通过打开/读写/控制设备节点,应用程序可以与 SPI 设备进行交互。

·内核 SPI 子系统负责将应用程序的操作转发到对应的 spi_driver。

3. spi_driver

·实现了具体 SPI 从设备的驱动程序

·负责设备的初始化、读写、配置等操作。

·通过 spi_device 与设备进行交互。

·向上层提供设备访问的标准化接口。

185.2 SPI适配器驱动层

SPI 适配器驱动层是 SPI 子系统的重要组成部分,负责实现具体的 SPI 硬件控制器的驱动程序。SPI 适配器驱动程序的作用如下:

(1)提供标准化的 SPI 传输接口

·适配器驱动层为 SPI 核心层提供标准化的传输接口,确保不同的 SPI 控制器可以统一使用这些接口进行数据传输。

(2)实现 SPI 总线协议的时序控制和数据收发

·负责实现 SPI 总线协议的时序控制,包括时钟极性(CPOL)和时钟相位(CPHA)的配置。

·管理数据的发送和接收,确保数据传输的准确性和可靠性。

·通过硬件 SPI 模块自动完成时钟信号的生成和数据收发,提高通信效率。

(3)管理 SPI 总线上的从设备

·适配器驱动层负责管理 SPI 总线上的所有从设备,包括注册和注销从设备。

·确保 SPI 总线上的从设备可以正确地进行通信,协调主设备和从设备之间的交互。

(4)处理 SPI 总线错误和异常情况

·适配器驱动层负责监控和处理 SPI 总线上的错误和异常情况。

·提供错误恢复和重试机制,确保系统的稳定性和可靠性。

·处理硬件中断,及时响应数据传输中的各种异常情况。

185.3 SPI核心层

SPI 核心层位于 SPI 设备驱动层和 SPI 适配器驱动层之间,起到了承上启下的作用,负责 SPI设备驱动层和SPI适配器驱动层之间的数据传递。SPI核心层的主要函数为spi_write和 spi_read,这些函数提供了基本的读写接口。

核心函数介绍:

(1)spi_write

函数作用:用于向SPI从设备发送数据。

函数参数介绍:

struct spi_device *spi: 指向目标 SPI 从设备的指针。

const void *buf: 数据缓冲区。

size_t len: 要发送的字节数。

这个函数负责生成符合 SPI 协议的时序和数据帧,并通过对应的 SPI 适配器驱动程序进行实际的总线操作。

(2)spi_read

函数作用:用于从SPI从设备接收数据。

函数参数介绍:

struct spi_device *spi: 指向目标 SPI 从设备的指针。

void *buf: 数据缓冲区。

size_t len: 要接收的字节数。

这个函数同样负责生成符合 SPI 协议的时序和数据帧,并通过对应的 SPI 适配器驱动程序进行实际的总线操作。

核心层的具体作用如下:

(1)核心层负责在设备驱动层和适配器驱动层之间传递数据。通过spi_write和spi_read函数,核心层将设备驱动层的数据传递给适配器驱动层进行实际的硬件操作。

(2)核心层生成符合SPI协议的时序和数据帧,确保数据能够正确地在SPI总线上传输。

(3)核心层提供标准化的接口,使得上层的设备驱动程序可以方便地进行数据传输,而无需关心底层硬件的具体实现。

至此,对于SPI子系统框架相关的内容就讲解完成了,其中SPI核心层和SPI适配器驱动层Linux内核以及SOC芯片原厂已经编写完成了,留给我们驱动工程师的部分只剩下SPI设备驱动层相关的部分,在后面的章节中将会以编写MCP2515 SPI转CAN的驱动程序为例,逐步完善SPI外设驱动框架。

你可能感兴趣的:(#,第十六期,SPI,嵌入式硬件,linux,驱动开发,RK3568)