Linux SPI 驱动

这篇具有很好参考价值的文章主要介绍了Linux SPI 驱动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、SPI 驱动框架简介

Linux 内核将 SPI 驱动分为两部分:

  • SPI 总线驱动: SOC 的 SPI 控制器驱动,也叫做 SPI 适配器驱动。一旦编写完成就不再需要再做修改,其他的SPI 设备直接调用主机驱动提供的API 函数完成读写操作即可。
  • SPI 设备驱动:SPI 设备驱动就是针对具体的SPI 设备而编写的驱动。

二、SPI 主机驱动(spi_master )

Linux 内核使用 spi_master 表示 SPI 主机驱动。 spi_master 是个结构体,定义在 include/linux/spi/spi.h 文件中。

spi_message

spi 的数据会打包成spi_message ,然后以队列方式发送出去。

spi_master 两个用于数据传输的成员函数:

transfer

控制器数据传输函数。

int			(*transfer)(struct spi_device *spi, struct spi_message *mesg);

transfer_one_message

用于发送一个 spi_message

int (*transfer_one_message)(struct spi_master *master, struct spi_message *mesg);

三、spi 设备驱动(spi_driver)

Linux 内核使用spi_driver 结构体来表示spi 设备驱动,我们在编写spi 设备驱动的时候需要实现spi_driver 。spi_driver 结构体定义在 include/linux/spi/spi.h 文件中。定义如下:

struct spi_driver
{
    const struct spi_device_id *id_table;
    int         ( *probe )( struct spi_device *spi );
    int         ( *remove )( struct spi_device *spi );
    void            ( *shutdown )( struct spi_device *spi );
    struct device_driver    driver;
};

当 spi 设备和驱动匹配成功以后,probe 函数就会执行。

spi 设备驱动编写流程

  • 初始化 spi_driver 结构体

    包括匹配表,probe 函数

  • 向Linux 内核注册 spi_driver

    int spi_register_driver(struct spi_driver *sdrv)
    
  • 向Linux 内核 注销spi_driver文章来源地址https://www.toymoban.com/news/detail-417044.html

    void spi_unregister_driver(struct spi_driver *sdrv)
    

到了这里,关于Linux SPI 驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式Linux内核驱动】05_IIC子系统 | 硬件原理与常见面试问题 | 应用编程 | 内核驱动 | 总体框架

    1.1 IIC 基础 IIC协议简介—学习笔记_iic标准协议_越吃越胖的黄的博客-CSDN博客 I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接微控制器、传感器、存储器和其他外设。 I2C使用两条线(SDA和SCL)进行通信,可以连接多个设备,每个设备都有一个唯一的地址。I2C总线上的

    2024年02月09日
    浏览(35)
  • linux-2.6.22.6内核i2c驱动框架源码分析

    i2c是常见的通信协议,协议比较简单,只有数据和时钟两条线(SDA和SCL),i2c的通信分为主机和从机,主机一般占主导地位,从机可以有多个。 i2c通信的数据格式为(SDA上的数据):开始的7位里面指定了设备地址(因为有多个从机),第8位是读或写信号,表示此次传输是读还

    2024年02月11日
    浏览(42)
  • 【ZYNQ】SPI 简介及 EMIO 模拟 SPI 驱动示例

    SPI 是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,是一种高速、全双工、同步通信总线,可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。 SPI 有主、从两种模式,通常由

    2024年02月07日
    浏览(30)
  • 【全志T113-S3_100ask】15-1 内核5.4驱动spi屏幕——ILI9341

    本来想直接驱动mipi屏幕的,但是发现有一点点难度,所以想先研究一下小屏幕如何驱动。 本文章使用的芯片为全志T113-s3,目前使用的核心板是100ask的,但是官方开发板上面的spi接口不齐全,所以自制了一块板子进一步学习。 在原本的设备树中,配置是错误的,引脚都对不上

    2024年02月03日
    浏览(138)
  • Linux设备驱动之SPI驱动

    Linux下SPI驱动分成两部分:主机驱动和设备驱动。 主机驱动:         主机侧SPI控制器使用 struct spi_master 描述,该结构体中包含了SPI控制器的序号(很多SoC中存在多个SPI控制器),片选数量,SPI信息传输的速率,配置SPI模式的函数指针(4种模式),实现数据传输的函数指针

    2023年04月11日
    浏览(42)
  • Linux SPI 驱动

    Linux 内核将 SPI 驱动分为两部分: SPI 总线驱动 : SOC 的 SPI 控制器驱动,也叫做 SPI 适配器驱动。一旦编写完成就不再需要再做修改,其他的SPI 设备直接调用主机驱动提供的API 函数完成读写操作即可。 SPI 设备驱动 :SPI 设备驱动就是针对具体的SPI 设备而编写的驱动。 Linux 内

    2023年04月18日
    浏览(22)
  • Linux 下spi设备驱动

    参考: Linux kernel 有关 spi 设备树参数解析 - 走看看 Linux SPI驱动框架(1)——核心层_linux spi驱动模型_绍兴小贵宁的博客-CSDN博客 Linux SPI驱动框架(2)——控制器驱动层_全志h3 spi驱动_绍兴小贵宁的博客-CSDN博客 Linux SPI驱动框架(3)——设备驱动层_linux spi字符设备驱动_绍兴小贵宁的

    2024年02月09日
    浏览(26)
  • uboot下UCLASS框架详解---结合项目工作中spi master和flash驱动开发

    本文通过如何通过编写特定板子的spi master驱动从而识别到spi norflash设备,完成norflash设备的读写。 2.1 uclass uclass可以理解为一些具有相同属性的udevice对外操作的接口,uclass的驱动是uclass_driver,主要为上层提供接口。 udevice的是指具体设备的抽象,对应驱动是driver,driver主要负

    2024年02月07日
    浏览(32)
  • linux的SPI设备驱动程序

            串行外设接口(SPI)是四线总线:MOSI、MISO、串行时钟SCK和片选CS。它常用于连接闪存、AD/DA转换器。主设备生成时钟和管理片选CS,速度可达80MB,远超I2C总线。         SPI设备在内核中表示为struct spi_device{},管理他们的驱动程序的实例是struct spi_driver{}。spi的拓扑结构

    2024年02月13日
    浏览(30)
  • Linux驱动开发:SPI子系统

    MISO:主设备数据输入,从设备数据输出。 MOSI:主设备数据输出,从设备数据输入。 SCLK:时钟信号,由主设备产生。 CS:    从设备片选信号,由主设备控制。 CPOL(时钟极性) :   0:时钟起始位低电平      1:时钟起始为高电平   CPHA(时钟相位) :0:第一个时钟周期采样   1

    2024年02月06日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包