当前位置: 首页 > news >正文

linux 应用层直接操作GPIO的方法

了解!你使用的是 Rockchip RK3588S 平台,需要操作 GPIO3_D5_d 这个引脚(即 MCU_JTAG_TMS_M1/.../GPIO3_D5_d)。以下是基于你提供的系统信息的具体操作步骤


🔍 第一步:确认 GPIO 系统编号

在 RK3588 芯片中,GPIO 编号规则为:
GPIO 全局编号 = bank编号 × 32 + 组内序号

根据引脚 GPIO3_D5

  • bank 编号:3(对应 GPIO3)
  • 组内序号:D5 = 5 + 24 = 29(D组偏移24)
    RK3588 GPIO分组:A=0~7, B=8~15, C=16~23, D=24~31

👉 计算 GPIO 全局编号
3 × 32 + 29 = 125
你需要操作的 GPIO 编号是 125


⚙️ 第二步:操作 GPIO(两种方法)

方法1:通过 sysfs 文件系统(直接操作)
# 1. 导出 GPIO125(激活控制权限)
echo 125 > /sys/class/gpio/export# 2. 查看生成的 GPIO 目录(确保出现 gpio125)
ls /sys/class/gpio# 3. 进入 GPIO125 目录
cd /sys/class/gpio/gpio125# 4. 设置为输出模式
echo out > direction# 5. 拉高电平
echo 1 > value# 6. 拉低电平
echo 0 > value# 完成后取消导出(可选)
echo 125 > /sys/class/gpio/unexport
方法2:使用 libgpiod 工具(推荐更可靠的方式)
# 1. 安装工具包
sudo apt update
sudo apt install gpiod# 2. 查找 GPIO 对应的芯片编号(GPIO3 属于 gpiochip96)
gpiodetect  # 输出示例:# gpiochip0 [......]# gpiochip96 [......]   # ← GPIO3 在这里# 3. 操作 GPIO:
# 语法:gpioset <芯片名> <组内序号>=<值>
gpioset gpiochip96 29=1  # 拉高(D5 = 组内偏移29)
gpioset gpiochip96 29=0  # 拉低

⚠️ 关键注意事项

  1. 复用功能冲突
    如果该引脚被设备树配置为其他功能(如 UART9_TX_M2),操作会失败。
    解决方案

    # 查看当前引脚复用状态(需安装 io 工具)
    sudo apt install rockchip-io
    rockchip_io -p PD5   # PD5 对应 GPIO3_D5
    

    若显示 MUX: UART9_TX,需修改设备树将其设为 GPIO

  2. 权限问题

    • 操作 /sys/class/gpio 需要 root 权限
    • 可将用户加入 gpio 组避免 sudo:
      sudo usermod -aG gpio $(whoami)
      # 重启后生效
      
  3. 快速电平切换限制
    sysfs 最大频率约 100Hz,如需高速控制需:

    • 编写内核驱动
    • 使用 /dev/mem 直接映射寄存器(高风险,需 root)

📌 操作结果验证

用万用表测量引脚电压:

  • 执行 echo 1 > value → 应显示 3.3V(或 SOC 工作电压)
  • 执行 echo 0 > value → 应显示 0V

💡 提示:若操作失败,检查 dmesg | grep gpio 查看内核报错信息,通常原因包括复用冲突或物理驱动未启用。

http://www.dtcms.com/a/296017.html

相关文章:

  • Java 异常处理:从理解到实践的全面指南
  • 项目部署卡脖子?EasyCVR视频汇聚平台5种部署方案适配百变监控需求
  • 线段树学习笔记 - 练习题(2)
  • 教程:如何通过代理服务在国内高效使用 Claude API 并集成到 VSCode
  • LeetCode 23:合并 K 个升序链表
  • QT框架,关于WebEngine打包
  • DPU 是什么?
  • 达梦数据库报错“回滚记录版本太旧,无法获取用户记录”问题根源原理和解决方法
  • JVM原理及其机制(二)
  • Python图像数据处理
  • 浅谈程序运行之编译和链接 - 翻译环境和运行环境
  • go语言基础教程:1. Go 下载安装和设置
  • JVM Java虚拟机
  • JVM 垃圾收集器CMS和G1
  • 单片机的硬件结构
  • 人形机器人加快先进AI机器人开发
  • Spring Boot 全方位指南:从项目初始化到分层架构搭建
  • 设置后轻松将 iPhone 转移到 iPhone
  • 管网监测是指什么?管网监测的内容与应用场景
  • 小程序生命周期及页面操作执行过程详解
  • jupyter lab使用(linux环境)
  • 在 Windows 上安装设置 MongoDB及常见问题
  • MySQL--day13--视图存储过程与函数
  • Spring-狂神说
  • 2025年6月GESP(C++六级):最大因数
  • 传染病监测(七):为什么接触模式能颠覆防控效果预测?
  • 力扣刷题844——比较含退格的字符串
  • 【C语言进阶】柔性数组
  • 电商项目_秒杀_架构升级
  • 第十八天(Linux基本命令)