• 03 野火imxull开发板添加 正点原子lcd 支持


    由于手里野火的imx6ull的开发板闲置好几年了,且手里有之前买的stm32f7的lcd,于是决定将两者结合使用

    RGB LCD接口 主要由RGB信号线和RGB控制线组成,在设计时会将触摸接口一起放在LCD接口上。

    原理图

    由于正点原子和野火的lcd的接口不同,所以需要绘制一个转接板,可以薅嘉立创的免费打板服务,fpc接口某多多5块钱10个,成本就五块钱,原理图如下
    pcb工程 力创eda
    在这里插入图片描述
    pcb闭着眼睛连同就好,反正是低速信号。

    uboot 修改

    由于野火的LCD_DISP是板卡直接拉高的3.3V,因此lcd上电就是使能状态,因此屏蔽uboot复位LCD_RST

    屏蔽复位pin的pad定义

    文件路径board/freescale/mx6ullevk_board/mx6ullevk_board.c

    static iomux_v3_cfg_t const lcd_pads[] = {
    MX6_PAD_LCD_CLK__LCDIF_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_ENABLE__LCDIF_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_HSYNC__LCDIF_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_VSYNC__LCDIF_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA00__LCDIF_DATA00 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA01__LCDIF_DATA01 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA02__LCDIF_DATA02 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA03__LCDIF_DATA03 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA04__LCDIF_DATA04 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA05__LCDIF_DATA05 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA06__LCDIF_DATA06 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA07__LCDIF_DATA07 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA08__LCDIF_DATA08 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA09__LCDIF_DATA09 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA10__LCDIF_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA11__LCDIF_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA12__LCDIF_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA13__LCDIF_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA14__LCDIF_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA15__LCDIF_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA16__LCDIF_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA17__LCDIF_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA18__LCDIF_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA19__LCDIF_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA20__LCDIF_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA21__LCDIF_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA22__LCDIF_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA23__LCDIF_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    
    /* LCD_RST */
    /*MX6_PAD_SNVS_TAMPER9__GPIO5_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL),*/
    
    /* Use GPIO for Brightness adjustment, duty cycle = period. */
    MX6_PAD_GPIO1_IO08__GPIO1_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    屏蔽复位代码

    void do_enable_parallel_lcd(struct display_info_t const *dev)
    {
    	enable_lcdif_clock(dev->bus);
    
    	imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
    
    	/*lcd 复位操作代码
    	gpio_direction_output(IMX_GPIO_NR(5, 9) , 0);
    	udelay(500);
    	gpio_direction_output(IMX_GPIO_NR(5, 9) , 1);
    	*/
    	/* 设置背光,可以通过lcd背光玻璃的状态来确定lcd 背光开启状态
    	lcd背光不亮是看不到内容的。
    	 */
    	gpio_direction_output(IMX_GPIO_NR(1, 8) , 1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    修改lcd参数

    struct display_info_t const displays[] = {{
    	.bus = MX6UL_LCDIF1_BASE_ADDR,
    	.addr = 0,
    	.pixfmt = 24,
    	.detect = NULL,
    	.enable	= do_enable_parallel_lcd,
    	.mode	= {
    		.name			= "TFT7016",
    		.xres           = 1024,
    		.yres           = 600,
    		.pixclock       = 19531,
    		.left_margin    = 140,
    		.right_margin   = 160,
    		.upper_margin   = 20,
    		.lower_margin   = 12,
    		.hsync_len      = 20,
    		.vsync_len      = 3,
    		.sync           = 0,
    		.vmode          = FB_VMODE_NONINTERLACED
    } } };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    修改环境变量 lcd 名称

    路径include/configs/mx6ullevk_board.h

    panel=TFT43AB
    
    • 1

    将其改为:

    panel=TFT7016
    
    • 1

    至此,uboot lcd 支持修改完成,编译后lcd就会看到nxp log

    linux 修改

    使能Linux logo

    -> Device Drivers
    	 -> Graphics support 
    	 -> Bootup logo (LOGO [=y]) 
    		-> Standard black and white Linux logo
    		-> Standard 16-color Linux logo 
    		-> Standard 224-color Linux logo
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    设备树修改

    屏蔽复位pinctrl 和修改lcd参数
    路径 arch/arm/boot/dts/imx6ull-board-emmc.dts

    &lcdif {
    	pinctrl-names = "default";
    	pinctrl-0 = <&pinctrl_lcdif_dat
    		     &pinctrl_lcdif_ctrl>;
    		     /*&pinctrl_lcdif_reset>;*/
    	display = <&display0>;
    	status = "okay";
    
    	display0: display {
    		bits-per-pixel = <24>;
    		bus-width = <24>;
    
    		display-timings {
    			native-mode = <&timing0>;
    			timing0: timing0 {
    			clock-frequency = <51200000>;
    			hactive = <1024>;
    			vactive = <600>;
    			hfront-porch = <160>;
    			hback-porch = <140>;
    			hsync-len = <20>;
    			vback-porch = <20>;
    			vfront-porch = <12>;
    			vsync-len = <3>;
    
    			hsync-active = <0>;
    			vsync-active = <0>;
    			de-active = <1>;
    			pixelclk-active = <0>;
    			};
    		};
    	};
    };
    /*
    这里屏蔽掉后面触摸需要使用到这个pin
    pinctrl_lcdif_reset: lcdifresetgrp {
                       fsl,pins = <
                               MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09  0x79
                       >;
               };
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    修改lcd 背光pinctrl 引脚

    路径 arch/arm/boot/dts/imx6ull-board-emmc.dts

    	pinctrl_pwm1: pwm1grp {
    		fsl,pins = <
    			MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
    		>;
    	}; 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    确认lcdpwm设置亮度等级不为0

    路径 arch/arm/boot/dts/imx6ull-board-emmc.dts

    backlight {
    	compatible = "pwm-backlight";
    	pwms = <&pwm1 0 5000000>;
    	brightness-levels = <0 4 8 16 32 64 128 255>;
    	default-brightness-level = <6>;
    	status = "okay";
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    修改环境变量

    console=tty1 console=ttymxc0打开了两个 console,一个是 LCD,一个是串口

    setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.26:/home/li/linux/nfs/rootfs ip=192.168.1.25:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off'
    
    • 1

    关闭 lcd 休眠

    2、关闭 10 分钟熄屏功能

    drivers/tty/vt/vt.c 文件 blankinterval 变量控制息屏时间单位为秒, 0 熄屏的功能。

    vim drivers/tty/vt/vt.c
    ---------------------------------------
    static int vesa_blank_mode;
    static int vesa_off_interval;
    static int blankinterval = 0;
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    将python项目部署在一台服务器上
    RocketMQ源码(7)—Producer发送消息源码(1)—发送消息的总体流程【一万字】
    宠物经济:千亿级的孤独生意,如何用智能化玩出新花样?
    Vue之 el-input文本框拿到大量数据时自动换行显示
    安全项目简介
    前后端分离同步/异步实现文件上传(boot+vue+elementUI)
    基于java的在线物流管理系统【原创】
    【点云处理】点云法向量估计及其加速(5)
    Go语言学习(三)-- 派生数据类型
    visionOS空间计算实战开发教程Day 1:环境安装和编写第一个程序
  • 原文地址:https://blog.csdn.net/lyq308152569/article/details/126833838