飞凌嵌入式ElfBoard ELF1板卡-开发板适配之按键
其他
 
995 人阅读
|
0 人回复
|
2025-01-24 
 
 
 
 
| 
 | 
 
 
在开发板上有三个用户按键,K1,K2,K3,Linux系统中也集成了gpio-keys驱动,依照上一节中的步骤,在设备树中进行按键设备配置。 
硬件原理 
 
 
IOMUX配置 
从上图可以看出GPIO5_4连接到了连接器的22脚,GPIO5_2连到了34脚,GPIO5_9连接到了43脚。接下来我们需要找到这几个引脚在软件上的信号名称。我们需要打开硬件资料中的 ELF 1开发板资料包\05-硬件资料\05-4 管脚分配表找到22、34、43引脚的信号名称。 
 
可以看到连接器的34引脚信号名称为SNVS_TAMPER2;22引脚的信号名称为SNVS_TAMPER4;43引脚的信号名称为SNVS_TAMPER9。 
因为需要使用这几个引脚控制按键,所以我们需要把它们复用成GPIO功能,在arch/arm/boot/dts/imx6ull-pinfunc-snvs.h中找到它们的宏定义,分别如下: 
 
然后打开设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux_snvs节点下添加子节点pinctrl_keys: 
pinctrl_keys: keysgrp { 
              fsl,pins = < 
                 MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04     0x80000000 
                 MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02     0x80000000 
                 MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09     0x80000000 
               >; 
}; 
添加后效果如下: 
 
添加设备节点 
在根节点下添加: 
gpio-keys { 
                compatible = "gpio-keys"; 
                pinctrl-names = "default"; 
                pinctrl-0 = <&pinctrl_keys>; 
                #address-cells = <1>; 
                #size-cells = <0>; 
                autorepeat; 
                key1 { 
                label = "KEY1"; 
                linux,code = <KEY_ENTER>; 
                gpios = <&gpio5 4 GPIO_ACTIVE_LOW>; 
                }; 
                key2 { 
                label = "KEY2"; 
                linux,code = <KEY_UP>; 
                gpios = <&gpio5 2 GPIO_ACTIVE_LOW>; 
                }; 
                key3 { 
                label = "KEY3"; 
                linux,code = <KEY_DOWN>; 
                gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; 
                }; 
        }; 
添加后效果如下: 
 
gpio-keys的compatible属性值为“gpio-keys”,用于驱动匹配。 
pinctrl-names属性值为“default”,定义了pincrtl的名字为“default”。 
pinctrl-0的属性值为<&pinctrl_keys>,就是引用了之前在iomux_snvs中定义的pinctrl_keys也就是说,在此处对iomux_snvs的配置进行了引用,类似函数的调用。 
status属性值设置为“okay”,表示LED设备可用。 
接下来三个子节点,分别对应三个具体按键。子节点的lable标签属性是可选的,可有可无。 
linux,code属性表示键值,在include/dt-bindings/input/input.h文件中有其宏定义。 
#define KEY_ENTER                28 
#define KEY_UP                        103 
#define KEY_DOWN                108 
gpios属性值指定了具体的GPIO引脚以及引脚的极性配置。如: 
gpios = <&gpio1 10 GPIO_ACTIVE_LOW>; 
指定是GPIO1_IO10引脚,极性是GPIO_ACTIVE_LOW,就是指高电平有效还是低电平有效,需要根据具体电路配合使用。 
配置按键驱动编译进内核 
由于上一节已经全编译过,因此本节可以直接在根目录下使用make menuconfig命令,在如下路径查看是否有配置: 
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig 
找到以下位置,Keyboards驱动默认已经编译进内核。 
-> Device Drivers 
->Input device support 
->Keyboards 
 
编译测试 
由于使用build.sh全编译时间太长,我们可以将build.sh当中的第4行注释掉: 
 
编译内核并拷贝到开发板: 
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ./build.sh 
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/zImage   root\@172.16.0.175:/run/media/mmcblk1p1/ 
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf\1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/ 
进行sync操作后重启开发板: 
 
使用cat /proc/bus/input/devices命令查看key设备对应的event事件: 
root@ELF1:~# cat /proc/bus/input/devices 
 
可以看到其对应的是event2,如果连接了其他设备,比如触摸屏,event事件可能会有变化,请以实际为准: 
终端输入evtest命令,选择event number为2,然后分别按键K1,K2,K3,会看到上报数据。 
root@ELF1:~# evtest 
 
可以看到KEY1上报的键值是28,KEY2上报的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |