Linux设备树中的 gpio 信息

一.  简介

前面几篇文章讲解了 pinctrl 子系统, pinctrl 子系统重点是设置 PIN( 有的 SOC 叫做 PAD) 的复用 和电气属性。
注意:如果 pinctrl 子系统将一个 PIN 复用为 GPIO 的话,那么接下来就要用到 gpio 子系统了。如果 PIN用作其他功能如 I2C,串口等功能,就不会用到 gpio子系统。
gpio 子系统顾名思义,就是用于初始化 GPIO, 并且提供相应的 API 函数,比如,设置 GPIO 为输入输出,读取 GPIO 的值等。
gpio 子系统的主要目的就是方便驱动开发者使用 gpio 。驱动 开发者在设备树中添加 gpio 相关信息,然后,就可以在驱动程序中使用 gpio 子系统提供的 API 函数来操作 GPIO Linux 内核向驱动开发者屏蔽掉了 GPIO 的设置过程,极大的方便了驱动开 发者使用 GPIO

二.  Linux设备树中的 gpio 信息

1.  SD卡设备节点

I.MX6ULL-ALPHA 开发板上的 UART1_RTS_B 做为 SD 卡的检测引脚, UART1_RTS_B 用为 GPIO1_IO19 ,通过读取这个 GPIO 的高低电平,就可以知道 SD 卡有没有插入。
首先肯定是将 UART1_RTS_B 这个 PIN 复用为 GPIO1_IO19 ,并且设置电气属性,也就是前面几篇文章讲的 pinctrl 节点。
打开 imx6ull-alientek-emmc.dts UART1_RTS_B 这个 PIN pincrtl 设置如下:
pinctrl_hog_1: hoggrp-1 {fsl,pins = <MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
......>;
};

3 行,设置 UART1_RTS_B 这个 PIN GPIO1_IO19
pinctrl 配置好以后,就是设置 gpio 了。 SD 卡驱动程序通过读取 GPIO1_IO19 的值来判断 SD
卡有没有插入,但是 SD 卡驱动程序怎么知道 CD 引脚连接的 GPIO1_IO19 呢?
肯定是需要设 备树告诉驱动!在设备树中 SD 卡节点下添加一个属性,来描述 SD 卡的 CD 引脚就行了, SD 卡驱动直接读取这个属性值,就知道 SD 卡的 CD 引脚使用的是哪个 GPIO 了。
SD 卡连接在 I.MX6ULL usdhc1 接口上,在 imx6ull-alientek-emmc.dts 中找到名为 “ usdhc1 ” 的节点,这个 节点就是 SD 卡设备节点,如下所示:
&usdhc1 {pinctrl-names = "default", "state_100mhz", "state_200mhz";pinctrl-0 = <&pinctrl_usdhc1>;pinctrl-1 = <&pinctrl_usdhc1_100mhz>;pinctrl-2 = <&pinctrl_usdhc1_200mhz>;/* pinctrl-3 = <&pinctrl_hog_1>; */cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;keep-power-in-suspend;enable-sdio-wakeup;vmmc-supply = <&reg_sd1_vmmc>;status = "okay";
};
6 行,此行本来没有,是作者添加的。 usdhc1 节点作为 SD 卡设备总节点, usdhc1 节点 需要描述 SD 卡所有的信息,因为驱动要使用。本行就是描述 SD 卡的 CD 引脚 pinctrl 信息 所在的子节点,因为 SD 卡驱动需要根据 pincrtl 节点信息来设置 CD 引脚的复用功能等。
第3~5 行的 pinctrl-0~2 ,都是 SD 卡其他 PIN pincrtl 节点信息。
但是大家会发现,其实在 usdhc1 节点 中,并没有 “ pinctrl-3 = <&pinctrl_hog_1> ” 这一行,也就是说并没有指定 CD 引脚的 pinctrl 信息, 那么 SD 卡驱动就没法设置 CD 引脚的复用功能啊?
这个不用担心,因为在 “ iomuxc ” 节点下 引用了 pinctrl_hog_1 这个节点,所以, Linux 内核中的 iomuxc 驱动就会自动初始化 pinctrl_hog_1 节点下的所有 PIN
7 行, “cd-gpios” 属性描述了 SD 卡的 CD 引脚使用的哪个 IO 。属性值一共有三个, 我们来看一下这三个属性值的含义。
&gpio1 ” 表示 CD 引脚所使用的 IO 属于 GPIO1 组,“ 19 表示 GPIO1 组的第 19 IO ,通过这两个值 SD 卡驱动程序就知道 CD 引脚使用了 GPIO1_IO19 。“ GPIO_ACTIVE_LOW ” 表示低电平有效,如果改为“ GPIO_ACTIVE_HIGH ”就表 示高电平有效。

根据上面这些信息,SD 卡驱动程序就可以使用 GPIO1_IO19 来检测 SD 卡的 CD 信号了。

2.  gpio1 节点信息

打开 imx6ull.dtsi ,在里面找到如下所示内容:
gpio1: gpio@0209c000 {compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio";reg = <0x0209c000 0x4000>;interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,<GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;gpio-controller;#gpio-cells = <2>;interrupt-controller;#interrupt-cells = <2>;
};

gpio1 节点信息,描述了 GPIO1 控制器的所有信息,重点就是 GPIO1 外设寄存器基地址以及 兼 容 属 性 。 关 于 I.MX 系 列 SOC GPIO 控 制 器 绑 定 信 息 请 查 看 文 档
Documentation/devicetree/bindings/gpio/ fsl-imx-gpio.txt (文档在 Linux内核源码目录下)。
2 行,设置 gpio1 节点的 compatible 属性有两个,分别为“ fsl,imx6ul-gpio ”和“ fsl,imx35-
gpio ”,在 Linux 内核中搜索这两个字符串就可以找到 I.MX6UL GPIO 驱动程序。
3 行, reg 属性设置了 GPIO1 控制器的寄存器基地址为 0X0209C000 ,大家可以打开
I.MX6ULL 参考手册》找到 " Chapter 28" ,有如图 45.2.2.1 所示的寄存器地址表:

