RK3588 设备树pinctrl gpio子系统解析,解决GPIO无法正确拉高拉低的问题,RK3588设备树详解

news2024/11/16 1:22:49

一、RK3588设备树结构

firefly的官方说明文档RK3588gpio系统说明

function {
	group {
			rockchip,pin = <bank gpio func &ref>;
		};
};

其中,bank是所属的组,Core-3588J 有 5 组 GPIO bank:GPIO0-GPIO4,每组又以 A0-A7, B0-B7, C0-C7, D0-D7 作为编号区分。
首先,对于firefly的rk3588j的开发板,其设备树有几个比较重要的文件,
分别是/kernel/arch/arm64/boot/dts/rockchip/rk3588s-pinctrl.dtsi
/kernel/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
kernel/arch/arm64/boot/dts/rockchip/rk3588-firefly-itx-3588j.dtsi
/kernel/arch/arm64/boot/dts/rockchip/rk3588.dtsi
这个几个文件将其外围设备基本描述完全了,另外还有一些可能位于/kernel/arch/arm64/boot/dts/rockchip/rk3588-diff.dtsi内,
第一个文件rk3588s-pinctrl.dtsi,该文件枚举了3588所有的iomux实例(3588s和3588是firefly的两款开发板,频脚基本一致,所有有些3588会引用3588s的设备树文件);例如rk3588s-pinctrl.dtsi文件中关于uart6的设备树描述:
在这里插入图片描述

上图是串口6的一个设备树,

rockchip,pins =
				/* uart6_rx_m1 */
				<1 RK_PA0 10 &pcfg_pull_up>,

该描述就是说明使用的引脚是GPIO1_A0;
可以看到4个引脚rx/tx/rtsn/ctsn。另外多了一个rx/tx是串口6的复用,这里是将串口6的所有可以的复用全部罗列出来,其他的外设也是类似,最终实际用的哪一路复用在文件rk3588-firefly-itx-3588j.dtsi中确定,还是串口6,在该文件中的描述为:
在这里插入图片描述

二、RK3588 GPIO口上拉下拉失败

在调试中发现有些gpio口无法正确的实现上下拉,其原因在于该io口被其他外设复用使能。解决方法就是将该外设disabled。
上下拉设置方法:

:/ # ls /sys/class/gpio/
export     gpiochip128  gpiochip32   gpiochip64  unexport
gpiochip0  gpiochip200  gpiochip509  gpiochip96
:/ # echo 56 > /sys/class/gpio/export
:/ # ls /sys/class/gpio/
export  gpiochip0    gpiochip200  gpiochip509  gpiochip96
gpio56  gpiochip128  gpiochip32   gpiochip64   unexport
:/ # ls /sys/class/gpio/gpio56
active_low  device  direction  edge  power  subsystem  uevent  value
:/ # cat /sys/class/gpio/gpio56/direction
in
:/ # cat /sys/class/gpio/gpio56/value
0

以GPIO3_D4为例,该IO口在原开发板上被用作了HDMI1的rx引脚,其设备树描述位于rk3588-firefly-itx-3588j.dtsi文件中,如下:
在这里插入图片描述
hdmim1_rx是一个设备使用gpio引脚的描述,在文件rk3588.dtsi中被引用,如下:
在这里插入图片描述
但是我们发现其实,该外设在此文件中的状态是disabled,其实,一般而言,每个厂家的芯片可能对应很多开发板,有些开发板没有这个功能,有些开发板有这个功能,因此,在公共文件中一般都会把该芯片支持的共有外设都失能,然后在开发板对应的文件中再使能,这里就是如此。
打开文件rk3588-firefly-itx-3588j.dtsi找到hdmirx_ctrler,可以看到
在这里插入图片描述
我们只需要将okay改成disabled即可。

三、RK3588频脚计算方式

与一般的计算方式没有区别:

GPIO pin脚计算公式:pin = bank * 32 + number

GPIO 小组编号计算公式:number = group * 8 + X

以下,摘自官网:

下面演示GPIO1_D0 pin脚计算方法:

bank = 1;      //GPIO1_D0 => 1, bank ∈ [0,4]

group = 3;      //GPIO1_D0 => 3, group ∈ {(A=0), (B=1), (C=2), (D=3)}

X = 0;       //GPIO1_D0 => 0, X ∈ [0,7]

number = group * 8 + X = 3 * 8 + 0 = 24

pin = bank*32 + number= 1 * 32 + 24 = 56;

