0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SPI驱动源文件目录在哪

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-25 10:49 次阅读

SPI 驱动源文件目录

Linux common spi driver

kernel-4.14/drivers/spi/spi.c  Linux 提供的通用接口封装层驱动
kernel-4.14/drivers/spi/spidev.c  linux 提供的 SPI 通用设备驱动程序
kernel-4.14/include/linux/spi/spi.h  linux 提供的包含 SPI 的主要数据结构和函数

spi 控制器驱动,IC 厂商提供,不同厂商命名不同

kernel-4.14/drivers/spi/spi-mt65xx.c  MTK SPI 控制器驱动
kernel-4.14/drivers/spi/spi-mt65xx-dev.c
kernel-4.14/include/linux/platform_data/spi-mt65xx.h

dts

kernel-4.14/arch/arm/boot/dts/...
kernel-4.14/arch/arm64/boot/dts/...

以上文件对应如下 SPI 驱动软件架构:

图片

SPI 控制器驱动程序

SPI 控制器不用关心设备的具体功能,它只负责把上层协议驱动准备好的数据按 SPI 总线的时序要求发送给 SPI 设备,同时把从设备收到的数据返回给上层的协议驱动,因此,内核把 SPI 控制器的驱动程序独立出来。

SPI 控制器驱动负责控制具体的控制器硬件,诸如 DMA 和中断操作等等,因为多个上层的协议驱动可能会通过控制器请求数据传输操作,所以,SPI 控制器驱动同时也要负责对这些请求进行队列管理,保证先进先出的原则。

SPI 通用接口封装层

为了简化 SPI 驱动程序的编程工作,同时也为了降低【协议驱动程序】和【控制器驱动程序】的耦合程度,内核把控制器驱动和协议驱动的一些通用操作封装成标准的接口,加上一些通用的逻辑处理操作,组成了 SPI 通用接口封装层。

这样的好处是,对于控制器驱动程序,只要实现标准的接口回调 API,并把它注册到通用接口层即可,无需直接和协议层驱动程序进行交互。而对于协议层驱动来说,只需通过通用接口层提供的 API 即可完成设备和驱动的注册,并通过通用接口层的 API 完成数据的传输,无需关注 SPI 控制器驱动的实现细节。

SPI 协议驱动程序

SPI 设备的具体功能是由 SPI 协议驱动程序完成的,SPI 协议驱动程序了解设备的功能和通信数据的协议格式。向下,协议驱动通过通用接口层和控制器交换数据,向上,协议驱动通常会根据设备具体的功能和内核的其它子系统进行交互。

例如,和 MTD 层交互以便把 SPI 接口的存储设备实现为某个文件系统,和 TTY 子系统交互把 SPI 设备实现为一个 TTY 设备,和网络子系统交互以便把一个 SPI 设备实现为一个网络设备。如果是一个专有的 SPI 设备,我们也可以按设备的协议要求,实现自己的专有协议驱动。

SPI 通用设备驱动程序

考虑到连接在 SPI 控制器上的设备的可变性,在内核没有配备相应的协议驱动程序,对于这种情况,内核为我们准备了通用的 SPI 设备驱动程序,该通用设备驱动程序向用户空间提供了控制 SPI 控制的控制接口,具体的协议控制和数据传输工作交由用户空间根据具体的设备来完成,在这种方式中,只能采用同步的方式和 SPI 设备进行通信,所以通常用于一些数据量较少的简单 SPI 设备。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16203

    浏览量

    177413
  • 驱动
    +关注

    关注

    12

    文章

    1825

    浏览量

    85178
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1701

    浏览量

    91326
收藏 人收藏

    评论

    相关推荐

    Linux中CMake的使用3-不同目录多个源文件

    上篇(Linux中CMake的使用2-同目录下多个源文件)介绍了在同一目录下有多个源文件时如何编写CMakeLists.txt。
    的头像 发表于 09-21 08:49 4003次阅读
    Linux中CMake的使用3-不同<b class='flag-5'>目录</b>多个<b class='flag-5'>源文件</b>

    matlab用户目录在哪里设置呀?

    求助各位大神,matlab用户目录在哪里设置呀?注意是用户目录,不是当前目录
    发表于 10-27 10:44

    请问TI烧写程序集中SPI烧写程序时*.ais文件在哪目录下?

    TI烧写程序集中,SPI flash烧写程序是输入烧写文件名,烧写失败,请问这个文件默认应该放在哪目录下?
    发表于 05-17 17:08

    如何在PSoC Creator中设置和/或向目录源文件添加搜索目录

    你好,如何在PSoC Creator中设置和/或向目录源文件添加搜索目录?谢谢,云基 以上来自于百度翻译 以下为原文Hello, How do I set and/or add a search
    发表于 06-20 15:25

    C源文件的完整目录路径是什么?

    我在Windows Explorer下找不到自己添加的C源文件和头文件。在我指定的项目目录中看不到那些.c和.h文件,这有点奇怪,因为它们没有隐藏到我所能识别的程度。即使在使用命令行提
    发表于 04-02 08:55

    请问Multisim中的Electronics Workbench\EWB9 目录在哪啊?

    请问Multisim中的Electronics Workbench\EWB9 目录在哪啊?我想在Multisim中添加一个labview仪器,书上说要把生成的程序复制到这个文件中,找了很久都没找到。还是说要安装其他东西?
    发表于 04-21 16:34

    keil自带的ST例程添加自己的源文件和头文件应该放到哪个目录

    用keil里的例程,修改写GPIO流水灯的例程。直接在main()函数配置,是可以实现了;可是我做液晶显示用自己的源文件和头文件,应该放到哪个目录下呢?比如说我的keil是装在D盘的。我直接在D
    发表于 05-22 07:22

    请问DevEco目录在哪里可以设置编译包含?

    用 Native C++ 进行开发,在CMakeLists.txt 中添加了包含目录,但是编译报错了。请问DevEco目录在哪里可以设置编译包含?
    发表于 04-15 11:50

    Labview宝典(程序宝典+源文件

    Labview宝典(程序宝典+源文件),有源文件
    发表于 12-22 14:50 0次下载

    调音板--protel源文件

    调音板--protel源文件 原理图 PCB图 都是源文件
    发表于 03-10 17:06 0次下载

    音调板 protel格式源文件

    音调板 protel格式源文件 PCB源文件
    发表于 06-15 17:36 46次下载

    AN147的源文件

    AN147的源文件
    发表于 06-05 16:39 3次下载
    AN147的<b class='flag-5'>源文件</b>

    Linux中CMake的使用2-同目录下多个源文件

    上篇文章(Linux中CMake的使用1-单个源文件)介绍了编写CMakeLists.txt的最基础用法——只有一个源文件的情况。
    的头像 发表于 09-20 08:57 1732次阅读
    Linux中CMake的使用2-同<b class='flag-5'>目录</b>下多个<b class='flag-5'>源文件</b>

    MegaRAID PSoC目录在自述文件看到重要提示

    电子发烧友网站提供《MegaRAID PSoC目录在自述文件看到重要提示.zip》资料免费下载
    发表于 08-02 16:03 0次下载
    MegaRAID PSoC<b class='flag-5'>目录在</b>自述<b class='flag-5'>文件</b>看到重要提示

    最新MegaRAID PSoC目录在自述文件看到重要提示

    电子发烧友网站提供《最新MegaRAID PSoC目录在自述文件看到重要提示.zip》资料免费下载
    发表于 08-23 14:10 0次下载
    最新MegaRAID PSoC<b class='flag-5'>目录在</b>自述<b class='flag-5'>文件</b>看到重要提示