当前位置: 首页 > news >正文

SPI总线设备驱动模型

SPI总线设备驱动模型


文章目录

  • SPI总线设备驱动模型
  • 参考资料:
    • 一、平台总线设备驱动模型
    • 二、 数据结构
      • 2.1 SPI控制器数据结构
      • 2.2 SPI设备数据结构
      • 2.3 SPI设备驱动
    • 三、 SPI驱动框架
      • 3.1 SPI控制器驱动程序
      • 3.2 SPI设备驱动程序
  • 致谢



参考资料:

  • 内核头文件:`include\linux\spi\spi.h

一、平台总线设备驱动模型

Linux驱动程序开始基于"平台总线设备驱动"模型,把驱动程序分成2边:

  • 左边注册一个platform_driver结构体,里面是比较固定的、通用的代码

  • 右边注册一个platform_device结构体,里面是硬件资源

    • 可以在C文件中注册platform_device
    • 也可以使用设备树创建一个节点,内核解析设备树时注册platform_device
      在这里插入图片描述

二、 数据结构

SPI子系统中涉及2类硬件:SPI控制器、SPI设备。

在这里插入图片描述
SPI控制器有驱动程序,提供SPI的传输能力。

SPI设备也有自己的驱动程序,提供SPI设备的访问能力:

  • 它知道怎么访问这个设备,它知道这个设备的数据含义是什么
  • 它会调用SPI控制器的函数来收发数据。

2.1 SPI控制器数据结构

参考内核文件:include\linux\spi\spi.h

Linux中使用spi_master结构体描述SPI控制器,里面最重要的成员就是transfer函数指针:
在这里插入图片描述

2.2 SPI设备数据结构

参考内核文件:include\linux\spi\spi.h

Linux中使用spi_device结构体描述SPI设备,里面记录有设备的片选引脚、频率、挂在哪个SPI控制器下面:

在这里插入图片描述

2.3 SPI设备驱动

参考内核文件:include\linux\spi\spi.h

Linux中使用spi_driver结构体描述SPI设备驱动:
在这里插入图片描述

三、 SPI驱动框架

在这里插入图片描述

3.1 SPI控制器驱动程序

SPI控制器的驱动程序可以基于"平台总线设备驱动"模型来实现:

  • 在设备树里描述SPI控制器的硬件信息,在设备树子节点里描述挂在下面的SPI设备的信息
  • 在platform_driver中提供一个probe函数
    • 它会注册一个spi_master
    • 还会解析设备树子节点,创建spi_device结构体

3.2 SPI设备驱动程序

跟"平台总线设备驱动模型"类似,Linux中也有一个"SPI总线设备驱动模型":

  • 左边是spi_driver,使用C文件实现,里面有id_table表示能支持哪些SPI设备,有probe函数
  • 右边是spi_device,用来描述SPI设备,比如它的片选引脚、频率
    • 可以来自设备树:比如由SPI控制器驱动程序解析设备树后创建、注册spi_device
    • 可以来自C文件:比如使用spi_register_board_info创建、注册spi_device


致谢

以上笔记源自韦东山老师的视频课程,感谢韦老师,韦老师是嵌入式培训界一股清流,为嵌入式linux开发点起的星星之火,也愿韦老师桃李满园。聚是一团火,散是满天星!

在这样一个速食的时代,坚持做自己,慢下来,潜心琢磨,心怀敬畏,领悟知识,才能向下扎到根,向上捅破天,背着世界往前行!
仅此向嵌入行业里的每一个认真做技术的从业者致敬!



相关文章:

SPI总线设备驱动模型

SPI总线设备驱动模型 文章目录SPI总线设备驱动模型参考资料:一、平台总线设备驱动模型二、 数据结构2.1 SPI控制器数据结构2.2 SPI设备数据结构2.3 SPI设备驱动三、 SPI驱动框架3.1 SPI控制器驱动程序3.2 SPI设备驱动程序致谢参考资料: 内核头文件&…...

开发同事辞职,接手到垃圾代码怎么办?

小王新加入了一家公司,这家公司有点年头,所以连屎山都是发酵过的,味道很冲。和大多数时运不济的程序员一样,到了这种公司,做的大多数工作,就是修补这些祖传代码,为其添砖加瓦。每当被折腾的筋疲…...

gRPC简介

grpc简介 grpc介绍可以参考官网。无论是rpc还是grpc,可以这样理解,都知道过去使用的单单体架构,而在2011年5月威尼斯的一个软件架构会议上提出了微服务架构,围绕业务功能进行组织(organized around business capability)&#xf…...

《MySQL系列-InnoDB引擎25》表-InnoDB逻辑存储结构

InnoDB逻辑存储结构 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。页在一些文档中有时也称为块(block),InnoDB存储引擎的逻辑存储结构…...

YOLOv8之C2f模块——与YOLOv5的C3模块对比

一、源码对比 YOLOv8完整工程代码下载:ultralytics/ultralytic   C2f模块源码在ultralytics/nn/modules.py下,源码如下: class C2f(nn.Module):# CSP Bottleneck with 2 convolutionsdef __init__(self, c1, c2, n1, shortcutFalse, g1, e…...

动态规划实例——换零钱的方法数(C++详解版)

原写了 Java 版本的如何求解换钱的方法数,近期进行了一些细节上的补充,以及部分错误更正,将语言换为了 C 语言。 基础题目 假设你现在拥有不限量的 1 元、5 元、10 元面值纸币,路人甲希望找你换一些零钱,路人甲拿出的…...

linux c

射频驱动 管理硬件设备、分配系统资源 内核由中断服务程序 调度程序 内存管理程序 网络和进程间进程通信程序 linux支持动态加载内核模块 支持多处理smp机制 内核可以抢占preemptive linux系统拥有多个发行版,可能由一个组织 公司和个人发行 VGA兼容或者更…...

第十三章 系统错误消息 - 一般系统错误消息 S - Z

文章目录第十三章 系统错误消息 - 一般系统错误消息 S - Z第十三章 系统错误消息 - 一般系统错误消息 S - Z 错误代码描述<SUBSCRIPT>下标值不合法或Global引用过长。<SWIZZLE FAIL>打开了一个oref&#xff0c;然后试图在另一个无法引用的相关对象中进行搅拌。这可…...

移动web基础

初始缩小&#xff1a;布局视口大于视觉视口 初始放大&#xff1a;布局视口小于视觉视口 布局视口等于视觉视口&#xff08;这种动作行为叫做理想视口&#xff09; <meta name"viewport" content"width375" /> <meta name"viewport"…...

MyBatis和MyBatis_Plus有什么区别【面试常考题】

MyBatis和MyBatis_Plus的区别 MyBatis_Plus MyBatis_Plus 是一个 MyBatis 的增强工具&#xff0c;只是在 MyBatis 的基础上增强了却没有做改变&#xff0c;MyBatis-Plus支持所有MyBatis原生的特性&#xff0c;所有引入MyBatis-Plus不会对现有的MyBatis框架产生任何影响。 MyBa…...

华为OD机试用Python实现 -【统一限载货物数最小值】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲统一限载货物数最小值题目描述输入描述输出描述说明示例一输入输出说明示例二输入输出说明Python 代码实现算法逻辑华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查…...

Vue入门小练习

文章目录Hello VueVue文本指令Vue属性绑定Vue双向绑定Vue事件绑定Vue猜数字Vue简单计算器Vue简单计算器升级版Vue循环遍历Vue员工列表练习Vue小练习Vue显示隐藏相关使用一些简单的小案例来熟悉Vue的基本使用方法 Hello Vue <!DOCTYPE html> <html lang"en"…...

Oracle-09-集合运算符篇

2022年4月13日23:01:25 通过本章学习,您将可以:1、描述 SET 操作符2、将多个查询用 SET 操作符连接组成一个新的查询目录 🏆一、SET OPERATORS ⭐️1.1、UNION /UNION ALL ⭐️1.2、INSTERSECT ⭐️1.3、MINUS dz...

获取浏览器(服务端)请求中特定的Cookie

有必要解释一下HttpServletRequest接口&#xff0c;因为我们需要从它里面获取Cookie。 HttpServletRequest HttpServletRequest是一个Java接口&#xff0c;提供了访问HTTP请求信息的方法&#xff0c;例如HTTP方法、请求URI、头部、参数和会话属性。它是Java Servlet API的一部…...

c++11 标准模板(STL)(std::unordered_set)(九)

定义于头文件 <unordered_set>template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templat…...

python实战应用讲解-【实战应用篇】文件操作(附python示例代码)

目录 知识储备 使用 python-libarchive-c 模块 创建压缩文件 解压文件 查看信息...

OpenCV-Python系列(二)—— 图像处理(灰度图、二值化、边缘检测、高斯模糊、轮廓检测)

一、【灰度图、二值化】 import cv2 img cv2.imread("lz2.png") gray_img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图 # 二值化&#xff0c;(127,255)为阈值 retval,bit_img cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) cv2.imshow(photo1,im…...

ccc-台大林轩田机器学习基石-hw1

文章目录Question1-14Question15-PLAQuestion16-PLA平均迭代次数Question17-不同迭代系数的PLAQuestion18-Pocket_PLAQuestion19-PLA的错误率Question20-修改Pocket_PLA迭代次数Question1-14 对于有明确公式和定义的不需要使用到ml 智能系统在与环境的连续互动中学习最优行为策…...

hadoop03-MapReduce【尚硅谷】

大数据学习笔记 MapReduce 一、MapReduce概述 MapReduce是一个分布式运算程序的编程框架&#xff0c;是基于Hadoop的数据分析计算的核心框架。 MapReduce处理过程为两个阶段&#xff1a;Map和Reduce。 Map负责把一个任务分解成多个任务&#xff1b;Reduce负责把分解后多任务处…...

测牛学堂:软件测试python学习之异常处理

python的捕获异常 程序在运行时&#xff0c;如果python解释器遇到一个错误&#xff0c;则会停止程序的执行&#xff0c;并且提示一些错误信息&#xff0c;这就是异常。 程序停止执行并且提示错误信息&#xff0c;称之为抛出异常。 因为程序遇到错误会停止执行&#xff0c;有时…...

Perplexity环境新闻检索失效真相(2024最新API响应延迟根因分析)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity环境新闻搜索 Perplexity 是一款基于大语言模型的实时信息检索工具&#xff0c;其核心优势在于融合权威信源与上下文感知能力&#xff0c;特别适用于需要高时效性与高可信度的新闻类查询场景。在该环…...

IGBT开关波形实测分析:用示波器抓取米勒平台与拖尾电流,优化你的驱动参数

IGBT开关波形实战解析&#xff1a;从示波器捕获到驱动参数优化 当你在实验室里面对一块IGBT电路板&#xff0c;示波器屏幕上跳动的波形往往藏着关键的设计秘密。那些看似平常的米勒平台、拖尾电流和电压尖峰&#xff0c;实际上是功率器件在向你诉说它的工作状态。本文将带你深入…...

UniApp跨端开发实战:一套代码给TabBar同时穿上iOS和Material Design的“毛玻璃”外衣

UniApp跨端毛玻璃TabBar实战&#xff1a;融合iOS与Material Design的设计语言 在移动应用开发中&#xff0c;底部导航栏&#xff08;TabBar&#xff09;作为核心交互组件&#xff0c;其设计直接影响用户体验。随着iOS毛玻璃&#xff08;Blur Effect&#xff09;和Android Mater…...

VisDrone2019数据集转换COCO格式实战:手把手教你用Python脚本搞定YOLOX训练数据准备

VisDrone2019数据集转换COCO格式全流程解析&#xff1a;从数据清洗到YOLOX适配 无人机视角下的目标检测一直是计算机视觉领域的特殊挑战。VisDrone2019作为该领域最具代表性的开源数据集&#xff0c;包含了10个类别、超过26万张标注图像&#xff0c;但原始数据格式与主流框架的…...

独立开发者一人全栈项目中的AI能力集成与运维简化思路

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者一人全栈项目中的AI能力集成与运维简化思路 对于独立开发者而言&#xff0c;一人承担全栈项目的设计、开发和运维是常态…...

实战分享:如何将YOLOv8+TensorRT推理引擎封装成DLL,并在Qt 5.9.9项目中轻松调用(附完整源码)

工业级视觉方案&#xff1a;YOLOv8模型TensorRT加速与Qt跨平台集成实战 在智能制造和嵌入式视觉领域&#xff0c;如何将训练好的深度学习模型高效部署到实际应用中一直是工程师面临的挑战。本文将详细介绍从YOLOv8模型转换到最终Qt应用集成的全流程&#xff0c;重点解决Windows…...

如何快速实现GitHub界面全面中文化:3分钟安装终极汉化插件

如何快速实现GitHub界面全面中文化&#xff1a;3分钟安装终极汉化插件 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese GitHub中文插件…...

浏览器Cookie本地导出实战指南:Get-cookies.txt-LOCALLY深度解析

浏览器Cookie本地导出实战指南&#xff1a;Get-cookies.txt-LOCALLY深度解析 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在Web开发和自动化测试…...

仅限内部团队使用的Perplexity航班缓存穿透防护策略——含Redis布隆过滤器+航班时刻表TTL动态算法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity航班信息查询 Perplexity 是一款以实时网络检索与引用驱动为特色的 AI 智能问答工具&#xff0c;其在航空旅行场景中可高效辅助用户获取最新、最准确的航班动态。不同于传统静态知识库模型&a…...

照片直播如何实现?Android 通过 PTP/MTP 有线连接相机的技术方案

一、应用场景 在婚礼摄影、赛事记录、电商拍摄等业务中&#xff0c;客户往往希望&#xff1a; 摄影师按下快门&#xff0c;手机或平板立刻能看到照片。 常见传输方式的对比&#xff1a; 方式 问题 WiFi 延迟高、断连频繁 蓝牙 传输速度慢 有线 OTG ✅ 稳定、实时、低…...