SPI 设备驱动编写流程:创建SPI节点以及SPI设备节点(在设备树文件中)

一. 简介

SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动。

SPI主机控制器的驱动一般是芯片半导体厂商写好了,我们要编写的是SPI设备驱动代码。

本文开始来学习SPI设备驱动的编写流程(前提是支持设备树的情况)。

二. SPI 设备驱动编写流程:创建SPI节点以及SPI设备节点(在设备树文件中)

SPI 设备信息描述,针对支持设备树的情况下,就是在设备树文件中创建SPI节点以及SPI设备节点。分为两个部分:

1. 创建IO的 pinctrl节点

2. 创建SPI节点以及SPI设备子节点、

下面分别举例说明,如何创建IO的pinctrl节点,SPI节点以及SPI设备子节点。

1. 创建IO的 pinctrl节点

首先肯定是根据所使用的 IO 来创建或修改 pinctrl 子节点。

注意:唯独要注意的就是检查相应的 IO 有没有被其他的设备所使用,如果有的话需要将其删除掉!

例如,ALPHA开发板上的ICM20608设备是SPI设备,硬件原理图如下:

根据硬件原理图可知,ICM20608设备的SPI使用的是(IMX6ULL的)SPI3接口,的四个IO对应如下:

SPI3_CS  ->  UART2_TXD
SPI3_SCLK  -> UART2_RXD
SPI3_MISO  -> UART2_RTS
SPI3_MOSI  -> UART2_CTS

所以,在设备树文件中,创建SPI的四个IO的 pinctrl节点为:

pinctrl_ecspi3: icm20608 {fsl,pins = <MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0x10b0 /* CS */MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK 0x10b1 /* SCLK */MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO 0x10b1 /* MISO */  MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI 0x10b1 /* MOSI */                                                              >;};

2. 创建SPI节点以及SPI设备子节点

