MIPI屏適配
100ASK-D1-H_DualDisplay-DevKit V11
1. 顯示適配
1.1 修改設備樹
1.1.1 修改內核設備樹
進入目錄:
cd /home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4
修改board.dts
:
&lcd0 {lcd_used = <1>;lcd_driver_name = "tft08006";lcd_backlight = <100>;lcd_if = <4>;lcd_x = <480>;lcd_y = <800>;lcd_width = <52>;lcd_height = <52>;lcd_dclk_freq = <25>;lcd_pwm_used = <1>;lcd_pwm_ch = <0>;lcd_pwm_freq = <1000>;lcd_pwm_pol = <0>;lcd_pwm_max_limit = <255>;lcd_hbp = <10>;lcd_ht = <515>;lcd_hspw = <5>;lcd_vbp = <20>;lcd_vt = <830>;lcd_vspw = <5>;lcd_dsi_if = <0>;lcd_dsi_lane = <2>;lcd_lvds_if = <0>;lcd_lvds_colordepth = <0>;lcd_lvds_mode = <0>;lcd_frm = <0>;lcd_hv_clk_phase = <0>;lcd_hv_sync_polarity= <0>;lcd_gamma_en = <0>;lcd_bright_curve_en = <0>;lcd_cmap_en = <0>;lcd_fsync_en = <0>;lcd_fsync_act_time = <1000>;lcd_fsync_dis_time = <1000>;lcd_fsync_pol = <0>;deu_mode = <0>;lcdgamma4iep = <22>;smart_color = <90>;lcd_gpio_0 = <&pio PG 13 GPIO_ACTIVE_HIGH>;pinctrl-0 = <&dsi4lane_pins_a>;pinctrl-1 = <&dsi4lane_pins_b>;
};
根據原理圖:
可以查看到,mipi屏的pwm通道引腳是PB5,設備樹中搜索PB5,發現有I2C設備樹節點占用,需要把status
位設置為disabled
:
lcd0設備樹節點中的pwm通道是pwm0,即把pwm0設備樹節點的引腳改為相應的PB5
引腳:
1.1.2 修改uboot設備樹
進入目錄:
/home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha
修改uboot-board.dts
:
&lcd0 {lcd_used = <1>;lcd_driver_name = "tft08006";lcd_backlight = <100>;lcd_if = <4>;lcd_x = <480>;lcd_y = <800>;lcd_width = <52>;lcd_height = <52>;lcd_dclk_freq = <25>;lcd_pwm_used = <1>;lcd_pwm_ch = <0>;lcd_pwm_freq = <1000>;lcd_pwm_pol = <0>;lcd_pwm_max_limit = <255>;lcd_hbp = <10>;lcd_ht = <515>;lcd_hspw = <5>;lcd_vbp = <20>;lcd_vt = <830>;lcd_vspw = <5>;lcd_dsi_if = <0>;lcd_dsi_lane = <2>;lcd_lvds_if = <0>;lcd_lvds_colordepth = <0>;lcd_lvds_mode = <0>;lcd_frm = <0>;lcd_hv_clk_phase = <0>;lcd_hv_sync_polarity= <0>;lcd_io_phase = <0x0000>;lcd_dsi_te = <0>;lcd_gamma_en = <0>;lcd_bright_curve_en = <0>;lcd_cmap_en = <0>;lcd_fsync_en = <0>;lcd_fsync_act_time = <1000>;lcd_fsync_dis_time = <1000>;lcd_fsync_pol = <0>;deu_mode = <0>;lcdgamma4iep = <22>;smart_color = <90>;lcd_gpio_0 = <&pio PG 13 GPIO_ACTIVE_HIGH>;pinctrl-0 = <&dsi4lane_pins_a>;pinctrl-1 = <&dsi4lane_pins_b>;
};
1.2 內核配置
修改內核驅動:
進入目錄:
~/tina-d1-h/lichee/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/lcd
在這里100ASK_T113-PRO開發板適配4寸MIPI屏-Tina SDK - Allwinner / T113s3-PRO - 嵌入式開發問答社區可以下載到相應的驅動,替換到TinaSDK里面的tft08006.c
和tft08006.h
。
并修改如下:
執行ckernel
,進入內核配置界面:
m kernel_menuconfig
選上屏幕顯示驅動TFT08006
:
選上支持顯示框架驅動:
"DISP Driver Support"關乎顯示驅動框架的整體啟用,而"LCD panels select"則專注于在這個框架下選擇和配置具體的LCD面板硬件。前者是基礎支持層,后者是具體應用層。
1.3 uboot配置
修改uboot下的驅動:
進入目錄:
~/tina-d1-h/lichee/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd
在這里100ASK_T113-PRO開發板適配4寸MIPI屏-Tina SDK - Allwinner / T113s3-PRO - 嵌入式開發問答社區可以下載到相應的驅動,替換到TinaSDK里面的tft08006.c
和tft08006.h
。
并修改如下:
執行cboot
,進入uboot配置界面:
make menuconfig
選上屏幕顯示驅動:
選上支持顯示框架驅動:
mipi屏幕顯示需要先在uboot階段初始化。
1.4 顯示測試
為了方便測試屏幕顯示,可以選上TinaSDK自帶的lvgl例程。
執行croot
,進入配置界面:
make menuconfig
選上lvgl例程:
編譯make
,打包pack
。
燒錄到板子后,執行lv_examples 1
:
2. 觸摸適配
2.1 修改內核設備樹
根據原理圖:
可以查看:
TP_INT→PB6;TP_RESET→PB4;DSI_SCL→PB0;DSI_SDA→PB1;
進入:
vi /home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4/board.dts
看到PB0、PB1引腳對應的是twi2設備樹節點。所以需要在twi2設備樹節點中添加觸摸屏設備樹節點。
&twi2 {clock-frequency = <400000>;pinctrl-0 = <&twi2_pins_a>;pinctrl-1 = <&twi2_pins_b>;pinctrl-names = "default", "sleep";dmas = <&dma 45>, <&dma 45>;dma-names = "tx", "rx";status = "okay";ctp@38 {compatible = "focaltech,fts";reg = <0x38>;status = "okay";interrupt-parent = <&pio>;interrupts = <PB 6 IRQ_TYPE_LEVEL_LOW>;focaltech,reset-gpio = <&pio PB 4 GPIO_ACTIVE_HIGH>;focaltech,irq-gpio = <&pio PB 6 IRQ_TYPE_LEVEL_LOW>;focaltech,max-touch-number = <5>;focaltech,display-coords = <0 0 480 800>;focaltech,reg_vdd = <0x0000001f>;focaltech,reg_avdd = <0x0000001f>;};
};
如果原來有同樣地址為0x38的I2C設備和觸摸設備的節點時,可以注釋或者刪除。
2.2 添加觸摸驅動
Tina_SDK自帶相應的觸摸驅動,只需修改內核配置,把驅動編譯進系統。
執行ckernel
進入內核目錄。
執行m kernel_menuconfig
,進入內核配置界面,選上Focaltech Touchscreen<span> </span>
:
執行croot
,進入SDK根目錄,執行make menuconfig
進入配置界面,把觸摸驅動模塊添加進文件系統中:
2.3 修改觸摸驅動
在測試過程中,發現觸摸點(x,y)不對,需要修改驅動程序。
進入目錄:
tina-d1-h/lichee/linux-5.4/drivers/input/touchscreen/focaltech_touch
修改:
vim focaltech_core.c
兩處修改:
- 在
fts_input_dev_report_a
函數中修改,找到相應的位置:
#原來的
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->au16_x[i]);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->au16_y[i]);#修改的
input_report_abs(data->input_dev, ABS_MT_POSITION_X, -(event->au16_x[i] - 480));
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, -(event->au16_y[i] - 800));
- 在
fts_input_dev_report_b
函數中修改,找到相應的位置:
#原來的
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->au16_x[i]);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->au16_y[i]);#修改的
input_report_abs(data->input_dev, ABS_MT_POSITION_X, -(event->au16_x[i] - 480));
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, -(event->au16_y[i] - 800));
2.4 修改lvgl驅動配置文件
如果在lvgl的例程上測試觸摸功能,需要進入目錄:
cd /home/ubuntu/tina-d1-h/package/gui/littlevgl-8/lv_examples/src
修改:
vim lv_drv_conf.h
如果之前配置過lvgl例程,需要進入目錄:
cd /home/ubuntu/tina-d1-h/out/d1-h-nezha/compile_dir/target
刪除lv_examples
,再進行編譯打包燒錄。
開發板上執行lv_examples 0
,測試: