Pinctrl子系统、GPIO子系统概念

Pinctrl概念:

无论是哪种芯片,都有类似图 16.1 的结构:
要想让 pinA B 用于 GPIO ,需要设置 IOMUX 让它们连接到 GPIO 模块;
要想让 pinA B 用于 I2C ,需要设置 IOMUX 让它们连接到 I2C 模块。
为了将人们从繁杂的寄存器设置工作中解放出来,就把引脚的复用、配置抽出来,做成 Pinctrl 子系统,给 GPIO I2C 等模块使用。
从设备树开始学习 Pintrl 会比较容易。
这会涉及 2 个对象: pin controller client device
前者提供服务:可以用它来复用引脚、配置引脚。
后者使用服务:声明自己要使用哪些引脚的哪些功能,怎么配置它们。
pin controller
在芯片手册里找不到 pin controller ,它是一个软件上的概念,你可以认为它对应 IOMUX ──用来复用引脚,还可以配置引脚 ( 比如上下拉电阻等 )
注意, pin controller GPIO Controller 不是一回事,前者控制的引 脚可用于 GPIO 功能、 I2C 功能;后者只是把引脚配置为输入、输出等简单的功能。即先用 pin controller 把引脚配置为 GPIO ,再用 GPIO Controler 把引 脚配置为输入或输出。
client device:
“客户设备”,谁的客户? Pinctrl 系统的客户,那就是使用 Pinctrl 系统 的设备,使用引脚的设备。它在设备树里会被定义为一个节点,在节点里声明要用哪些引脚。
a) pin state
对于一个“ client device ”来说,比如对于一个 UART 设备,它有多个“状 态”:default sleep 等,那对应的引脚也有这些状态。
怎么理解?
比如默认状态下, UART 设备是工作的,那么所用的引脚就要复用为 UART 功 能。
在休眠状态下,为了省电,可以把这些引脚复用为 GPIO 功能;或者直接把 它们配置输出高电平。
b) groups function
一个设备会用到一个或多个引脚,这些引脚就可以归为一组 (group)
这些引脚可以复用为某个功能: function。( 复用功能的宏定义在arch/arm/boot/dts/imx6ul-pinfunc.h中
当然:一个设备可以用到多组引脚,比如 A1 A2 两组引脚, A1 组复用为 F1 功能,A2 组复用为 F2 功能。
c) Generic pin multiplexing node Generic pin configuration node
在上图左边的 pin controller 节点中,有子节点或孙节点,它们是给 client device 使用的。
可 以 用 来 描 述 复 用 信 息 : 哪 组 (group) 引 脚 复 用 为 哪 个 功 能 (function);
可以用来描述配置信息:哪组 (group) 引脚配置为哪个设置功能 (setting),比如上拉、下拉等。
注意 pin controller 节点的格式, 没有统一的标准, 每家芯片都不一样。 甚至上面的 group function 关键字也不一定有,但是概念是有的。

GPIO子系统概念:

要操作 GPIO 引脚,先把所用引脚配置为 GPIO 功能,这通过 Pinctrl 子系统来实现。
然后就可以根据设置引脚方向 ( 输入还是输出 ) 、读值──获得电平状态,写值──输出高低电平。
以前我们通过寄存器来操作 GPIO 引脚,即使 LED 驱动程序,对于不同的板子它的代码也完全不同。 当 BSP 工程师实现了 GPIO 子系统后,我们就可以:
在设备树里指定 GPIO 引脚
在驱动代码中:使用 GPIO 子系统的标准函数获得 GPIO 、设置 GPIO 方向、读取/ 设置 GPIO 值。
这样的驱动代码,将是单板无关的。
在设备树中指定引脚:
在几乎所有 ARM 芯片中, GPIO 都分为几组,每组中有若干个引脚。所以在 使用 GPIO 子系统之前,就要先确定:它是哪组的?组里的哪一个?
在设备树中,“ GPIO 组”就是一个 GPIO Controller ,这通常都由芯片厂家设置好。我们要做的是找到它名字,比如“gpio1” ,然后指定要用它里面的哪个 引脚,比如<&gpio1 0>
有代码更直观,下图是一些芯片的 GPIO 控制器节点,它们一般都是厂家定义好,在 xxx.dtsi 文件中: 
我们暂时只需要关心里面的这 2 个属性:
gpio-controller;
#gpio-cells = <2>;
gpio-controller ”表示这个节点是一个 GPIO Controller ,它下面有很 多引脚。
  #gpio-cells = <2> ”表示这个控制器下每一个引脚要用 2 32 位的数 (cell)来描述。 为什么要用 2 个数?