从上表中可以看出, GPIO1 控制器的基地址就是 0X0209C000
6 行,“ gpio-controller ” 表示 gpio1 节点是个 GPIO 控制器。
7 行,“ #gpio-cells ” 属性和 “ #address-cells ” 类似, #gpio-cells 应该为 2 ,表示一共有 两个 cell ,第一个 cell GPIO 编号,比如,“ &gpio1 3 ” 就表示 GPIO1_IO03 。第二个 cell 表示 GPIO 极 性 , 如 果 为 0(GPIO_ACTIVE_HIGH) 的 话, 表 示 高 电 平 有 效 , 如 果 为 1(GPIO_ACTIVE_LOW) 的话,表示低电平有效。

总结:经过上面的分析,可以知道:对于 SD卡而言,SD卡检测引脚就是 GPIO1_19,而且是低电平有效。

所以在写 SD卡驱动时,可以读取 "cd-gpios" (当然对于不同芯片,可能该属性命名就不同)属性信息就可以得到 引脚。

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

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

相关文章

【SD】sadtalk

下载地址&#xff1a; 123&#xff1a;https://www.123pan.com/s/VzULVv-0OXX.html 提取码:3KhD 百度&#xff1a; https://pan.baidu.com/share/init?surlRB9oTmlbIV0pg1Th-Tdd4Q 提取码: uk87 效果不是很好&#xff0c;适合小图片。推荐&#xff1a;heygen 参考设置&…

Gold-YOLO(NeurIPS 2023)论文与代码解析

paper&#xff1a;Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism official implementation&#xff1a;https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 存在的问题 在过去几年里&#xff0c;YOLO系列已经…

【教学类-综合练习-08】20240105 大3班 综合材料(美术类:骰子、面具、AB手环)

背景需求 年终了&#xff0c;清理库存&#xff0c;各种打印的题型纸都拿出来&#xff0c;当个别化学习材料 教学过程&#xff1a; 时间&#xff1a;2024年1月2日上午 班级&#xff1a;大3班&#xff08;2周才去一次&#xff09; 人数&#xff1a;17人

leetcode刷题(剑指offer) 240.搜索二维矩阵Ⅱ

240.搜索二维矩阵Ⅱ 编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,…

达梦数据库增删改查常用操作及-2723: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值问题修复

创建表 CREATE TABLE DICT ( "ID" INT IDENTITY(1, 1) NOT NULL, "TYPE" VARCHAR(30), "CODE" BIGINT, "NAME" VARCHAR(300), "VALUE" VARCHAR(200), "DESCRIPTION" VARCHAR(255), "OPERATOR"…

shell脚本基础之条件语句详解

目录 一、条件语句 1、测试 1.1 测试判断 ​1.2 比较整数数值 1.3 字符串比较 1.4 双中括号的用法 1.5 () 与 {} 的用法及区别 2、if语句 2.1 单分支if语句 2.2 双分支if语句 2.3 多分支if语句 2.4 shell脚本的if语句案例 案例一 案例二 案例三 案例四 案例五…

数据分析-Pandas如何用图把数据展示出来

数据分析-Pandas如何用图把数据展示出来 俗话说&#xff0c;一图胜千语&#xff0c;对人类而言一串数据很难立即洞察出什么&#xff0c;但如果展示图就能一眼看出来门道。数据整理后&#xff0c;如何画图&#xff0c;画出好的图在数据分析中成为关键的一环。 数据表&#xff…

【基础算法练习】二分模板

文章目录 二分模板题二分的思想C 版本的二分整数二分模板 Golang 版本的二分整数二分模板 例题&#xff1a;在排序数组中查找元素的第一个和最后一个位置题目描述C 版本代码Golang 版本代码 二分模板题 704. 二分查找&#xff0c;这道题目是最经典的二分查找&#xff0c;使用于…

SpringBoot实现热部署

一、热部署&#xff08;Hot Swap&#xff09; 从Java1.4起&#xff0c;JVM引入了HotSwap&#xff0c;能够在Debug的时候更新类的字节码。所以使用热部署&#xff0c;可以实现修改代码后&#xff0c;无须重启服务就可以加载修改的代码&#xff0c;但是它只能用来更新方法体。 实…

/dev/sda1 contains a file system uith errors,check forced.

系列文章目录 /dev/sda1 contains a file system uith errors&#xff0c;check forced. MfgTool烧写工具 系列文章目录一、问题描述2、报错原因3、解决方法4、重启遇见问题5、解决办法 一、问题描述 打开虚拟机的时候卡顿&#xff0c;于是强制任务管理器关闭虚拟机&#xff0c…

详解一次一密

目录 一. 介绍 二. 一次一密方案 三. 正确性分析 四. 证明一次一密方案是完美安全 五. 一次一密的应用 六. 小结 一. 介绍 一次一密&#xff0c;英语写做one time pad。 在1917年&#xff0c;Vernam提出了一个完美安全的加密方案&#xff0c;后世将其称之为一次一密。在…

wfuzz网站模糊测试

https://github.com/xmendez/wfuzz Wfuzz: The Web fuzzer — Wfuzz 2.1.4 documentatio n 一、wfuzz介绍 WFuzz是基于Python开发的 Web安全模糊测试工具。可以将其理解为Fuzz一款暴力破解工具。根据用户提供的字典&#xff0c;获取web站点的敏感目录和信息。 Wfuzz 提供了一个…