ArmSoM Rockchip系列产品 通用教程 之 GPIO 使用
1. GPIO简介
GPIO,全称 General-Purpose Input/Output(通用输入输出),是一种在计算机和嵌入式系统中常见的数字输入输出接口。它允许软件控制硬件的数字输入和输出,例如开关、传感器、LED灯等。GPIO通常由一个芯片或处理器上的引脚提供支持,通过编程可以配置这些引脚为输入或输出,并且可以通过相应的软件命令来读取输入状态或控制输出状态。
2. GPIO引脚编号计算方法
RK3588共 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分,常用以下公式计算引脚:
GPIO pin脚计算公式:pin = bank * 32 + numberGPIO 小组编号计算公式:number = group * 8 + X
例如: GPIO3_B5的计算方式 : 32 3 + 1 8 + 5 = 109 ---> 也就是说,GPIO3_B5对应的是GPIO的编号是gpio-109。
3. 复用
GPIO口除了通用输入输出功能外,还可能有其它复用功能

从原理图中看出:以GPIO1_C0为例,就有如下几个功能:
| func0 | func1 | func2 | func3 |
|---|---|---|---|
| GPIO1_C0 | I2C3_SDA_M0 | UART3_RX_M0 | SPI4_MISO_M0 |
在系统DTS配置中GPIO1_C0默认是I2C3_SDA_M0功能。如果我们想将GPIO1_C0复用为UART3_RX_M0功能,该怎么做呢?
- 首先打开uart3 节点,将pinctrl配置为uart3m0_xfer。pinctrl配置是GPIO复用的最关键的配置,在这里就是将GPIO1_C0复用做了uart3功能。
&uart3 {pinctrl-names = "default";pinctrl-0 = <&uart3m0_xfer>;status = "okay";
};&pinctrl {uart3 {/omit-if-no-ref/uart3m0_xfer: uart3m0-xfer {rockchip,pins =/* uart3_rx_m0 */<1 RK_PC0 10 &pcfg_pull_up>, # 将GPIO1_C0复用为uart3_rx_m0 /* uart3_tx_m0 */<1 RK_PC1 10 &pcfg_pull_up>; # 将GPIO1_C1复用为uart3_tx_m0 };};
};
- 如果发现GPIO1_C0被复用为I2c3,则在dts中关闭它。
&i2c3 {status = "disabled";
};
这样,我们就将GPIO1_C0复用为了UART3_RX_M0功能
4. GPIO调试方法
4.1 读取GPIO状态信息
Debugfs 文件系统目的是为开发人员提供更多内核数据,方便调试。 这里 GPIO 的调试也可以用 Debugfs 文件系统,获得更多的内核信息。GPIO 在 Debugfs 文件系统中的接口为 /sys/kernel/debug/gpio,可以这样读取该接口的信息:
armsom@armsom:~$ sudo cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/fd8a0000.gpio, gpio0:gpio-15 ( |led_rgb_b ) out logpio-20 ( |reset ) out lo ACTIVE LOWgpio-21 ( |bt_default_wake_host) in higpiochip1: GPIOs 32-63, parent: platform/fec20000.gpio, gpio1:gpio-34 ( |bt_default_rts ) in higpio-36 ( |vcc3v3-pcie30 ) out logpio-40 ( |camera-pwdn-gpio ) out higpio-54 ( |hdmirx-det ) in lo ACTIVE LOWgpio-58 ( |vcc3v3-pcie2x1l0 ) out higpio-61 ( |headset_gpio ) in higpiochip2: GPIOs 64-95, parent: platform/fec30000.gpio, gpio2:gpio-78 ( |vbus5v0-typec ) out logpiochip3: GPIOs 96-127, parent: platform/fec40000.gpio, gpio3:gpio-101 ( |vcc-5v0-gpio-regulat) out higpio-102 ( |bt_default_reset ) out logpio-104 ( |reset ) out higpio-125 ( |bt-wake-gpio-regulat) out higpiochip4: GPIOs 128-159, parent: platform/fec50000.gpio, gpio4:gpio-130 ( |wifi-diable-gpio-reg) out higpio-134 ( |sbu1-dc ) out logpio-135 ( |sbu2-dc ) out logpio-136 ( |vcc5v0-host-regulato) out higpio-149 ( |led_rgb_r ) out logpiochip5: GPIOs 509-511, parent: platform/rk806-pinctrl.9.auto, rk806-gpio, can sleep:
从读取到的信息中可以知道,内核把 GPIO 当前的状态都列出来了,以 GPIO0组为例,gpio-15(GPIO0_B7) 对应的dts节点是led_rgb_b,输出低电平 (out lo)。
4.2 查看 pinmux-pins
armsom@armsom:~$ sudo cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins
Pinmux settings per pin
Format: pin (name): mux_owner gpio_owner hog?
pin 0 (gpio0-0): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 1 (gpio0-1): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 2 (gpio0-2): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 3 (gpio0-3): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 4 (gpio0-4): fe2c0000.mmc (GPIO UNCLAIMED) function sdmmc group sdmmc-det
pin 5 (gpio0-5): feb20000.spi (GPIO UNCLAIMED) function spi2 group spi2m2-pins
pin 6 (gpio0-6): feb20000.spi (GPIO UNCLAIMED) function spi2 group spi2m2-pins
pin 7 (gpio0-7): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 8 (gpio0-8): 6-0051 (GPIO UNCLAIMED) function hym8563 group rtc-int
pin 9 (gpio0-9): feb20000.spi (GPIO UNCLAIMED) function spi2 group spi2m2-cs0
pin 10 (gpio0-10): wireless-wlan (GPIO UNCLAIMED) function wireless-wlan group wifi-host-wake-irq
pin 11 (gpio0-11): feb20000.spi (GPIO UNCLAIMED) function spi2 group spi2m2-pins
pin 12 (gpio0-12): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 13 (gpio0-13): fiq-debugger (GPIO UNCLAIMED) function uart2 group uart2m0-xfer
pin 14 (gpio0-14): fiq-debugger (GPIO UNCLAIMED) function uart2 group uart2m0-xfer
pin 15 (gpio0-15): leds gpio0:15 function leds group led-rgb-b
pin 16 (gpio0-16): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 17 (gpio0-17): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 18 (gpio0-18): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 19 (gpio0-19): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 20 (gpio0-20): sdio-pwrseq gpio0:20 function sdio-pwrseq group wifi-enable-h
pin 21 (gpio0-21): (MUX UNCLAIMED) gpio0:21
...
我们以pin 13 (gpio0-13): fiq-debugger (GPIO UNCLAIMED) function uart2 group uart2m0-xfer作为解析:
gpio0-13对应的节点名是 fiq-debugger,此节点使用pinctrl配置复用为debug串口功能,pinctrl的值是uart2m0-xfer。
5. GPIO控制
这里介绍一下在用户空间基于sysfs控制gpio的方式: sysfs控制gpio的方式主要是基于内核提供的gpio控制接口文件。也就是通过读写/sys/class/gpio目录下的文件来控制对应的gpio接口。
echo 109 > /sys/class/gpio/export # 申请导出相应的gpio
echo out > /sys/class/gpio/gpio109/direction # 设置相应gpio为输出方向
echo 1 > /sys/class/gpio/gpio109/value # 设置输出高电平
cat /sys/class/gpio/gpio109/value # 获取gpio当前状态值,是高电平还是低电平
echo 109 > /sys/class/gpio/unexport # 释放申请的gpio
注意:只有当GPIO3_B5脚没有被其它外设复用时, 我们才可以通过export导出该引脚去使用
相关文章:
ArmSoM Rockchip系列产品 通用教程 之 GPIO 使用
1. GPIO简介 GPIO,全称 General-Purpose Input/Output(通用输入输出),是一种在计算机和嵌入式系统中常见的数字输入输出接口。它允许软件控制硬件的数字输入和输出,例如开关、传感器、LED灯等。GPIO通常由一个芯片或…...
npm镜像源地址
镜像源地址替换问题(重要) 2024 年 1 月 22 日 ,registry.npm.taobao.org 的 SSL 证书正式过期。 2022 年 5 月 淘宝源发布了公告: (大家应该没有太多关注哦,也包括我,哈哈) &am…...
Java的Writer类详解
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…...
R语言基础的代码语法解译笔记
1、双冒号,即:“::” 要使用某个包里的函数,通常做法是先加载(library)包,再调用函数。最新加载的包的namespace会成为最新的enviroment,某些情况下可能影响函数的结果。而package name::funct…...
【蓝桥杯】蓝桥杯算法复习(一)
😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!Ǵ…...
移动端精准测试简介
在测试领域每隔一段时间,就会有一些主流的测试技术,比如说:接口自动化,WebUI, AppUI自动化,然后就是测试平台的开发,各类专项测试(性能,安全),再到前几年的手机集群云测平…...
CCProxy代理服务器地址的设置步骤
目录 前言 一、下载和安装CCProxy 二、启动CCProxy并设置代理服务器地址 三、验证代理服务器设置是否生效 四、使用CCProxy进行代理设置的代码示例 总结 前言 CCProxy是一款常用的代理服务器软件,可以帮助用户实现网络共享和上网代理。本文将详细介绍CCProxy…...
探秘分布式神器RMI:原理、应用与前景分析(二)
本系列文章简介: 本系列文章将深入探究RMI远程调用的原理、应用及未来的发展趋势。首先,我们会详细介绍RMI的工作原理和基本流程,解析其在分布式系统中的核心技术。随后,我们将探讨RMI在各个领域的应用,包括分布式计算…...
[项目设计] 从零实现的高并发内存池(三)
🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[高并发内存池] ❤️ 前置学习专栏:[Linux学习] ⏰ 我们仍在旅途 目录 4.CentralCache实现 4.1 CentralCache整体架构 4.2 围绕Span的相关设计…...
将Q算法和D算法结合应用到llm解码上之人在回路
将Q算法和D算法结合应用到llm解码上之人在回路 参考地址代码解释 参考地址 https://dongfangyou.blog.csdn.net/article/details/136466609 代码 import numpy as np from tqdm import tqdmfrom sample import net, char2id_dict, get_real_p# 假设的词汇表 VOCABULARY lis…...
el-table-column嵌套el-form-item不能进行校验问题解决
项目为vue3elementPlus开发的项目 业务要求:table表格展示数据,其中有一行是ip地址可展示可修改,此处要求增加自定义校验规则 先看一下效果: 此处先描述一下,问题出在了哪里,我将el-table的data,使用一个…...
leetcode200. 岛屿数量
leetcode200. 岛屿数量 题目 思路 遍历每一个网格,若网格为1,岛屿数量1,利用一个深度优先搜索函数将岛屿置零,注意判断数组边界 代码 class Solution:def numIslands(self, grid: List[List[str]]) -> int:self.grid grid…...
MySQL--索引类型详解
索引的类型 主键索引: PRIMARY KEY,当一张表的某个列是主键的时候,该列就是主键索引,一张表只允许有一个主键索引,主键所在的列不能为空。 创建主键索引的SQL语法: # 给user表中的id字段创建名为id_ind…...
R语言中ggplot2图例位置、颜色、背景、标题
目录 1、不显示图例 2、自定义图例位置 3、修改图例背景颜色、外框颜色、大小 4、修改图例大小 5、图例设置背景、线框为空 6、自定义设置多个图例的标题 7、设置多个图例的之间的间隔 8、取消不需要的图例显示 1、不显示图例 theme(legend.position "none"…...
波卡 Alpha 计划启动,呼唤先锋创新者重新定义 Web3 开发
原文:https://polkadot.network/blog/the-polkadot-alpha-program-a-new-era-for-decentralized-building-collaboration/ 编译:OneBlock 区块链领域不断发展,随之而来的是发展和创新机会的增加。而最新里程碑是令人振奋的 Polkadot Alpha …...
公网IP与私有IP及远程互联
1.公网有私有IP及NAT 公网IP是全球唯一的IP,通过公网IP,接入互联网的设备是可以访问你的设备。但是IPV4资源有限,一般ISP(Internet Service Provider)并不会为用户提供公网IP。所以家里的计算机在公司是没法直接使用windows远程桌面直接访问…...
openCV xmake debug失效 release可以使用
在使用xmake构建一个项目时,添加openCV库,调用 imread函数时,debug函数失效, release可以使用,最后发现是xmake.lua写的有问题 option("OpenCV4.6.0")set_showmenu(true) set_default(true) set_category(&…...
ES分布式搜索-IK分词器
ES分词器-IK 1、为什么使用分词器? es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。 我们在kibana的DevTools中测试: GET /_analyze {"analyzer": "…...
基于卷积神经网络的野外可食用植物分类系统
温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的可食用植物图像识别系统。采用TensorFlow和Keras框架,利用卷积神经网络(CNN)进行模型训练和预测,并引入迁移学习模型…...
Raingad IM即时聊天/即时通讯网站源码,附带系统搭建教程
支持功能 支持单聊和群聊,支持发送表情、图片、语音、视频和文件消息单聊支持消息已读未读的状态显示,在线状态显示群聊创建、删除和群成员管理、群公告、群禁言等支持置顶联系人,消息免打扰;支持设置新消息声音提醒,…...
终极Boot Camp驱动自动化部署指南:告别手动安装的烦恼
终极Boot Camp驱动自动化部署指南:告别手动安装的烦恼 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 你是否曾经为Mac电脑安装Windows系统时,面对复杂的Boot…...
AI智能体:从感知到执行,构建下一代AI核心!
本文深入解析了AI智能体的定义、组成、工作原理及应用前景。智能体作为AI新范式,具备自主感知、决策与行动能力,由感知模块、推理引擎、行动控制器和记忆系统四大核心构成。通过感知环境、推理规划、行动执行和反馈优化形成闭环控制,实现自我…...
Windows安装安卓应用终极指南:告别模拟器的轻量级解决方案
Windows安装安卓应用终极指南:告别模拟器的轻量级解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为电脑无法直接安装手机应用而困扰ÿ…...
用OpenCV和Python搞定红绿灯识别:从视频处理到轮廓检测的完整实战
基于OpenCV的智能红绿灯识别系统实战:从视频处理到实时检测 红绿灯识别是计算机视觉在智能交通领域的基础应用之一。想象一下,你正坐在电脑前,手头有一段行车记录仪拍摄的城市道路视频,如何让计算机自动识别视频中的红绿灯状态&am…...
别再被‘不是注册脚本’坑了!手把手教你用记事本创建正确的.reg文件(附微信协议关联案例)
从零构建合规注册表脚本:避开.reg文件导入失败的六大陷阱 每次双击精心准备的.reg文件却看到"不是注册脚本"的红色警告,就像在终点线前被绊倒——这种挫败感我深有体会。三年前第一次尝试为团队部署软件环境时,我连续七次遭遇这个错…...
awesome-engineering-team-management薪酬与股权谈判:如何获得公平的补偿方案
awesome-engineering-team-management薪酬与股权谈判:如何获得公平的补偿方案 【免费下载链接】awesome-engineering-team-management 👔 How to transition from software development to engineering management 项目地址: https://gitcode.com/gh_m…...
腾讯HY-MT1.5模型应用:搭建个人离线翻译工具,保护隐私数据
腾讯HY-MT1.5模型应用:搭建个人离线翻译工具,保护隐私数据 1. 引言:为什么需要离线翻译工具 在数字化时代,跨语言沟通已成为日常需求。然而,依赖在线翻译服务意味着将敏感数据上传至云端服务器,这对企业机…...
ModTheSpire终极指南:5步轻松掌握《杀戮尖塔》模组加载技术
ModTheSpire终极指南:5步轻松掌握《杀戮尖塔》模组加载技术 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire 想要为《杀戮尖塔》添加新角色、自定义卡牌或优化游戏体验吗&am…...
讯为IMX6Q开发板TF卡启动踩坑记:手把手教你修复‘MMC: no card present’报错
讯为IMX6Q开发板TF卡启动异常全解析:从硬件原理到uboot调试实战 最近在调试讯为IMX6Q开发板的TF卡启动功能时,遇到了经典的"MMC: no card present"报错。这个看似简单的提示背后,其实隐藏着硬件设计、引脚映射、uboot驱动配置等一系…...
避坑指南:STM32连接ADS1256时SPI时序与DRDY引脚的那些事儿
STM32与ADS1256高效通信实战:SPI时序优化与DRDY引脚深度解析 调试ADS1256这类高精度ADC时,工程师们常会遇到数据不稳定、通信失败等"玄学问题"。上周深夜,当我第三次抓取到杂乱的SPI波形时,才意识到数据手册里那些微妙…...
