news 2026/4/24 14:05:18

从HDMI到自定义GPIO:在Firefly RK3588上‘抢回’被占用的引脚资源实战记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从HDMI到自定义GPIO:在Firefly RK3588上‘抢回’被占用的引脚资源实战记录

从HDMI到自定义GPIO:在Firefly RK3588上‘抢回’被占用的引脚资源实战记录

当你在Firefly RK3588开发板上准备连接温湿度传感器时,突然发现某个GPIO引脚无法操作——这种场景对嵌入式开发者来说再熟悉不过。本文将记录一个真实案例:如何从HDMI接口"虎口夺食",重新获得GPIO3_D4引脚的控制权。

1. 引脚冲突的发现与诊断

事情始于一个物联网网关项目。我们需要在RK3588开发板上接入多个环境传感器,但发现GPIO3_D4始终无法正常拉高拉低。通过以下步骤快速定位问题:

# 查看引脚复用状态 cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins | grep GPIO3_D4

输出显示该引脚被标记为hdmim1_rx功能。进一步检查设备树文件:

# 查找HDMI相关节点 grep -rn "hdmim1" /kernel/arch/arm64/boot/dts/rockchip/

rk3588-firefly-itx-3588j.dtsi中发现了关键配置:

&hdmirx_ctrler { status = "okay"; hdmim1_rx: hdmim1-rx { rockchip,pins = <3 RK_PD4 5 &pcfg_pull_none>; }; };

常见引脚占用类型分析

占用类型特征解决方案
功能复用显示为特定功能名(如uart、i2c)修改pinctrl配置
外设占用关联到具体设备节点禁用对应外设
硬件冲突物理电路连接需硬件修改

2. 设备树修改实战

2.1 安全禁用HDMI接收功能

首先确认系统确实不需要HDMI输入功能:

// 修改前备份原文件 cp rk3588-firefly-itx-3588j.dtsi rk3588-firefly-itx-3588j.dtsi.bak // 编辑文件 vi rk3588-firefly-itx-3588j.dtsi

找到hdmirx_ctrler节点,修改状态:

&hdmirx_ctrler { status = "disabled"; // 将okay改为disabled // 注释掉或删除pinctrl配置 // hdmim1_rx: hdmim1-rx { // rockchip,pins = <3 RK_PD4 5 &pcfg_pull_none>; // }; };

注意:修改设备树后需要重新编译内核并烧写,建议先通过overlay方式测试

2.2 重新定义GPIO功能

在自定义的设备树overlay文件中添加:

/dts-v1/; /plugin/; &pinctrl { gpio3-recovery { gpio3_d4: gpio3-d4 { rockchip,pins = <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>; }; }; }; &gpio3 { my_custom_pin { gpios = <RK_PD4 GPIO_ACTIVE_HIGH>; label = "custom_gpio3_d4"; }; };

关键参数说明

  • RK_FUNC_GPIO:将引脚功能设置为普通GPIO
  • &pcfg_pull_up:启用内部上拉电阻
  • GPIO_ACTIVE_HIGH:定义高电平有效

3. 验证与测试

编译并加载设备树 overlay 后,进行完整测试流程:

# 导出GPIO echo 116 > /sys/class/gpio/export # GPIO3_D4 = 3*32 + 20 = 116 # 设置方向 echo out > /sys/class/gpio/gpio116/direction # 测试输出 echo 1 > /sys/class/gpio/gpio116/value cat /sys/class/gpio/gpio116/value echo 0 > /sys/class/gpio/gpio116/value cat /sys/class/gpio/gpio116/value

功能影响检查清单

  1. HDMI视频输出是否正常(如果开发板用作显示)
  2. 系统日志中是否有相关错误(dmesg | grep hdmi)
  3. 引脚电平变化是否响应及时(可用示波器验证)

4. 深入理解RK3588引脚管理

4.1 引脚编号计算原理

RK3588的GPIO编号系统遵循以下公式:

pin_number = bank * 32 + group * 8 + index

以GPIO3_D4为例:

  • bank = 3
  • group = 3 (D组)
  • index = 4
  • 计算:332 + 38 + 4 = 96 + 24 + 4 = 124

注意:实际编号可能因内核版本差异略有不同,建议通过/sys/class/gpio验证

4.2 pinctrl子系统工作流程

RK3588引脚控制的核心机制:

  1. 设备树声明:定义引脚功能和电气特性
  2. 驱动加载:各子系统申请引脚资源
  3. 冲突检测:内核拒绝重复分配请求
  4. 状态管理:运行时动态切换(需硬件支持)

典型引脚复用优先级

  1. 硬件固定功能(如电源引脚)
  2. 核心外设(PCIe、USB3.0)
  3. 高速接口(HDMI、DP)
  4. 通用外设(I2C、SPI)
  5. 普通GPIO

5. 高级技巧与避坑指南

5.1 动态引脚复用

对于支持动态切换的引脚,可以实现在不同功能间切换:

// 示例:通过ioctl动态切换引脚功能 #include <fcntl.h> #include <sys/ioctl.h> int fd = open("/dev/pinctrl", O_RDWR); ioctl(fd, PINCTRL_IOC_SET_FUNCTION, "gpio");

适用场景

  • 周期性切换通信协议(如UART/GPIO)
  • 省电模式下的引脚功能降级

5.2 引脚状态监控

建立实时监控系统:

# 监控引脚复用变化 watch -n 0.5 'cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins | grep GPIO3_D4' # 电平变化记录 echo 116 > /sys/class/gpio/export echo in > /sys/class/gpio/gpio116/direction while true; do cat /sys/class/gpio/gpio116/value >> gpio_log.txt; sleep 0.1; done

5.3 常见问题解决方案

问题1:修改后GPIO仍无响应

  • 检查是否有内核驱动强占引脚(lsmod | grep hdmi)
  • 验证设备树编译是否生效(dtc -I dtb -O dts /boot/dtbs/xxx.dtb > dump.dts)

问题2:系统启动异常

  • 保留串口调试输出(修改bootargs添加console=ttyS2,1500000)
  • 使用最小设备树逐步添加功能

问题3:电平不稳定

  • 检查pcfg_pull_*配置(上拉/下拉/无)
  • 测量实际电路负载(可能需外加上拉电阻)

在最近的一个工业控制器项目中,我们成功回收了6个被默认配置占用的GPIO引脚。其中GPIO3_D4被用于急停按钮检测,实测响应延迟<1ms,完全满足工业级要求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 14:02:57

如何实现AI驱动的浏览器自动化:Playwright MCP完整指南

如何实现AI驱动的浏览器自动化&#xff1a;Playwright MCP完整指南 【免费下载链接】playwright-mcp Playwright MCP server 项目地址: https://gitcode.com/gh_mirrors/pl/playwright-mcp Playwright MCP是一个基于Model Context Protocol&#xff08;MCP&#xff09;的…

作者头像 李华
网站建设 2026/4/24 14:02:55

帽子数据集1852张VOC+YOLO

帽子数据集1852张VOCYOLO数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1852 标注数量(xml文件个数)&#xff1a;1852 标注数量(txt文件个数…

作者头像 李华
网站建设 2026/4/24 13:59:36

【2026年最新600套毕设项目分享】健身微信小程序(30159)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 项目演示视频2 项目演示视频3 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远…

作者头像 李华