Licheepi Nano 03 GT911触摸屏与LVGL

发布于 2022-08-20  1,080 次阅读


  在本章中,我们将介绍如何对Nano添加GT911触摸屏适配,以及LVGL的移植。

一、修改设备树

  GT911需要6个接口,即:VDD、GND;SDA、SCK;IRQ、RST。这里使用PE11、PE12作为i2c接口;使用PE10作为中断,PE9作为Reset。首先我们需要在dtsi文件中添加我们使用的i2c接口的定义。首先在soc->pio节点下添加如下内容:

i2c0_pins: i2c0 {
                pins = "PE11", "PE12";
                function = "i2c0";
            };

然后在soc节点下添加:

i2c0: i2c@1C27000 {
            compatible = "allwinner,sun6i-a31-i2c";
            reg = <0x01C27000 0x400>;
            interrupts = <7>;
            clocks = <&ccu CLK_BUS_I2C0>;
            resets = <&ccu RST_BUS_I2C0>;
            pinctrl-names = "default";
            pinctrl-0 = <&i2c0_pins>;
            status = "disabled";
            #address-cells = <1>;
            #size-cells = <0>;
        };

  接下来在dts文件中添加GT911的描述内容。直接在后面追加如下内容:

/* GT911 */
&i2c0 {
    pinctrl-0 = <&i2c0_pins>;
    pinctrl-names = "default";
    status = "okay";

    gt911: touchscreen@5d {
        compatible = "goodix,gt911";
        reg = <0x5d>;
        interrupt-parent = <&pio>;
        interrupts = <4 10 IRQ_TYPE_EDGE_FALLING>; /* (PE10) */
        pinctrl-names = "default";
        // pinctrl-0 = <&ts_reset_pin>;
        irq-gpios = <&pio 4 10 GPIO_ACTIVE_HIGH>; /* (PE10) */
        reset-gpios = <&pio 4 9 GPIO_ACTIVE_HIGH>; /* RST (PE9) */
        max-x = <800>;
        max-y = <480>;
        /* touchscreen-swapped-x-y */
    };
}; 

// gt911 pio
&pio {
    gt911_int_pin: gt911_int_pin@0{
        pins = "PE10";
        function = "gpio_in";
    };

    ts_reset_pin: ts_reset_pin@0 {
        pins = "PE9";
        function = "gpio_out";
    };

值得注意的是,这里的GT911的地址需要对应手册查看为0x14还是0x5d;同时,pinctrl需要注释,否则会报错pin already request。这里是完整的dsti文件dts文件

二、编译内核

  在确保/drivers/input/touchscreen/下有goodix.c存在,之后编译内核,这里选择将gooidx编译到内核当中(采用模块的方式可能会遇到缺少bin文件的情况)。完成后进入启动荔枝派,进入/dev/目录,确认input文件夹的存在。我们可以通过ts_calibrate或者直接dumpinput/event0文件来确认触摸屏已经生效。

  值得注意的是,荔枝派的板子上没有上拉电阻,所以需要单独外接上拉电阻。对于I2C来说,接的电阻1k-2k左右;中断需要外接10k电阻。

图1 图2

三、LVGL的移植

  LVGL使用lv_port_linux_frame_buffer版本,这里我稍作修改,使用Cmake来管理项目,具体内容如下。

.
├── CMakeLists.txt
├── lv_conf.h
├── lv_drivers
│   ├── CMakeLists.txt
│   ├── display
│   ├── docs
│   ├── gtkdrv
│   ├── indev
│   ├── library.json
│   ├── LICENSE
│   ├── lv_drivers.mk
│   ├── lv_drv_conf_template.h
│   ├── README.md
│   ├── sdl
│   ├── wayland
│   ├── win32drv
│   ├── win_drv.c
│   └── win_drv.h
├── lv_drv_conf.h
├── lvgl
│   ├── CMakeLists.txt
│   ├── component.mk
│   ├── env_support
│   ├── idf_component.yml
│   ├── Kconfig
│   ├── library.json
│   ├── library.properties
│   ├── LICENCE.txt
│   ├── lv_conf_template.h
│   ├── lvgl.h
│   ├── lvgl.mk
│   ├── README.md
│   ├── README_pt_BR.md
│   ├── README_zh.md
│   ├── SConscript
│   ├── scripts
│   └── src
├── main.c
└── mouse_cursor_icon.c

  这里需要自行更改一些配置参数,evdev在lv_drv_conf.h中配置,屏幕分辨率、缓存大小等在main.c当中设置。