【驱动】SPI驱动分析(二)-SPI驱动框架

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_readspi_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_master(spi_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),用于选择与之通信的具体设备。从设备通常由设备驱动程序来管理,它们可以是各种外设,如传感器、存储器、显示器等。

小结

  1. 在一个SoC上可能有多条SPI总线,一条总线对应一个SPI总线驱动,每一条总线上又可以接多个SPI设备。

  2. SPI-Core管理SOC上的所有 platform_deviceplatform_driverspi_devicespi_driver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Verilog/System Verilog的常用内置函数(数字验证)

Verilog/System Verilog的常用内置函数(数字验证) 1、数学运算相关的内置函数 2、字符串传递相关的内置函数 1)$ test$ plusarg 用于只输入字符串时 2)$ value$ plusargs (user_string, variable) 既可以输入字符串也可以输入各种…

【驱动】串口驱动分析(一)-软件架构

区分不同的终端类型 串行端口终端(/dev/ttySn) 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。 有段时间这些串行端口设备通常被称为终端设备&#xff0…

vue项目下npm或yarn下安装echarts多个版本

最近在大屏展示的时候,用到了百度的echarts图表库,看完效果图后,又浏览了一下echarts官网案例,大同小异。但是搬砖过程中发现实际效果和demo相差甚远,一番折腾发现,项目中安装的是echarts4.x版本&#xff0…

二进制求和

这篇文章会收录到 : 算法通关村第十三关-白银挑战数字与数学高频问题-CSDN博客 二进制求和 描述 : 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 题目 : LeetCode 67.二进制求和 : 67. 二进制求和 分析 : 这个题也是用字符串来表示数据的…

MySQL cAPI踩下的坑

1.使用mysql_real_query函数查询之后没有对结果集进行释放 MySQL中,如果查询之后没有释放结果集,会导致MySQL无法进行下一步操作 使用mysql_errno获取错误码:2014 正确做法 //执行查询 mysql_real_query(mysql_, stmt_str.c_str(), length…

深入理解Zookeeper系列-1.初识Zoookeeper

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

设计模式-创建型模式之原型、建造者设计模式

文章目录 七、原型模式八、建造者模式 七、原型模式 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直…

Python实现FA萤火虫优化算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , …

[操作系统] 文件管理

文章目录 5.1 磁盘调度算法1. 先来先服务算法( First Come First Served, FCFS) 算法2. 最短寻道时间优先算法( Shortest Seek Time First, SSTF) 算法3. 扫描算法( SCAN ) 算法4. 循环扫描算法( Circular Scan, CSCAN ) 算法5. LOOK 与 CLOOK 算法 5.2 进程写文件时&#xff0…

禁奥义·SQL秘籍

sql secret scripts sql 语法顺序、执行顺序、执行过程、要点解析、优化技巧。 1、语法顺序 如上图所示,为 sql 语法顺序与执行顺序对照图。其具体含义如下: 0、select: 用于从数据库中选取数据,即表示从数据库中查询到的数据的…

MySQL 大表设计

存储大规模数据集需要仔细设计数据库模式和索引,以便能够高效地支持各种查询操作。在面对数亿条数据,每条数据包含数百个字段的情况下,以下是我能想到的在设计数据库的时候需要注意的内容 1. 数据库设计 表结构设计 垂直分割:将大…

Golang WebSocket Ping Pong

在 Web 开发中,实时通信是一项非常重要的功能。通过实时通信,我们可以实现一些实时更新的功能,如实时聊天、实时数据更新、多人游戏等。而 WebSocket 是一种在 Web 开发中常用的实现实时通信的技术。本文将介绍如何使用 Golang 实现 WebSocke…

[架构之路-255]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件架构风格

目录 前言: 一、建筑风格 1.1 什么是建筑风格 1.2 常见的建筑风格 1.3 如何区分不同的建筑风格 二、软件架构风格概述 2.1 什么是软件架构风格 2.2 如何区分不同的软件架构风格 2.3 软件架构风格的发展阶段 2.4 软件架构风格与软件架构的区别 2.5 常见的…

数字图像处理(实践篇)十五 基于傅里叶变换的高通滤波和低通滤波

目录 一 Numpy 实现傅里叶变换 1 涉及的函数 2 实践 二 OpenCV 实现傅里叶变换 1 涉及的函数 2 实践 为了有效地和快速地对图像进行处理和分析,常常需要将原定义在图像空间的图像以某种形式转换(正变换)到另外一些空间,并利…

使用gparted进行ubuntu虚拟机的磁盘扩容(解决gparted无法拖动分区的问题)

在学习内核编译下载linux内核源码的时候,由于源码非常大,下载的时候提示磁盘空间不足,我才意识到刚开始创建虚拟机的时候分配了20GB的空间现在已经快用光了。在VM的设置里可以进行扩容,我扩展到了30GB重启却发现空间并没有加到我使…

数据库应用:MongoDB 文档与索引管理

目录 一、理论 1.MongoDB文档管理 2.MongoDB索引管理 二、实验 1.MongoDB文档管理 2.MongoDB索引管理(索引添加与删除) 3.MongoDB索引管理(全文索引) 4.MongoDB索引管理(多列索引) 5.MongoDB索引管…

【PyTorch】(一)简介

1. PyTorch是什么? PyTorch是一个深度学习框架,由Facebook于2016年开源发布。PyTorch是基于Torch框架的Python接口,旨在提供易用的强大工具来进行神经网络的构建和训练。PyTorch使用动态计算图,使得开发人员可以以类似于NumPy的方…

虚拟数字人有什么用?有哪些应用场景?

​​过去三年,元宇宙概念进入到大众视野,虚拟数字人备受关注。抖音达人柳夜熙、洛天依、网红虚拟偶像AYAYI等,随着元宇宙的流行,数字人也逐渐成为一种趋势。据行业预测,到2030年,中国的数字人总市场规模将达…

APITable免费开源的多维表格与可视化数据库本地部署公网远程访问

APITable免费开源的多维表格与可视化数据库公网远程访问 文章目录 APITable免费开源的多维表格与可视化数据库公网远程访问前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c…

Oracle很好的自动拼接某个字段的函数listagg使用实例

with mes1 as ( select c.cugrnname,cdd.cuassociatepackingname,c.cuReceiveTime,c.cuReceivePerson, CASE WHEN c.custatus 1 THEN N已发送 ELSE N已接收 END custatus ,c.cuSendTime, c.cuSendPerson,cdd.cupackingworkcenter,cdd.cuqty,pb.PRODUCTNAME,p.description…