正点原子-imx6ull-EC11E18244AU驱动
一、硬件准备
- 正点原子IMX6ULL开发板(阿尔法开发板)
- EC11E18244AU 编码器
二、连线
-
连接示意图

-
实物图

三、设备树修改
基于正点原子官方提供的添加
/dts-v1/;
#include <dt-bindings/input/input.h>
#include "imx6ull.dtsi"
/ {
model = "Freescale i.MX6 ULL 14x14 EVK Board";
compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
chosen {
stdout-path = &uart1;
};
memory {
reg = <0x80000000 0x20000000>;
};
......
/**************************************EC11E18244AU 编码器 Start******************************************/
rotary_encoder {
compatible = "rotary-encoder";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_rotary_encoder>;
/* A相和B相连接的GPIO */
gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>, /* Channel A - EC11 Pin 1 (A相) */
<&gpio1 1 GPIO_ACTIVE_HIGH>; /* Channel B - EC11 Pin 3 (B相) */
/* 编码器步数: EC11E18244AU 为 18 PPR,4倍频后为 72 */
rotary-encoder,steps = <72>;
/* 使用相对轴模式,每次旋转产生 +1 或 -1 */
rotary-encoder,relative-axis;
/* 如果编码器在半周期模式下工作,取消下面注释 */
/* rotary-encoder,half-period; */
/* 如果需要上翻功能(从最大值回到0),取消下面注释 */
/* rotary-encoder,rollover; */
status = "okay";
};
rotary_encoder_key {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_rotary_encoder_key>;
#address-cells = <1>;
#size-cells = <0>;
autorepeat;
rotary_key@1 {
label = "ROTARY-KEY";
linux,code = <28>; /* KEY_ENTER */
gpios = <&gpio1 2 GPIO_ACTIVE_LOW>; /* EC11 按键 - Pin 4/5 (SW) */
gpio-key,wakeup;
linux,input-type = <1>; /* EV_KEY */
};
};
/**************************************EC11E18244AU 编码器 End******************************************/
......
};
......
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059 /* SD1 VSELECT */
/* MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x13058 */ /* USB_OTG1_ID - 已禁用,用于EC11 */
>;
};
.....
/****************************EC11E18244AU 编码器 Begin***********************************/
pinctrl_rotary_encoder: rotary-encoder-grp {
fsl,pins = <
/* EC11 编码器 A相 - GPIO1_IO00 - 启用内部上拉 */
MX6UL_PAD_GPIO1_IO00__GPIO1_IO00 0x17059
/* EC11 编码器 B相 - GPIO1_IO01 - 启用内部上拉 */
MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0x17059
>;
};
pinctrl_rotary_encoder_key: rotary-encoder-key-grp {
fsl,pins = <
/* EC11 按键 - GPIO1_IO02 - 启用内部上拉电阻 */
MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0x17059
>;
};
/***************************EC11E18244AU 编码器 End************************************/
......
};
};
......
四、Linux内核添加rotary-encoder
- 在Linux根目录执行
make menuconfig
--> Device Drivers
--> Input device support
--> Miscellaneous devices
--> Rotary encoders connected to GPIO pins

- 编译
make distclean
make imx_v7_mfg_defconfig
make -j 16
五、烧写
六、IMX6ULL平台验证
- 验证按键功能

- 旋钮功能


浙公网安备 33010602011771号