GPIO1_D0 对应的设备树属性描述为:<&gpio1 24 GPIO_ACTIVE_HIGH>,由kernel-5.10/include/dt-bindings/pinctrl/rockchip.h的宏定义可知,也可以将GPIO1_D0描述为<&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>

另外提供个简单的计算小程序源码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    while(1){
    char gpio_group;
    int bank;
    int X;
    int group;
    printf("++++++++++++++++++++++++++++++++++++++++++++\n");
    printf("bank number eg.GPIO1_D2,bank is 1\n");
    printf("group number eg.GPIO1_D2,group is 'D'\n");
    printf("code number eg.GPIO1_D2,code is 2\n");
    printf("++++++++++++++++++++++++++++++++++++++++++++\n");

    printf("Input Example:1,d,2\n");
    scanf("%d,%c,%d", &bank,&gpio_group,&X);
    switch (gpio_group)
    {
    case 'a':
    case 'A'/* constant-expression */:
        /* code */
        group = 0;
        break;
    case 'b':
    case 'B':
        group = 1;
        break;
    case 'c':
    case 'C':
        group = 2;
        break;
    case 'd':
    case 'D':
        group = 3;
        break;
    default:
        printf("group number error!\n");
        return 1;
        break;
    };
    int number = group * 8 + X ;
    int pin = bank*32 + number;
    printf("GPIO pin is %d\n", pin);
    system("pause");}
    return 0;
}

只需要输入bank,code和序号即可,例如计算GPIO1_D0 ,输入1,D,0
回车:
在这里插入图片描述
引脚为56号。

最后:虽然由于每家芯片的驱动不同,设备树的书写格式可能有所不同,但是基本的设备树格式都是一样的。大道至简,殊途同归。

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

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

相关文章

DiffDock源码解析

DiffDock源码解析 数据预处理 数据输入方式 df pd.read_csv(args.protein_ligand_csv), 使用的是csv的方式输入&#xff0c; 格式&#xff1a; 不管受体还是配体&#xff0c; 输入可以是序列或者3维结构的文件 如果蛋白输入的是序列&#xff0c;需要计算蛋白的三维结构&am…

Type-C接口在显示器上有什么作用?Type-C 显示器方案介绍

一显示器的Type-C口&#xff0c;是未来显示器的接口的“终极形态”&#xff0c;未来显示器可以不要USB-A&#xff0c;不要HDMI&#xff0c;不要3.5音频&#xff0c;甚至不要DP口&#xff0c;但Type-C口一定会越来越多。 二显示器Type-C有什么用&#xff0c;有什么类型 1只可以…

大势智慧软硬件技术答疑第三期

1.重建大师6.0试用版&#xff0c;怎么导出DOM、DEM&#xff1f; 答&#xff1a;需要先生成三维模型&#xff0c;然后再提交产品选择DOM和DEM。 2.麻烦问下&#xff0c;修模出来贴的纹理图片&#xff0c;导出osgb后再打开就模糊了是什么情况&#xff1f; 答&#xff1a;拿高清…

OushuDB × 东方证券:数据仓库信创国产化最佳实践

前言&#xff1a;东方证券是一家综合类证券公司&#xff0c;成立于 1998 年&#xff0c;总部设在上海。经过 20 多年的发展&#xff0c;东方证券现有分支机构 177 家、管理 3200 亿资产&#xff0c;服务上亿客户。与一个大型金融机构相匹配的&#xff0c;正是东方证券当前管理的…

想利用业余时间当一名黑客?要具备什么能力,确定不来看看?

几十年前刚有小型电脑的时候&#xff0c;产生了一个由程序专家和部分网络名人所组成的文化社群。该社群的成员创造出了hacker这个词&#xff0c;也就是人们常说的“黑客”。这些黑客们建立了后来的Internet&#xff0c;以及发明了电脑的操作系统。 如果有人对这种文化做出了贡…

OpenResty(Nginx)示例

Nginx Nginx概念&#xff1a; 聊到Nginx,先简单讲一下Nginx的基本概念 Nginx是一个高性能的、开源的 Web 服务器和反向代理服务器软件&#xff0c;由 Igor Sysoev 开发。它可以作为 HTTP 服务器使用&#xff0c;也可以作为负载均衡器、HTTP 缓存、反向代理和邮件代理等其他功…

Spring ( 二 ) 介绍