其实使用多个 cell 来描述一个引脚,这是 GPIO Controller 自己决定的。比如可以用其中一个 cell 来表示那是哪一个引脚,用另一个 cell 来表示它是高电平有效还是低电平有效,甚至还可以用更多的 cell 来示其他特性。 普遍的用法是,用第 1 cell 来表示哪一个引脚,用第 2 cell 来表示 有效电平:
GPIO_ACTIVE_HIGH : 高电平有效
GPIO_ACTIVE_LOW : 低电平有效
定义 GPIO Controller 是芯片厂家的事,我们怎么引用某个引脚呢?在自 己的设备节点中使用属性"[<name>-]gpios" ,示例如下:
上图中,可以使用 gpios 属性,也可以使用 name-gpios 属性。
在驱动代码中调用 GPIO 子系统
在设备树中指定了 GPIO 引脚,在驱动代码中如何使用? 也就是 GPIO 子系统的接口函数是什么?
GPIO 子系统有两套接口:基于描述符的 (descriptor-based) 、老的 (legacy)。前者的函数都有前缀“ gpiod_ ”,它使用 gpio_desc 结构体来表示 一个引脚;后者的函数都有前缀“gpio_ ”,它使用一个整数来表示一个引脚。要操作一个引脚,首先要 get 引脚,然后设置方向,读值、写值。

当pinctrl子系统配置引脚为GPIO模式后,才能用gpio子系统控制引脚。gpio 子系统是基于 pinctrl 子系统的,gpio 的 API 接口的实现很多都是基于 pinctrl 子系统的函数。

参考: https://www.bilibili.com/read/cv13931424/from=search&spm_id_from=333.337.0.0 出处:bilibili

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

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

相关文章

go语言学习--4.方法和接口

目录 1.方法 2.接口 2.1结构体类型 2.2具体类型向接口类型赋值 2.3获取接口类型数据的具体类型信息 3.channel 3.1阻塞式读写channel操作 2.3非阻塞式读写channel操作 4.map 4.1插入数据 4.2删除数据 4.3查找数据 4.4扩容 1.方法 方法一般是面向对象编程(OOP)的一…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.2 月末操作:GR/IR重组

2.6.2 月末操作&#xff1a;GR/IR重组 SAP在采购订单收货和发票校验时分别产生凭证&#xff0c;中间采用GR/IR过渡。GR即为收货&#xff0c;IR即为收票。月末&#xff0c;GR/IR的余额根据收货和收票的情况进行判断&#xff0c;转入“应付暂估”或“在途物资”&#xff0c;次月自…

C++ 数据类型

数据类型介绍 数据类型的作用&#xff1a;编译器预算数据分配的内存空间大小。 ps&#xff1a;可以通俗理解为&#xff1a;数据类型是用来规范内存的开销&#xff0c;约定数据在内存中的格式&#xff0c;便于存储。 变量 变量的语法 在计算机程序中&#xff0c;变量是用来存…

安装苹果ipa的方法

1、如何生成udid udid获取工具 https://www.betaqr.com/tools 提示下载后 2、爱思助手安装苹果app mac下载爱思助手&#xff0c;数据线连接手机&#xff0c;把ipa包拖到爱思助手app应用选项里 3、新手机调试需要先选中设备&#xff0c;再注册

VMwear桥接网络正确配置+静态IP设置

1.桥接网络配置 很多时候在VMware安装完虚拟机之后&#xff0c;会发现配置的桥接网络没有起作用&#xff0c;如果是Linux下输入ifconfig发现只有ipv6的地址而没有ipv4&#xff0c;说明没有桥接没有启用成功&#xff0c;需要按照以下方式来设置 在VMware的左上角打开编辑&#…

Redis(持久化 -- RDB AOF)

持久化 通常我们认为持久化为: 重启进程/重启主机之后, 数据仍然存在不丢失 把数据存储在硬盘上 – 持久 把数据存储在内存中 – 不持久 Redis 持久化 redis 是一个内存数据库, 也就是说本身是不持久的(但是快[效率高]), 于是 Redis 提供了持久化机制 — RDB 和 AOF 二者都是对…

H.265网页无插件播放EasyPlayer.js流媒体播放器常见问题及解答

EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;无须安装任何插件&#xff0c;起播快、延迟低、兼容性强&#xff0c;使用非常便捷。 今天我们来汇总下用户常见的几个问题及解答。 1、EasyPlayer.js播放多路H.265视…

Android 输入法框架

输入法属于输入系统的一部分&#xff0c;区别于输入系统只能向系统产生时间&#xff0c;输入法能向系统输入具体的内容&#xff0c;下面来认识输入法的大体框架&#xff0c;以下内容参考清华大学出版社出版的《Android图形显示系统》。 输入法框架包含3个组件&#xff0c;各组件…

python画图Matplotlib和Seaborn

python画图Matplotlib和Season 一、Matplotlib1、介绍2、安装3、内容二、Seaborn1、介绍2、安装3、内容一、Matplotlib Matplotlib官网 1、介绍 Matplotlib 是一个 Python 的绘图库,用于创建高质量的二维图表和一些基本的三维图表。它广泛应用于科学计算、数据分析、工程学和…

基于springboot+vue实现的的成人教育教务系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

AI时代,搜索引擎的巨头地位恐怕不保了

兄弟们&#xff0c;你们使用搜索网站的频率有降低吗&#xff1f; ChatGPT 已经流行了一年多了&#xff0c;这期间数个大模型都发展了起来。 搜索引擎本质上也属于问答系统&#xff0c;所以&#xff0c;在大模型成熟之后&#xff0c;我使用搜索的频率越来越低了。 主要是因为…

水牛社:互联网赚钱秘籍,免费项目,你真敢要吗?

免费是最贵的。真正理解并使用这句话的只有少数人&#xff0c;今天在网上分享一下免费项目背后的逻辑&#xff0c;抛开现象&#xff0c; 本质是最重要的。 我从事互联网工作15年。不管是过去还是现在&#xff0c;总有人喜欢问有没有免费项目&#xff1f; 其实我平时懒得回答…

java基础语法(13)

1. final关键字 final概述 学习了继承后&#xff0c;我们知道&#xff0c;子类可以在父类的基础上改写父类内容&#xff0c;比如&#xff0c;方法重写。那么我们能不能随意的继承API中提供的类&#xff0c;改写其内容呢&#xff1f;显然这是不合适的。为了避免这种随意改写的情…

C++初阶---vector(STL)

1、vector的介绍和使用 1.1、vector的介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是…

MATLAB 普通场景的道路点云分割 (方法一)(56)

MATLAB 普通场景的道路点云分割(方法一) (56) 一、分割原理二、算法实现1.代码一、分割原理 基于这样一个认识:大部分情况下,点云都是分块去处理的,在某块点云场景中,点云区域不大,地面基本是水平分布的,不会有较大的坡度,因此将其认为是一个法向与Z轴大致平行的平…

Python空间分析简明教程

数据世界是一个活生生的、会呼吸的事物。 当一个城市的犯罪率上升时&#xff0c;这是因为现实世界中有人在某个地方犯罪。 有警察局、住宅区和商业区、人口密度以及可以与位置相关联的人的地方。 所有这些东西都存在于数据框和表格之外的世界中。 空间分析使数据科学家能够回答…

实战环境-Activiti7从入门到专家(4)

背景 对于activiti7 已经有了感性认知&#xff0c;并且已经获得了源代码&#xff0c;梳理了核心的API。后面还有大量的内容&#xff0c;包括BPMN规范的落地&#xff0c;但是我们不能只停留在理论层次&#xff0c;需要从实际罗德的内容展开&#xff0c;因此需要构建实战环境。 …

WD西部数据正式通知客户:HDD与NAND继续涨价!

人工智能&#xff08;AI&#xff09;市场的快速增长引发了对数据存储的巨大需求。加之去年因市场环境因素导致HDD制造商减产&#xff0c;自去年下半年以来&#xff0c;高容量HDD供不应求&#xff0c;致使整体HDD价格显著上涨。据TechNews援引的行业消息指出&#xff0c;自去年第…

[每日算法 - 阿里机试] leetcode739. 每日温度

入口 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/daily-temperatures/descr…

windows安装charles抓包iphone

安装charles抓包iphone charles基础介绍windows安装 charles基础介绍 Charles 是在 PC 端常用的网络封包截取工具&#xff0c;在做移动开发时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要截取网络封包来分析。除了在做移动开发中调试端口外&#xf…