硬件了解 首先,还是从官方提供的资料,可以了解MIPI LCD对应的接口信息:
[color=var(--tertiary)] [color=var(--secondary)]17141906868718[color=var(--secondary-high)]774×1288 133 KB
触摸功能涉及到DSI_SCL、DSI_SDA、TP_INT、TP_RESET。 从芯片的引脚图里面,可以了解到:
[color=var(--tertiary)] [color=var(--secondary)]17141907831990[color=var(--secondary-high)]1356×880 190 KB
其中: - DSI_SCL、DSI_SDA使用的是PB0、PB1
- TP_INT和TP_RESET使用的是:PB6、PB4
设备树修改参考 [color=var(--tertiary)]嵌入式开发问答社区100ASK_V853-PRO开发板支持4寸MIPI屏 进行设备树修改。 设备树文件: tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4/board.dts- 检查设备树中的twi2_pins_a、twi2_pins_b的配置:
twi2_pins_a: twi2@0 { pins = [color=var(--hljs-string)]"PB0", [color=var(--hljs-string)]"PB1"; [color=var(--primary-very-high)]function = [color=var(--hljs-string)]"twi2"; drive-strength = <10>; }; twi2_pins_b: twi2@1 { pins = [color=var(--hljs-string)]"PB0", [color=var(--hljs-string)]"PB1"; [color=var(--primary-very-high)]function = [color=var(--hljs-string)]"gpio_in"; };确保其中引脚与前面硬件了解中的一致。 &twi2 { clock-frequency = <[color=var(--hljs-number)]400000>; pinctrl[color=var(--hljs-number)]-0 = <&twi2_pins_a>; pinctrl[color=var(--hljs-number)]-1 = <&twi2_pins_b>; pinctrl-names = [color=var(--hljs-string)]"default", [color=var(--hljs-string)]"sleep"; dmas = <&dma [color=var(--hljs-number)]45>, <&dma [color=var(--hljs-number)]45>; dma-names = [color=var(--hljs-string)]"tx", [color=var(--hljs-string)]"rx"; status = [color=var(--hljs-string)]"okay"; ctp@[color=var(--hljs-number)]38 { compatible = [color=var(--hljs-string)]"focaltech,fts"; reg = <[color=var(--hljs-number)]0x00000038>; status = [color=var(--hljs-string)]"okay"; interrupt-parent = <&pio>; interrupts = <PB [color=var(--hljs-number)]6 IRQ_TYPE_LEVEL_LOW>; focaltech,reset-gpio = <&pio PB [color=var(--hljs-number)]4 GPIO_ACTIVE_HIGH>; focaltech,irq-gpio = <&pio PB [color=var(--hljs-number)]6 IRQ_TYPE_LEVEL_LOW>; focaltech,max-touch-number = <[color=var(--hljs-number)]5>; focaltech,display-coords = <[color=var(--hljs-number)]0 [color=var(--hljs-number)]0 [color=var(--hljs-number)]800 [color=var(--hljs-number)]480>; focaltech,reg_vdd = <[color=var(--hljs-number)]0x0000001f>; focaltech,reg_avdd = <[color=var(--hljs-number)]0x0000001f>; #touchscreen-inverted-x = <0x00000001>; #touchscreen-inverted-y = <0x00000001>; };};确保其中引脚与前面硬件了解中的一致。 驱动程序如果不修改驱动程序,触摸功能也能使用上,但是x轴是左右反向的,y轴也是如此,在设备树中不能定义处理,需要修改驱动程序。
具体如下。 驱动文件: lichee/linux-5.4/drivers/input/touchscreen/focaltech_touch/focaltech_core.c修改xy坐标返回值: # 默认: [color=var(--hljs-string)]input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->au16_x); [color=var(--hljs-string)]input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->au16_y);# 修改为: [color=var(--hljs-string)]input_report_abs(data->input_dev, ABS_MT_POSITION_X, [color=var(--hljs-number)]480-event->au16_x); [color=var(--hljs-string)]input_report_abs(data->input_dev, ABS_MT_POSITION_Y, [color=var(--hljs-number)]800-event->au16_y);因为屏幕是480x800的,所以直接用对应的宽高减去获得的值即可。 配置修改[color=var(--hljs-builtin-name)]make menuconfig选择:Kernel modules > Input modules -> kmod-input-core
选择:Kernel modules > Input modules -> kmod-touchscreen-focaltech # 其他触屏不选
[color=var(--tertiary)] [color=var(--secondary)]17141915172406[color=var(--secondary-high)]1352×848 238 KB
[color=var(--hljs-builtin-name)]make kernel_menuconfig选择:Device Drivers > Input device support > Touchscreens -> Focaltech Touchscreen # 其他不选
[color=var(--tertiary)] [color=var(--secondary)]17141916168969[color=var(--secondary-high)]1400×860 202 KB
编译烧录修改完成后,就可以进行编译打包make -j16 && pack,最终结果如下:
[color=var(--tertiary)] [color=var(--secondary)]17141917046336[color=var(--secondary-high)]1012×392 85.9 KB
然后使用烧录工具进行烧录即可。 MIPI LCD测试将 MIPI LCD和板子连接好,注意连接正确:
 然后用adb shell或者串口连接进行操作。 [color=var(--hljs-builtin-name)]cat /dev/input/
[color=var(--tertiary)] [color=var(--secondary)]17141919215450[color=var(--secondary-high)]972×224 41.9 KB
从上面的输出可以看到event2,表示识别到了。 再看看系统启动输出信息中,对应的适配信息: dmesg | [color=var(--primary-very-high)]grep -A4 -B4 fts
[color=var(--tertiary)] [color=var(--secondary)]17141919915702[color=var(--secondary-high)]1434×420 174 KB
可以看到,已经成功适配,没有出错信息。 [color=var(--hljs-builtin-name)]cat /dev/input/event2 | hexdump -x执行后,点击屏幕任一位置,有返回,说明能够接收到触摸数据了:
[color=var(--tertiary)] [color=var(--secondary)]17141921825121[color=var(--secondary-high)]1030×504 181 KB
- 屏幕校准
初次使用屏幕时,需要进行屏幕校准,确保点击位置准确,以免发生偏差。
[color=var(--hljs-comment)]## 触屏校准[color=var(--hljs-builtin-name)]export TSLIB_CALIBFILE=/etc/pointercal[color=var(--hljs-builtin-name)]export TSLIB_CONFFILE=/etc/ts.conf[color=var(--hljs-builtin-name)]export TSLIB_PLUGINDIR=/usr/lib/ts[color=var(--hljs-builtin-name)]export TSLIB_CONSOLEDEVICE=none[color=var(--hljs-builtin-name)]export TSLIB_FBDEVICE=/dev/fb0[color=var(--hljs-builtin-name)]export TSLIB_TSDEVICE=/dev/input/event2ts_calibrate执行后,输出如下:
[color=var(--tertiary)] [color=var(--secondary)]17141922781640[color=var(--secondary-high)]848×304 86.3 KB
此时屏幕显示如下:
[color=var(--tertiary)] [color=var(--secondary)]17141924390191[color=var(--secondary-high)]1706×1279 231 KB
点击左上角的那个 + ,又会出现下一个,依次点击:左上、右上、右下、左下、中间,最后黑屏。 输出信息如下:
[color=var(--tertiary)] [color=var(--secondary)]17141925250949[color=var(--secondary-high)]964×498 87.2 KB
点击的时候,如果点左上角,发现X值是400+,Y值是700+,那铁定是前面的驱动文件没有修改或者修改不对,或者修改了没有重新编译烧录。 校准完成后,重启生效: sudo reboot -d 0- 使用lvgl测试用例
在使用lv_examples之前,需要做一些修改,使得触摸使用/dev/input/event2
文件:
~/tina-d1-h/package/gui/littlevgl-8lv_examples/src/lv_drv_conf.h修改: [color=var(--primary-very-high)]define EVDEV_NAME [color=var(--hljs-string)]"/dev/input/event2"修改完成后,重新编译烧录即可。 然后,使用 lv_examples进行测试: [color=var(--hljs-string)]lv_examples [color=var(--hljs-number)]9999会输出如下结果,表示有5个测试用例可用:
[color=var(--tertiary)] [color=var(--secondary)]image[color=var(--secondary-high)]780×244 24.6 KB
大家可以依次测试看看效果如何。 这里就展示lv_examples 0,结果如下:
[color=var(--tertiary)] [color=var(--secondary)]17141928400692[color=var(--secondary-high)]752×170 38.6 KB
屏幕显示如下:
[color=var(--tertiary)] [color=var(--secondary)]17141928934191[color=var(--secondary-high)]1706×1279 310 KB
左右滑动,上下滑动,或者点击屏幕上的输入位置,就能够进行操作了。
触摸操作的时候,如果发现上面点了下面动,下面点了上面动,或者滑动刚好和实际方向相反,那铁定是前面的驱动文件没有修改或者修改不对,或者修改了没有重新编译烧录。 现在,屏幕适配好了,触摸也适配好了,后面就可以学学LVGL,来进行界面和互动设计开发了。
|