2.Spring Spring框架是一个用于Java开发的开源应用程序框架&#xff0c;提供了一系列的工具和解决方案&#xff0c;帮助开发者快速构建高质量、可维护的企业级应用。Spring框架的主要特点包括&#xff1a;模块化、轻量级、可测试性、松耦合、面向切面编程&#xff08;AOP&…

NFT Insider #94:​The Sandbox与ERM Labs达成合作,周杰伦与中国移动开启元宇宙合作

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…

c高级作业3

#!/bin/bash#有m1.txt m2.txt m3.txt m4.txt&#xff0c;分别创建出对应的目录&#xff0c;m1 m2 m3 m4 并把文件移动到对应的目录下 for ((i1;i<5;i)) do mkdir m$i touch m$i.txtmv m$i.txt m$i done九九乘法表 #九九乘法表 i1 j1 while [ $i -le 9 ] do j1while [ $j -l…

对称算法模式-GCM(Galois/Counter Mode)

以下内容来自《NIST Special Publication 800-38D November, 2007》- Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC。 链接在此 AES Galois/Counter Mode 1. 加密步骤 2. 解密步骤 3. GCTR函数 4. GHASH函数 5. 块数据乘法 6. C…

网络分层模型 | OSI七层模型、TCP/IP四层模型

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

群报数是什么应用?群报数的内容如何自动写入至在线表格?

群报数是什么产品&#xff1f; 群报数是一个人人可用的在线表单工具&#xff0c;可发起「填表、收集、问卷、打卡、通知、预约、报名、投票」等类型的页面&#xff0c;支持预设名单&#xff0c;可快速排查谁未填、并对未填人员一键催填&#xff0c;所收集的数据支持「一键导出…

蓝奥声智能灯控解决方案:一种无线单火取电控制技术

单火开关出现鬼火现象一般是出现在控制小功率灯具的情况下&#xff0c;正常的5W之上的灯具一般是没啥问题的&#xff08;质量差的除外&#xff09;。就现在来说&#xff0c;单火稳定性与零火版相比还是有所欠缺&#xff0c;毕竟从电路原理上来说&#xff0c;这确实是一个硬伤。…

Spark 从入门到精通

Spark 从入门到精通 环境搭建 准备工作 创建安装目录 mkdir /opt/soft cd /opt/soft下载scala wget https://downloads.lightbend.com/scala/2.13.10/scala-2.13.10.tgz -P /opt/soft解压scala tar -zxvf scala-2.13.10.tgz修改scala目录名称 mv scala-2.13.10 scala-2下…

容灾到对象存储,能降低多少灾备成本?以华为云容灾为例

根据IPlytics的数据显示&#xff0c;华为是唯一一家进入全球十大云计算专利拥有者排行榜的中国公司&#xff1b; 华为是唯一一家提供端到端服务能力的云服务商&#xff0c;从底层的物理设备到上层的虚拟化建设都是有华为自主研发的产品&#xff1b; 华为是国内唯一一家提供5线全…

开源大模型文档

开源大模型综述 排行榜1.LLaMA资源&#xff1a; 2.Chinese-LLaMA-Alpaca资源&#xff1a; 3.Alpaca资源&#xff1a; 4.Alpaca-LoRA5.Vicuna资源&#xff1a; 6.OpenChatKit资源&#xff1a; 7.GPT4ALL8.Raven RWKV资源&#xff1a; 9.OPT资源&#xff1a; 10.Flan-T5-XXL资源&…

PowerShell install 一键部署subversion

subversion SVN是subversion的缩写&#xff0c;是一个开放源代码的版本控制系统&#xff0c;通过采用分支管理系统的高效管理&#xff0c;简而言之就是用于多个人共同开发同一个项目&#xff0c;实现共享资源&#xff0c;实现最终集中式的管理。 TortoiseSVN TortoiseSVN 是…

ICG-Azide/Alkyne吲哚菁绿标记叠氮/炔基-星戈瑞

ICG-Azide 吲哚菁绿标记叠氮 分子式&#xff1a;C48H56N6O4S 分子量&#xff1a;813.07 外观&#xff1a;固体/粉末 激发、发射波长:785/821nm 规格&#xff1a;mg 溶解性&#xff1a;溶于DMSO或DMF ICG-Azide是一种新型的荧光探针&#xff0c;其化学性质独特。它是一种含…

MongoDb简单使用

介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 它支持的数据结构非常松…

leetcode50 快速幂

https://leetcode.cn/problems/powx-n/实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c; x n x^n xn &#xff09;。 示例 1&#xff1a;输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a;输入&#xff1a;…