MIPI屏适配
本章节主要介绍如何在T113-i开发板中适配4寸MIPI屏,MIPI屏购买地址
下面操作步骤需要相对应的uboot屏驱动、kernel屏驱动。这里有相应的下载链接 ==> 资源包
1.显示部分适配
1.1 配置内核屏驱动
在Ubuntu上,进入目录t113i_tinasdk5.0-v1/kernel/linux-5.4/drivers/video/fbdev/sunxi/disp2/disp/lcd/
需要使用上面资源包kerneldriver
文件夹里面的tft08006.c
和tft08006.h
,替换掉当前目录下的tft08006.c
和tft08006.h
还需要修改tft08006.c
,执行vim tft08006.c
,点击键盘上的大写G
,跳到文件的最后,对比原来的tft08006.c
文件,如下:
把ili9806e
改为tft08006
,当然也可以不改,只要设备树上的名字和这里的对应就可以。这里选择修改。
按esc
,然后:wq
退出保存。
回到SDK源码根目录t113i_tinasdk5.0-v1/
,执行./build.sh menuconfig
进入内核配置界面。
找到 Device Drivers
,进入。
找到Graphics support
,进入。
找到Frame buffer Devices
,进入。
找到Video support for sunxi
,进入。
找到 LCD panels select
,进入。
找到LCD support TFT08006 panel
,点击键盘y
,选上。
保存退出。
回到SDK源码根目录t113i_tinasdk5.0-v1/
,执行./build.sh kernel
,单独编译内核。
ubuntu@dshanpi:~/meihao/t113i_tinasdk5.0-v1$ ./build.sh kernel
========ACTION List: build_kernel ;========
options :
INFO: build kernel ...
INFO: prepare_buildserver
INFO: Prepare toolchain ...
Building kernel
...
Copy boot.img to output directory ...
sun8iw20p1 compile all(Kernel+modules+boot.img) successful
INFO: build dts ...
INFO: Prepare toolchain ...
removed '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot/.board.dtb.d.dtc.tmp'
removed '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot/.board.dtb.dts.tmp'
'/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/kernel/build/arch/arm/boot/dts/.board.dtb.d.dtc.tmp' -> '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot/.board.dtb.d.dtc.tmp'
'/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/kernel/build/arch/arm/boot/dts/.board.dtb.dts.tmp' -> '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot/.board.dtb.dts.tmp'
'/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/kernel/staging/sunxi.dtb' -> '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot/sunxi.dtb'
ubuntu@dshanpi:~/meihao/t113i_tinasdk5.0-v1$
这样内核里就支持了MIPI屏幕的驱动,想要该MIPI屏幕的驱动程序工作,还需 要在设备树上添加相应的设备树节点。
1.2 修改内核设备树
进入目录t113i_tinasdk5.0-v1/device/config/chips/t113_i/configs/evb1_auto/linux-5.4
。
可以看到目录下有一个board.dts
设备树文件。
输入vim board.dts
在普通模式下执行/lcd0
,找到原本已存在的lcd0设备树节点,复制以下内容,在附近点击键盘p
粘贴,:
&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 = <2>;
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_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 PD 19 GPIO_ACTIVE_HIGH>;
pinctrl-0 = <&dsi4lane_pins_a>;
pinctrl-1 = <&dsi4lane_pins_b>;
};
原本的设备树文件中,还有lcd0设备树节点存在,需要把多余的lcd0设备树节点注释或者删除。
通过查看原理图:
MIPI屏的pwm引脚是PB11,需要确保PB11引脚没有被其他设备树节点使用。
在设备树里可以看到,usbc0设备树节点占用了PB11引脚,而该设备树节点对应的是OTG的接口,不过只作为usb device使用,所以只需要把usb_id_gpio
和usb_det_vbus_gpio
注释或者删除即可。
这里选择删除。
继续查看原理图:
MIPI屏的reset引脚是PD19,需要确保PD19引脚没有被其他设备树节点使用。
在设备树里可以看到,被reg_usb1_vbus
占用了PD19,选择注释。
执行:wq
,退出保存。
1.3 配置uboot屏驱动
想要开机进入系统后,屏幕能直接支持显示,不用执行重置屏幕操作,就需要在uboot阶段添加相应的屏驱动,这样也能在uboot阶段显示LOGO图。
在Ubuntu上,进入目录t113i_tinasdk5.0-v1/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd
需要使用上面资源包ubootdriver
文件夹里面的tft08006.c
和tft08006.h
,替换掉当前目录下的tft08006.c
和tft08006.h
还需要修改tft08006.c
,执行vim tft08006.c
,点击键盘上的大写G
,跳到文件的最后,对比原来的tft08006.c
文件,如下:
把ili9806e
改为tft08006
,当然也可以不改,只要设备树上的名字和这里的对应就可以。这里选择修改。
按esc
,然后:wq
退出保存。
执行cboot
,进入uboot源码目录t113i_tinasdk5.0-v1/brandy/brandy-2.0/u-boot-2018
。
输入make menuconfig
,进入uboot配置界面。
找到 Device Drivers
,进入。
找到Graphics support
,进入。
找到 LCD panels select
,进入。
找到LCD support TFT08006 panel
,点击键盘y
,选上。
保存退出。
在当前目录上t113i_tinasdk5.0-v1/brandy/brandy-2.0/u-boot-2018
,执行mboot
编译uboot源码
ubuntu@dshanpi:~/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/u-boot-2018$ mboot
========ACTION List: build_bootloader all force;========
options :
find: '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/spl': No such file or directory
find: '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/dramlib': No such file or directory
INFO: build_bootloader: brandy_path=/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0
INFO: uboot-board.dts updated.
build_option:-p sun8iw20p1_auto_t113_i -b t113_i -o all
grep: /home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/spl/Makefile: No such file or directory
Prepare toolchain ...
Prepare toolchain ...
uboot version:u-boot-2018
build for sun8iw20p1_auto_t113_i_defconfig ...
...
bootaddr is 0x20480
/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/spl-pub/../tools/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-ld /home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/spl-pub/board/t113_i/libsun8iw20p1_sboot.a /home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/spl-pub/sboot/main/sboot_main.o -L /home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/tools/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabi/7.2.1 -lgcc --gc-sections --gc-sections -Tsboot.lds -o sboot.elf -Map sboot.map
/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/spl-pub/../tools/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-objcopy -O binary sboot.elf sboot.bin
'sboot_sun8iw20p1.bin' -> '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/spl-pub/out/sun8iw20p1/bin/sboot_sun8iw20p1.bin'
'sboot_sun8iw20p1.bin' -> '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/device/config/chips/t113_i/bin/sboot_sun8iw20p1.bin'
'sboot_sun8iw20p1.bin' -> '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot/sboot_sun8iw20p1.bin'
INFO: build brandy OK.
ubuntu@dshanpi:~/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/u-boot-2018$
1.4 修改uboot设备树
同样的,uboot的设备树也需要添加相应的设备树节点。
进入目录t113i_tinasdk5.0-v1/device/config/chips/t113_i/configs/evb1_auto
可以看到当前目录有一个uboot-board.dts
设备树文件。
输入vim uboot-board.dts
在普通模式下执行/lcd0
,找到原本已存在的lcd0设备树节点,复制以下内容,在附近点击键盘p
粘贴,:
&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 = <2>;
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_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 PD 19 GPIO_ACTIVE_HIGH>;
pinctrl-0 = <&dsi4lane_pins_a>;
pinctrl-1 = <&dsi4lane_pins_b>;
};
执行:wq
,退出保存。
1.5 添加LOGO图
MIPI的分辨率大小是480*800,所以需要准备一张类似大小的logo图。
制作一张分辨率为480*800大小的logo图,保存格式是.bmp
格式,并且命名为bootlogo
制作好图片后,把图片拉取到目录t113i_tinasdk5.0-v1/device/config/chips/t113_i/boot-resource/boot-resource
下。
还需要确保t113i_tinasdk5.0-v1/brandy/brandy-2.0/u-boot-2018/configs/sun8iw20p1_auto_t113_i_defconfig
文件中,以下选项是否打开:
CONFIG_CMD_SUNXI_BMP=y
CONFIG_LZMA=y
CONFIG_DISP2_SUNXI=y
CONFIG_AW_PHY=y
CONFIG_BOOT_GUI=y
进入SDK源码目录t113i_tinasdk5.0-v1/
,输入./build.sh
,编译固件。
ubuntu@dshanpi:~/meihao/t113i_tinasdk5.0-v1$ ./build.sh
========ACTION List: build_linuxdev;========
options :
INFO: ----------------------------------------
INFO: build linuxdev ...
INFO: chip: sun8iw20p1
INFO: platform: linux
INFO: kernel: linux-5.4
INFO: board: evb1_auto
INFO: output: /home/ubuntu/meihao/t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot
INFO: ----------------------------------------
INFO: don't build dtbo ...
INFO: build arisc
find: '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0/spl': No such file or directory
find: '/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/dramlib': No such file or directory
INFO: build_bootloader: brandy_path=/home/ubuntu/meihao/t113i_tinasdk5.0-v1/brandy/brandy-2.0
INFO: skip build brandy.
INFO: build kernel ...
INFO: prepare_buildserver
INFO: Prepare toolchain ...
Building kernel
...
Number of duplicate files found 37
Number of inodes 6686
Number of files 5571
Number of fragments 397
Number of symbolic links 813
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 302
Number of ids (unique uids + gids) 1
Number of uids 1
root (0)
Number of gids 1
root (0)
INFO: pack rootfs ok ...
INFO: ----------------------------------------
INFO: build Tina OK.
INFO: ----------------------------------------
ubuntu@dshanpi:~/meihao/t113i_tinasdk5.0-v1$
编译完成后,进行打包./build.sh pack
,最后根据之前的烧录方式烧录到开发板。
如果进入内核阶段没有logo图显示,可以执行重置屏幕操作:
mount -t debugfs none /sys/kernel/debug
cd /sys/kernel/debug/dispdbg
echo suspend> command
echo disp0 > name
echo 1 > start
echo resume > command
echo disp0 > name
echo 1 > start
echo 8 > /sys/class/disp/disp/attr/colorbar