You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下gpioget读取高电平GPIO引脚始终返回0的问题排查

GPIO输入引脚始终读0的排查方向

针对你遇到的Ka-ro Electronics QSXP-M181 SOM GPIO组2_18引脚(物理41、内核50)万用表测高电平但软件读0的问题,可按以下方向排查:

  • 确认引脚复用配置
    部分SoC引脚默认复用为外设(如UART、SPI),即使gpioinfo显示未使用,实际硬件通路可能未切换到GPIO。可通过以下方式验证:

    • 查看SoC官方手册,确认物理引脚41的默认复用功能;
    • 执行cat /sys/kernel/debug/pinctrl/*/pins,搜索引脚41对应的条目,检查其mux setting是否为GPIO模式;
    • 若有pinmux-utils工具,用pinmux list命令查看该引脚的当前复用状态。
  • 校验GPIO电平有效配置

    • 用gpioinfo gpiochip1查看引脚18的完整flags,确认active-high是否正确,同时检查是否存在pull-down等可能导致电平采样异常的配置;
    • 执行cat /sys/class/gpio/gpio50/active_low,若返回1,说明系统将高电平识别为低电平,需执行echo 0 > /sys/class/gpio/gpio50/active_low修正。
  • 确认sysfs操作路径正确性
    检查读取值时的路径是否为/sys/class/gpio/gpio50/value,避免因路径输入错误导致读取无效值;同时再次执行cat /sys/class/gpio/gpio50/direction确认引脚确实处于in模式。

  • 用chardev接口直接验证
    虽然你提到chardev无法从命令行运行,可通过简单C程序直接操作GPIO字符设备,排除工具或sysfs层的问题:

    #include <fcntl.h>
    #include <unistd.h>
    #include <linux/gpio.h>
    #include <stdio.h>
    
    int main() {
        int fd = open("/dev/gpiochip1", O_RDONLY);
        if (fd < 0) { perror("open gpiochip1"); return 1; }
    
        struct gpiohandle_request req = {0};
        req.lineoffsets[0] = 18;
        req.lines = 1;
        req.flags = GPIOHANDLE_REQUEST_INPUT;
        snprintf(req.consumer_label, sizeof(req.consumer_label), "gpio-test");
    
        if (ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req) < 0) {
            perror("get line handle");
            close(fd);
            return 1;
        }
    
        struct gpiohandle_data data = {0};
        if (ioctl(req.fd, GPIOHANDLE_GET_LINE_VALUES_IOCTL, &data) < 0) {
            perror("read pin value");
            close(req.fd);
            close(fd);
            return 1;
        }
    
        printf("Pin 18 value: %d\n", data.values[0]);
    
        close(req.fd);
        close(fd);
        return 0;
    }
    

    编译运行:gcc gpio-test.c -o gpio-test && ./gpio-test,若输出仍为0,说明问题出在硬件或驱动层面;若输出为1,则需排查gpioget工具或sysfs配置的异常。

  • 排查硬件隐性故障

    • 检查引脚是否存在虚焊、过孔接触不良等物理连接问题;
    • 尝试用杜邦线将该引脚直接连接到板载3.3V电源(注意引脚耐压),再次读取值,验证GPIO采样通路是否正常。
  • 检查内核驱动与版本

    • 确认当前内核版本是否存在该GPIO控制器的已知bug,可查阅Ka-ro官方BSP的更新日志或社区反馈;
    • 尝试更新内核到Ka-ro提供的最新稳定版本,修复可能存在的驱动采样问题。

内容的提问来源于stack exchange,提问作者Christopher Theriault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:17:40