发 帖  
原厂入驻New
[Z-turn Board] 关于GPIO在sysfs编号的问题,深入探讨gpio linux控制
2020-3-6 16:27:18  489 GPIO
分享
本想控制米尔开发板上K1的usr按键,这个按键是连接到PS端的MIO 50。一般步骤可以shell操作sys/classes/gpios/文件夹找到这个gpio的编号,就是这个编号查的我天昏地暗很崩溃。
据很多网贴说gpio从906开始是因为,一共有1023个编号,而gpio有118个,所以1023-118=905,很多网贴也有提到偏移地址906这个。但是我手里现在的板子打开看发现没有906,是110(怀疑这个就是0号GPIO)和111.而且也无法用echo命令export任何一个新的gpio文件。目前来看gpio的基本控制就是类似LED操作,只是多了一步export命令,当export成功后,再对相应的direction和value进行操作。所以现在的关键是找到三个答案,1、我手里的开发板的gpio的偏移地址是多少。2为何目前export不成功。(这个会不会需要root权限去操作export命令。排除使用whoami命令发现自己已经是root用户)3、检查下当前Vivado工程是否gpio的配置打开.
问题3已经排除,工程已经打开MIO50;
问题2也排除,是root用户;问题1就根据xilinxi wiki网址(https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842398/Linux+GPIO+Driver
去找到这个编号的算法。
在driver/gpios/gpio-zynq.c中定义了ZYNQ_GPIO_NR_GPIOS的数量118

而在include/asm_generic/gpio.h中定义了ARCH_NR_GPIOS的数量256

在arch/ARM/include也有gpio.h文件不过主要是调用include/asm_generic/gpio.h
但是根据wiki的算法,即使echo相应编号也不能打开。
wiki上的算法入戏:
The basic formula (for Zynq) is base_gpio=ARCH_NR_GPIOS - ZYNQ_GPIO_NR_GPIOS. Then, allocated_gpios=ARCH_NR_GPIOS - base_gpio. Next, other_gpio=allocated_gpios - ZYNQ_GPIO_NR_GPIOS. Finally, gpio_offset=base_gpio + other_gpio. So, to calculate a specIFic GPIO number, it is base_gpio + other_gpios.

后来终于找到为什么这usr按键在这里不能用export打开,因为在设备树中声明了这个按键是gpio-key,源码如下:
  gpio-keys {
        compatible = "gpio-keys";
        #address-cells = <1>;
        #size-cells = <0>;
        autorepeat;
        K1 {
            label = "K1";
            gpios = <&gpio0 50 1>;
            linux,code = <102>; /*KEY_HOME */
            gpio-key,wakeup;
            autorepeat;

        };
那么就要采取event事件方法去调用。shell中输入命令
cat /dev/input/event0 | hexdump
如下图
按键事件
终于这个gpio有反应了。下篇文章具体写一下linux对这个key操作的应用程序。不过大家其实看那个我上面分享的wiki文章,那里也说的很详细了。


0
2020-3-6 16:27:18   评论 分享淘帖
1 个讨论
在写linux应用程序时候,出了一个小错误,打开文件时候开始写的是tmp = open("/dev/input/event1",O_WRONLY);结果在后一步read的时候总是失败。后来检查发现只能是0_RDONLY,tmp = open("/dev/input/event1",O_WRONLY);后面就很顺利了,按下按键检测到了,开始出发led一闪一闪
2020-3-9 16:02:21 评论

举报

只有小组成员才能发言,加入小组>>

78个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表