基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动

  • 1.硬件电路
  • 2.LCD实物图
  • 3.LCD 的驱动
  • 4.uboot配置
    • 4.1.配置文件
    • 4.2.uboot设备树
  • 5.kernel配置
    • 5.1.内核配置
    • 5.2.设备树配置
  • 6.测试屏幕
  • 7.LVGL实测

1.硬件电路

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第1张图片
基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第2张图片

2.LCD实物图

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第3张图片
基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第4张图片

3.LCD 的驱动

Tina Linux 提供了一套完整的屏幕驱动,支持 RGB,MIPI DSI,eDP,LVDS,E-INK屏幕,也支持低分辨率的 SPI,IIC 屏幕。具体屏幕的驱动情况,需要根据芯片而确定。

本文将通过介绍Linux 5.4 两个版本的 Kernel 中的 LCD 驱动,主要讲解配置屏幕驱动的基本方法。

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第5张图片
显示驱动主要划分为三个层:驱动层,框架层及底层。底层与图形硬件相接,主要负责将上层配置的功能参数转换成硬件所需要的参数,并配置到相应寄存器中。

显示框架层对底层进行抽象封装成一个个的功能模块。驱动层对外封装功能接口,通过内核向用户空间提供相应的设备结点及统一的接口。

在驱动层,分为三个驱动,分别是framebuffer驱动,display驱动,LCD&HDMI驱动。framebuffer 驱动与 framebuffer core 对接,实现 linux 标准的framebuffer 接口。display驱动是整个显示驱动中的核心驱动模块,所有的接口都由 display 驱动来提供,包括 lcd 的接口。

4.uboot配置

4.1.配置文件

首先需要修改一下配置文件,sun20iw1p1_defconfig该文件是T113的uboot配置文件。路径如下所示:

Tina-Linux为工程目录,根据自己的sdk路径选择

Tina-Linux/lichee/brandy-2.0/u-boot-2018/configs/sun20iw1p1_defconfig   

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第6张图片

红色框框住的是 DISP 驱动部分,主要部分如下:

CONFIG_CMD_SUNXI_BMP=y          # 开机 LOGO BMP 文件解析器
CONFIG_LZMA=y                   # 开机 LOGO 使用 LZMA 压缩解压工具
CONFIG_DISP2_SUNXI=y            # DISP 驱动
CONFIG_HDMI2_DISP2_SUNXI=y      # HDMI DISP 驱动 
CONFIG_AW_PHY=y                 # DISP 驱动使用的是全志自研外设

如果希望关闭 U-Boot 的 LCD DISP 驱动输出,可以注释掉 CONFIG_DISP2_SUNXI=y 这一行。关闭 HDMI DISP 驱动也相同,注释即可。

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第7张图片

4.2.uboot设备树

主要配置了屏幕的特性与功能,路径和配置如下:

Tina-Linux/device/config/chips/t113/configs/mq_r/uboot-board.dts
&lcd0 {
	lcd_used            = <1>;				# 启用lcd

	lcd_driver_name     = "default_lcd";	# 使用 default_lcd 驱动
	lcd_backlight       = <50>;
	lcd_if              = <0>;				# 0:rgb 4:dsi

	lcd_x               = <800>;			# 宽度
	lcd_y               = <480>;			# 高度
	lcd_width           = <108>;			# 屏幕物理宽度,单位 mm
	lcd_height          = <65>;				# 屏幕物理高度,单位 mm
	lcd_dclk_freq       = <22>;				# 屏幕时钟,单位 MHz

	lcd_pwm_used        = <1>;				# 启用背光 PWM
	lcd_pwm_ch          = <9>;				# 使用 PWM 通道 9 
	lcd_pwm_freq        = <50000>;			# PWM 频率,单位 Hz
	lcd_pwm_pol         = <0>;				# 背光 PWM 的极性

	lcd_hbp             = <12>;				# hsync back porch(pixel) + hsync plus width(pixel);
	lcd_ht              = <816>;			# hsync total cycle(pixel)
	lcd_hspw            = <4>;				# hsync plus width(pixel)
	lcd_vbp             = <12>;				# vsync back porch(line) + vysnc plus width(line)	
	lcd_vt              = <46>;				# vsync total cycle(line)
	lcd_vspw            = <4>;				# vsync plus width(pixel)

	lcd_lvds_if         = <0>;
	lcd_lvds_colordepth = <1>;
	lcd_lvds_mode       = <0>;
	lcd_frm             = <0>;
	lcd_io_phase        = <0x0000>;
	lcd_gamma_en        = <0>;
	lcd_bright_curve_en = <0>;
	lcd_cmap_en         = <0>;

	deu_mode            = <0>;
	lcdgamma4iep        = <22>;
	smart_color         = <90>;

	pinctrl-0 = <&rgb18_pins_a>;
	pinctrl-1 = <&rgb18_pins_b>;
};