采用设备树的情况下, SPI 设备信息描述就通过创建相应的设备子节点来完成,我们可以 打开 imx6qdl-sabresd.dtsi 这个设备树头文件,在此文件里面找到如下所示内容:
&ecspi1 {fsl,spi-num-chipselects = <1>;cs-gpios = <&gpio4 9 0>;pinctrl-names = "default";pinctrl-0 = <&pinctrl_ecspi1>;status = "okay";flash: m25p80@0 {#address-cells = <1>;#size-cells = <1>;compatible = "st,m25p32";spi-max-frequency = <20000000>;reg = <0>;};
};
示例代码 I.MX6Q 的一款板子上的一个 SPI 设备节点,在这个板子的 ECSPI 上接了一个 m25p80 ,这是一个 SPI 接口的设备。

2 行,设置 “ fsl,spi-num-chipselects ” 属性为 1 ,表示只有一个设备。
3 行,设置“ cs-gpios ”属性,也就是片选信号为 GPIO4_IO09
4 行,设置“ pinctrl-names ”属性,也就是 SPI 设备所使用的 IO 名字。
5 行,设置“ pinctrl-0 ” 属性,也就是所使用的 IO 对应的 pinctrl 节点。
6 行,将 ecspi1 节点的“ status ”属性改为“ okay ”。
8~14 行, ecspi1 下的 m25p80 设备信息,每一个 SPI 设备都采用一个子节点来描述 其设备信息。
8 行的“ m25p80@0 ”后面的“ 0 ”表示 m25p80 的接到了 ECSPI 的通道 0 上。这个要根据自己的具体硬件来设置。
11 行, SPI 设备的 compatible 属性值,用于匹配设备驱动。
12 行,“ spi-max-frequency ”属性设置 SPI 控制器的最高频率,这个要根据所使用的 SPI 设备(SPI从机设备)来设置。 比如,在这里将 SPI 控制器最高频率设置为 20MHz
13 行, reg 属性设置 m25p80 这个设备所使用的 ECSPI 通道,和“ m25p80@0 ”后面的 0 ”一样。
后面我们在实现ALPHA开发板上的ICM20608 的设备树节点信息的时候,就可以参考以上SPI节点及SPI设备子节点的编写内容。

也可以查看SPI节点的绑定文档,在Linux内核源码目录下,具体查看绑定文档 fsl-imx-spi.txt,该文档说明了SPI节点如何创建,包括SPI节点必须写的属性或可选的属性。

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

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

相关文章

Python数据分析案例41——基于CNN-BiLSTM的沪深300收盘价预测

案例背景 虽然我自己基于各种循环神经网络做时间序列的预测已经做烂了.....但是还是会有很多刚读研究生或者是别的领域过来的小白来问这些神经网络怎么写&#xff0c;怎么搭建&#xff0c;给我一篇论文看看感觉很厉害的样子。我一看&#xff1a;普刊、单变量时间序列预测、一个…

计算机网络常问面试题

一.HTTPS是如何保证安全传输的 https通过使⽤对称加密、⾮对称加密、数字证书等⽅式来保证数据的安全传输。 客户端向服务端发送数据之前&#xff0c;需要先建⽴TCP连接&#xff0c;所以需要先建⽴TCP连接&#xff0c;建⽴完TCP连接后&#xff0c;服务端会先给客户端发送公钥…

sudo apt install ros-humble-gazebo-*显示网络不可达 Ubuntu20.04使用清华镜像本地安装/更新ros2

问题 sudo apt install ros-humble-gazebo-*显示网络不可达&#xff0c;这是因为sources.list中的镜像源有问题&#xff0c;换成清华源可以解决问题 解决 1 设置Ubuntu镜像源为清华镜像源 1.1 备份source.list文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.ba…

java数据结构与算法刷题-----LeetCode476. 数字的补数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 位运算&#xff1a;取出非前导0位标1&#xff0c;进行异或2. …

字符串常量池(StringTable)

目录 String的基本特性 String的内存分配 字符串拼接操作 intern()的使用 String的基本特性 String&#xff1a;字符串&#xff0c;使用一对""引起来表示 String声明为final的&#xff0c;不可被继承 String实现了Serializable接口&#xff1a;表示字符串是支持…

BetterZip解锁文件处理新境界

在数字化时代的浪潮中&#xff0c;文件处理成为了我们日常生活和工作中不可或缺的一部分。压缩软件&#xff0c;作为文件处理的得力助手&#xff0c;以其出色的压缩性能、便捷的操作体验以及强大的文件管理能力&#xff0c;赢得了广大用户的青睐。在众多压缩软件中&#xff0c;…

信息系统项目管理师0051:管理基础(4信息系统管理—4.1管理方法—4.1.1管理基础)

点击查看专栏目录 文章目录 第四章 信息系统管理4.1管理方法4.1.1管理基础1.层次结构2.系统管理第四章 信息系统管理 在信息技术和数据资源要素的推动下,社会各领域已经并正在加速进入数字化的全新发展时期,基于智能、网络和大数据的新经济业态正在形成,从“数字融合”向“数…

webpack-(plugin,本地服务器,路径别名,安装vue)

安装vue npm i vue-loader -D npm i vue 编写一个vue文件&#xff1a; 在index.html中设置 一个id为app的div 将vue文件挂载到app中 vue比较特殊&#xff0c;除了使用loader外&#xff0c;还使用了plugin const path require("path"); const { VueLoaderPlugin …

Spring声明式事务控制

文章目录 1.编程式事务控制相关对象(了解即可)1.1PlarformTransactionManager1.2 TransactionDefinition 2.基于XML的声明式事务控制2.1声明式事务控制的实现 3.基于注解的声明式事务控制 1.编程式事务控制相关对象(了解即可) 1.1PlarformTransactionManager PlatformTransac…

【信号处理】心电信号传统R波检测定位典型方法实现(matlab)

关于 心电信号中QRS波检测是一个非常重要的步骤&#xff0c;可以用于实现重要波群的基本定位&#xff0c;在定位基础上&#xff0c;可以进一步分析心电信号的特征变化&#xff0c;从而为医疗诊断提供必要的参考。 工具 MATLAB ECG心电信号 方法实现 ECG心电信号加载 ecg …

基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 2024最新项目 项目介绍 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示&#xff0c;构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff0c;我们提供了…

机器学习-随机森林温度预测模型优化

文章目录 前言旧模型训练新模型训练参数查看组合参数训练学习模型评估 前言 在机器学习-随机森林算法预测温度一文中&#xff0c;通过增大模型训练数据集和训练特征的方式去优化模型的性能&#xff0c;本文将记录第三方种优化方式&#xff0c;通过调整随机森林创建模型参数的方…