IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 嵌入式Linux驱动开发---GPIO子系统和Pinctrl子系统 -> 正文阅读

[嵌入式]嵌入式Linux驱动开发---GPIO子系统和Pinctrl子系统

从传统GPIO开发开始

使用过STM32的人都知道,一个要使用一个GPIO口需要先配置某个PIN的复用功能,速度,上下拉等电气属性,然后在设置PIN所对应的GPIO。这个过程一般由程序员阅读芯片手册然后根据对寄存器的操作去控制这些因素。由于大多数32位SOC的引脚设置都基本是这两个方面,因此Linux封装了两个子系统,分别是Pinctrl和Gpio子系统

GPIO子系统和Pinctrl子系统的关系

Pinctrl子系统的作用,正如它全称所表明的那样:Pin Control,引脚控制器。
对于板子上的引脚,pinctrl 子系统主要工作内容如下:
①、获取设备树中 pin 信息。
②、根据获取到的 pin 信息来设置 pin 的复用功能
③、根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。
一组引脚的功能可能是复用作IIC或者SPI等,其中一种选择就是GPIO功能,当它们作为GPIO使用时,GPIO子系统就开始作用起来。由他来控制这些引脚的设置,是输入还是输出,如果是输出是输出高还是输出低
其工作方式类似与下图:
从左到右,左边是实际引脚。通过pinctrl子系统来决定他们的电气特性,分组(group)并设定功能(function)。图中画出的选择有GPIO I2C SPI三种功能,如果选择设置为GPIO,此时就由GPIO子系统开始接管对这组引脚的控制。
在这里插入图片描述

Pinctrl在设备树中的表示

Pinctrl是软件上的一种概念,他应该分为两个部分,类似互联网技术中服务端和客户端的意思
服务端对应的就是: pin controller
客户端对应的是: client device

Pin controller就是选择的服务提供商,负责将引脚分组,设置功能,以供client选择。Pin Controller作为提供方其描述一般写在.dtsi
一般以下图的格式描述自己所提供的服务:
在这里插入图片描述
其中:
ts,pins用于描述这组(groups)服务所包含的引脚,这里只测试一个PK7的引脚,如果需要更多引脚 可以在尖括号内追加 使用空格隔开
mux,val所代表的是你想设置的功能(functions),这里的选择由不同的公司所设计而决定。
具体细节查询路径:/Documentation/devicetree/bindings/pinctrl下厂家提供的binding文件

在这里插入图片描述
此处所选中的语句就是对mux,val的值的解释,说明这其中有0到3的选项可以选择。
根据我对手上的表格的查询:
最左边是引脚,右边对应的0就是default所对应的功能,其功能号码从0~3可选
每个引脚,0~3所对应的功能和其他引脚都是不同的。
在这里插入图片描述
服务商的dts语法格式,每个芯片厂商的写法都是不太一样的,但是虽然写法不一,在程序中所实现的解析dts中引脚信息的函数所做的事情都是差不多的,都是根据of函数获取到设备树中的节点信息,以此来作为pin controller的设置依据。服务商提供了选择后,在dts文件中就可以使用这些选择了。在这张图中,左边就是对信息的Pinctrl声明,而右边是设备在引用所需使用的引脚信息。gpio 子系统的主要目的就是方便驱动开发者使用 gpio,驱动开发者在设备树中添加 gpio 相关信息,然后就可以在驱动程序中使用 gpio 子系统提供的 API函数来操作GPIO, Linux 内核向驱动开发者屏蔽掉了 GPIO 的设置过程,极大的方便了驱动开发者使用 GPIO。
在这里插入图片描述
在这里插入图片描述
pinctrl配置好以后就是设置GPIO了,假设我们需要一个引脚作为检测设备插入的引脚
我们需要让设备驱动程序知道需要去检测哪一个引脚,这就需要在设备树上提前写好:在设备数中
的xx设备节点下添加一个属性来描述检测引脚就可以了。驱动程序直接读取这个属性值就知道检测功能用的是哪个引脚了。
在这里插入图片描述

韦东山
https://blog.csdn.net/thisway_diy/article/details/119910335
https://cloud.tencent.com/developer/article/1709010

正点原子的开发手册

风雨兼程
https://blog.csdn.net/yangguoyu8023/article/details/122329717

Hello Cruel World
https://www.cnblogs.com/hutiann/p/7780185.html#:~:text=gpio-ranges

XiaoBaWu
https://blog.csdn.net/qq_28992301/article/details/53321610

https://blog.csdn.net/qq_26093511/article/details/88413324

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:22:29  更:2022-08-19 19:25:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:48:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码