5.kernel配置

5.1.内核配置

运行 make kernel_menuconfig 进入内核配置,找到 Video support for sunxi

Device Drivers > Graphics support > Frame buffer Devices > Video support for sunxi

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第8张图片
在显示驱动中最主要的是 <*> DISP Driver Support(sunxi-disp2) ,勾选后可以看到其他的选项。包括驱动支持,调试接口和 LCD 面板的选择。(LCD panels select),进入 LCD 面板选择可以看到许多已经适配了的显示屏可供选择使用。

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第9张图片

5.2.设备树配置

主要配置了屏幕的特性与功能,路径和配置如下:

Tina-Linux/device/config/chips/t113/configs/mq_r/board.dts
&lcd0 {
	lcd_used            = <1>;				# 启用lcd

	lcd_driver_name     = "default_lcd";	# 使用 default_lcd 驱动
	lcd_backlight       = <50>;
	lcd_if              = <0>;				# 0:rgb 4:dsi

	lcd_x               = <800>;			# 宽度
	lcd_y               = <480>;			# 高度
	lcd_width           = <108>;			# 屏幕物理宽度,单位 mm
	lcd_height          = <65>;				# 屏幕物理高度,单位 mm
	lcd_dclk_freq       = <22>;				# 屏幕时钟,单位 MHz

	lcd_pwm_used        = <1>;				# 启用背光 PWM
	lcd_pwm_ch          = <9>;				# 使用 PWM 通道 9 
	lcd_pwm_freq        = <50000>;			# PWM 频率,单位 Hz
	lcd_pwm_pol         = <0>;				# 背光 PWM 的极性

	lcd_hbp             = <12>;				# hsync back porch(pixel) + hsync plus width(pixel);
	lcd_ht              = <816>;			# hsync total cycle(pixel)
	lcd_hspw            = <4>;				# hsync plus width(pixel)
	lcd_vbp             = <12>;				# vsync back porch(line) + vysnc plus width(line)	
	lcd_vt              = <46>;				# vsync total cycle(line)
	lcd_vspw            = <4>;				# vsync plus width(pixel)

	lcd_lvds_if         = <0>;
	lcd_lvds_colordepth = <1>;
	lcd_lvds_mode       = <0>;
	lcd_frm             = <0>;
	lcd_io_phase        = <0x0000>;
	lcd_gamma_en        = <0>;
	lcd_bright_curve_en = <0>;
	lcd_cmap_en         = <0>;

	deu_mode            = <0>;
	lcdgamma4iep        = <22>;
	smart_color         = <90>;

	pinctrl-0 = <&rgb18_pins_a>;
	pinctrl-1 = <&rgb18_pins_b>;
};

6.测试屏幕

1)首先将更改的内容进行编译,打包。烧录系统,先 ls 命令打印 /dev/ 目录看看有没有出现 fb0 这个节点

基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第10张图片
2)可以看到这里有 fb0节点。那就进行下最简单的花屏测试,使用如下命令:

cat /dev/urandom > /dev/fb0

3)另外也可以使用 colorbar 测试

echo 8 > /sys/class/disp/disp/attr/colorbar

7.LVGL实测


基于全志T133-s3(Tina Linux)移植5寸RGB显示屏驱动_第11张图片

基于全志T133-s3(Tina Linux)移植5寸RGB触摸屏驱动(正在努力移植)

你可能感兴趣的:(全志开发专区,linux)