williamzhang 发表于 2018-9-30 14:46:50

如何操作GPIO

购买了一块RK3288板子,想尝试一下用GPIO来控制power灯,查询原理图确认使用了GPIO8-A2
这样我就运行:
cd /sys/class/gpio
echo 258 > export
结果提示Permission denied,加上sudo也是毫无效果

这会是什么原因呢?

sheqw 发表于 2018-10-9 09:54:51

不是258

jpchen 发表于 2018-10-10 09:30:56

这GPIO已经被使用,所以你用通用GPIO的方式控制不了,要么在dts代码屏蔽power led,led的控制可以参考
http://wiki.t-firefly.com/zh_CN/Firefly-RK3288/dirver_led.html

williamzhang 发表于 2018-10-10 10:26:41

jpchen 发表于 2018-10-10 09:30
这GPIO已经被使用,所以你用通用GPIO的方式控制不了,要么在dts代码屏蔽power led,led的控制可以参考
http ...

这就是说,如果想用GPIO来控制led,就要改动kernel了

williamzhang 发表于 2018-11-6 11:47:53

jpchen 发表于 2018-10-10 09:30
这GPIO已经被使用,所以你用通用GPIO的方式控制不了,要么在dts代码屏蔽power led,led的控制可以参考
http ...

在dts里面关闭gpio-led这部分
然后切换成root,此时可以用echo 258 > /sys/class/gpio/export来创建节点,但是配置direction和value仍然无法控制灯的亮灭,还有其他地方需要配置么?

jpchen 发表于 2018-11-6 16:32:50

williamzhang 发表于 2018-11-6 11:47
在dts里面关闭gpio-led这部分
然后切换成root,此时可以用echo 258 > /sys/class/gpio/export来创建节点 ...

dts里面屏蔽掉led,就可以使用通用GPIO的方式控制led
--- a/kernel/arch/arm/boot/dts/firefly-rk3288.dts
+++ b/kernel/arch/arm/boot/dts/firefly-rk3288.dts
@@ -155,6 +155,7 @@
                status = "disabled";
      };
      
+       /*
      firefly-led{
                compatible = "firefly,led";
                led-work = <&gpio8 GPIO_A2 GPIO_ACTIVE_LOW>;
@@ -176,6 +177,7 @@
            gpios = <&gpio8 GPIO_A2 GPIO_ACTIVE_LOW>;
      };
    };
+   */

williamzhang 发表于 2018-11-7 17:53:37

本帖最后由 williamzhang 于 2018-11-8 09:56 编辑

jpchen 发表于 2018-11-6 16:32
dts里面屏蔽掉led,就可以使用通用GPIO的方式控制led
--- a/kernel/arch/arm/boot/dts/firefly-rk3288.d ...
确认dts里面已经注释掉了,另外,可以建立gpio的节点,用echo 258 > /sys/class/gpio/export时,可以生成节点,不会报错

能够访问生成的节点的direction/value文件,但是,输入内容没有反应
我的做法:
echo "out" > /sys/class/gpio/gpio258/direction
echo 0 > /sys/class/gpio/gpio258/value
echo 1 > /sys/class/gpio/gpio258/value
按说应该能够控制灯的亮灭,但是,一点实际上没有任何反应

感觉没法操控GPIO一样
大神能详细指点一下么,感觉自己很可能遗漏了一个小枝节

williamzhang 发表于 2018-11-8 09:58:24

jpchen 发表于 2018-11-6 16:32
dts里面屏蔽掉led,就可以使用通用GPIO的方式控制led
--- a/kernel/arch/arm/boot/dts/firefly-rk3288.d ...

继续下去,发现有个PCLK_GPIO8需要设置,设置之后情况还是一样
用cat /sys/class/gpio/gpio258/value读取value的值,发现始终不能变化

所以GPIO始终没有能够设置拉高拉低,这会是什么原因呢?

jpchen 发表于 2018-11-8 11:24:34

williamzhang 发表于 2018-11-8 09:58
继续下去,发现有个PCLK_GPIO8需要设置,设置之后情况还是一样
用cat /sys/class/gpio/gpio258/value读 ...

是不是硬件led灯坏了

williamzhang 发表于 2018-11-8 12:00:57

jpchen 发表于 2018-11-8 11:24
是不是硬件led灯坏了

没有,默认GPIO都是value是0,两颗灯都很正常的亮着
另外,恢复dts设置,灯又可以控制的
页: [1] 2
查看完整版本: 如何操作GPIO