Linux设备树中的 gpio 信息

news2024/9/22 21:19:16

一.  简介

前面几篇文章讲解了 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.coloradmin.cn/o/1404350.html

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

相关文章

【Web前端开发基础】CSS的定位和装饰

CSS的定位和装饰 目录 CSS的定位和装饰一、学习目标二、文章内容2.1 定位2.1.1 定位的基本介绍2.1.2 定位的基本使用2.1.3 静态定位2.1.4 相对定位2.1.5 绝对定位2.1.6 子绝父相2.1.7 固定定位2.1.8元素的层级关系 2.2 装饰2.2.1 垂直对齐方式2.2.2 光标类型2.2.3 边框圆角2.2.…

Midjourney在线绘画及提示词精选库

网址:https://chat.xutongbao.top/ 一碗面粉&#xff1a; Self-Rising Flour in a 50s colourful bowl. professional photograph --ar 720:1170 --v 6 烟花古建筑&#xff1a; At night, with the snow-covered scenery of the Beijing Forbidden City as the backdrop, brill…

【Linux C | 进程】进程终止、等待 | exit、_exit、wait、waitpid

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【网站项目】基于SSM的263货物进销管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构&#xff08;Hyper-converged infrastructure&#xff0c;缩写为HCI&#xff09;&#xff0c;是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中&#xff0c;同一厂商的服务器与存储等硬件单元&#xff0c;搭配…

MySQL数据库查询语句之组函数,子查询语句

组函数 以组为操作单位&#xff0c;一组数据得到一个结果。 在没有手动分组的前提下&#xff0c;整张表默认为一组数据 max(列名)&#xff1a;获取最大值 min(列名)&#xff1a;获取最小值 sum(列名)&#xff1a;获取总和 avg(列名)&#xff1a;获取平均值 count(列名)&a…

R303 指纹识别模块功能实现流程

1 基本通信流程 1.1 UART 命令包的处理过程 1.2 UART 数据包的发送过程 UART 传输数据包前&#xff0c;首先要接收到传输数据包的指令包&#xff0c;做好传输准备后发送成功应答包&#xff0c;最后才开始传输数据包。数据包主要包括&#xff1a;包头、设备地址、包标识、包长…

画眉(京东科技设计稿转代码平台)介绍

前言 随着金融App业务的不断发展&#xff0c;为了满足不同场景下的用户体验及丰富的业务诉求&#xff0c;业务产品层面最直接体现就是大量新功能的上线及老业务的升级&#xff0c;随之也给研发带来了巨大的压力&#xff0c;所以研发效率的提升就是当前亟需解决的问题&#xff…

加速社区数字化转型:物业app开发的最新趋势

在当今数字化时代&#xff0c;社区数字化转型已经成为业界焦点。特别是在物业管理领域&#xff0c;物业app开发正成为加速社区数字化转型的关键趋势。本文将探讨物业app开发的最新趋势&#xff0c;以及如何通过这些趋势推动社区数字化转型。 物业app开发的关键趋势 随着智能手…

分享150套简洁漂亮的html个人简历源码 /个人主页源码 /个人简介网页版(无加密打包)

这里打包分享150套简洁漂亮的html个人简历源码&#xff0c;个人主页源码&#xff0c;作为个人简介网页版&#xff0c;它的风格是简约大气的&#xff0c;扁平化的个人主页网站模板。 如果有用请点赞收藏&#xff0c;无加密源码&#xff0c;直接拿来就可以用的。它是htmlcss网页…

E. Increasing Subsequences

Part1 寒假思维训练之每日一道构造题&#xff08;思维 构造 数学&#xff09;题目链接&#xff1a; Problem - E - Codeforces 题意&#xff1a; 给定一个整数&#xff0c;数字n的范围是&#xff0c;闭区间&#xff0c;要求构造一个递增子序列&#xff08;可以不连续&…

平复一下心情 愉快一下 部署一款在线图书馆

注意:国内不让随便搞线上图书馆 注意:国内不让随便搞线上图书馆 注意:国内不让随便搞线上图书馆 1安装 1.1.拉取镜像 docker pull talebook/talebook 1.2.创建目录 mkdir -p /opt/talebook 1.3.创建并启动容器 docker run -d --name talebook -p 10015:80 -v /opt/taleb…

分布式深度学习中的数据并行和模型并行

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

vue3+Element plus实现登录功能

一、想要实现的效果 二、搭建登录静态 1、实现左边背景和右边登录栏的总体布局布局&#xff1a; <el-row class"content"><!--el-col 列&#xff1a; --><el-col :span"16" :xs"0" class"content-left"></el-c…

“智汇语言·驭领未来”——系列特辑:LLM大模型信息获取与企业应用变革

“智汇语言驭领未来”——系列特辑&#xff1a;LLM大模型信息获取与企业应用变革 原创 认真的飞速小软 飞速创软 2024-01-16 09:30 发表于新加坡 本期引言 LLM&#xff08;Large Language Model&#xff09;大型语言模型以其自然语言理解和生成能力&#xff0c;正以前所未有的…

day01 深度学习介绍

目录 1.1深度学习介绍 1.2神经网络NN 1、概念&#xff1a; 2、神经元 3、&#xff08;单层&#xff09;神经网络 4、感知机&#xff08;两层&#xff09; 5、多层神经网络 6、激活函数 &#xff08;1&#xff09;饱和与非饱和激活函数 &#xff08;2&#xff09;饱和激活…

【Emotion】 自动驾驶最近面试总结与反思

outline 写在前面面试问题回顾和答案展望 写在前面 最近由于公司部门即将撤销&#xff0c;开始了新一轮准备。 发现现在整体行情不太乐观&#xff0c;很看过去的尤其是量产的经验 同时本次面试我coding环节答得不好&#xff0c;&#xff08;其实也是半年前大家问的比较简单…

[分章:阅读]《我的第一本算法书》

第一章数据结构 1.链表 1、数据结构之一&#xff0c;线性排列数据&#xff0c;指针链接数据&#xff1b;访问O&#xff08;n&#xff09;&#xff0c;删除/添加O&#xff08;1&#xff09; 2、类似链条。 2.数组 1、线性排列数据&#xff0c;含数据下标&#xff08;即索引&…

NOIP2003提高组T1:神经网络

题目链接 [NOIP2003 提高组] 神经网络 题目背景 人工神经网络&#xff08;Artificial Neural Network&#xff09;是一种新兴的具有自我学习能力的计算系统&#xff0c;在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向&am…

edge网页白屏或一张蓝色背景图解决方案

我们使用edge时有是会遇到网页白屏或一张蓝色背景图。 搜索内容时出现 不用担心&#xff0c;按照以下步骤