移植NXP官方uboot-imx-imx_v2020.04_5.4.70_2.3.0到阿尔法开发板(二)适配LCD显示屏

本文详细比较了NXP官方I.MX6ULLEVK与ALIENTEK-ALPHA开发板的LCD接口,并指导如何在uboot中修改设备树节点以适应不同LCD屏幕,包括LCDIO配置、屏幕参数和背光控制。同时介绍了在ALIENTEK-ALPHA板上进行的uboot启动信息和命名更改。
摘要由CSDN通过智能技术生成

1.NXP官方I.MX6ULL EVK开发板和ALIENTEK-ALPHA开发板LCD显示屏接口比对

1.1 NXP官方I.MX6ULL EVK开发板LCD显示屏接口

打开NXP官方I.MX6ULL EVK开发板底板(MCIMX6ULL_BB_
DESIGNFILES)
原理图,查看LCD原理图,如下如所示:

在这里插入图片描述
在这里插入图片描述
打开NXP官方I.MX6ULL EVK开发板核心板(MCIMX6ULL_CM_
DESIGNFILES)
原理图,查看NXP官方MX6ULL EVK开发板LCD显示屏与mx6ull芯片的硬件连接,如下如所示:

在这里插入图片描述

1.2 ALIENTEK-ALPHA开发板LCD显示屏接口

打开ALIENTEK-ALPHA开发板底板原理图(IMX6ULL_ALPHA_V2.1)原理图,查看LCD原理图,如下如所示:
在这里插入图片描述
打开ALIENTEK-ALPHA开发板核心板(IMX6ULL_CORE_V1.6)原理图,查看ALIENTEK-ALPHA开发板LCD显示屏与mx6ull芯片的硬件连接,如下如所示:
在这里插入图片描述
在这里插入图片描述

1.3 NXP官方I.MX6ULL EVK开发板与ALIENTEK-ALPHA开发板LCD显示屏接口对照

I.MX6ULL EVK开发板与ALIENTEK-ALPHA开发板LCD显示屏接口如下图所示:
在这里插入图片描述
  由上图可知I.MX6ULL EVK开发板与ALIENTEK-ALPHA开发板LCD显示屏复位控制引脚有所不同,其余控制引脚完全相同。

2. uboot中LCD设备树节点信息修改

  设备树的修改,涉及下面三个方面:
  (1)LCD所使用的IO配置
  (2)LCD屏幕节点修改,修改相应的属性值,换成所使用的LCD屏幕参数
  (3)LCD背光节点信息修改,根据实际使用的背光IO来修改相应的设备节点信息

2.1 LCD屏幕IO配置

  1.打开arch/arm/dts目录下的imx6ul-alientek.dtsi文件,iomuxc节点中找到pinctrl_lcdif_dat节点,该节点描述了LCD数据引脚使用的引脚复用功能和电气属性,配置内容如下:

pinctrl_lcdif_dat: lcdifdatgrp {
        fsl,pins = <
            MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
            MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
            MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
            MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
            MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
            MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
            MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
            MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
            MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
            MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
            MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
            MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
            MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
            MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
            MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
            MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
            MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
            MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
            MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
            MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
            MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
            MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
            MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
            MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
        >;
    };

  ALIENTEK-ALPHA开发板硬件设计时LCD接口使用了三个
SGM3157
模拟开关,为了防止模拟开关影响到网络,需要将LCD相关引脚的电气属性都修改为0x49,降低LCD相关IO口的驱动能力,修改后的代码如下所示:

/*LCD显示屏RGB数据线引脚初始化LCD_DATA[23:0]*/
    pinctrl_lcdif_dat: lcdifdatgrp {
        fsl,pins = <
            MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x49
            MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x49
            MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x49
            MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x49
            MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x49
            MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x49
            MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x49
            MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x49
            MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x49
            MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x49
            MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x49
            MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x49
            MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x49
            MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x49
            MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x49
            MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x49
            MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x49
            MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x49
            MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x49
            MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x49
            MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x49
            MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x49
            MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x49
            MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x49
        >;
    };

  2.打开arch/arm/dts目录下的imx6ul-alientek.dtsi文件,iomuxc节点中找到pinctrl_lcdif_ctrl节点,该节点描述了LCD控制引脚(LCD_PCLK、LCD_DE、LCD_HSYNC、LCD_VSYNC和LCD_RST)使用的引脚复用功能和电气属性,配置内容如下:

pinctrl_lcdif_ctrl: lcdifctrlgrp {
        fsl,pins = <
            MX6UL_PAD_LCD_CLK__LCDIF_CLK        0x79
            MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
            MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
            MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
            /* used for lcd reset */
            MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09  0x79
        >;
    };

  ALIENTEK-ALPHA开发板LCD显示屏复位引脚使用硬件电源复位因此屏蔽pinctrl_lcdif_ctrl节点中复位引脚配置,修改后代码如下所示:

/*LCD显示屏控制线引脚初始化LCD_PCLK、LCD_DE、LCD_HSYNC、LCD_VSYNC*/
    pinctrl_lcdif_ctrl: lcdifctrlgrp {
        fsl,pins = <
            MX6UL_PAD_LCD_CLK__LCDIF_CLK        0x79
            MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
            MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
            MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
            /*屏蔽LCD复位引脚初始化ALIENTEK-ALPHA没有使用IO口控制LCD显示屏复位*/
            /*MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09  0x79*/
        >;
    };

  3.打开arch/arm/dts目录下的imx6ul-alientek.dtsi文件,iomuxc节点中找到pinctrl_pwm1节点,该节点描述了LCD背光控制引脚使用的引脚复用功能和电气属性,配置内容如下:

pinctrl_pwm1: pwm1grp {
        fsl,pins = <
            MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
        >;
    };

2.2 LCD屏幕参数节点信息修改

  1.打开arch/arm/dts目录下的imx6ul-alientek.dtsi文件,找到lcdif节点,该节点描述了LCD显示屏参数信息,该节点的内容如下所示:

&lcdif {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_lcdif_dat
             &pinctrl_lcdif_ctrl>;

    display = <&display0>;
status = "okay";

    display0: display@0 {
        bits-per-pixel = <24>;
        bus-width = <24>;

        display-timings {
            native-mode = <&timing0>;
            timing0: timing0 {
            clock-frequency = <9200000>;
            hactive = <480>;
            vactive = <272>;
            hfront-porch = <8>;
            hback-porch = <4>;
            hsync-len = <41>;
            vback-porch = <2>;
            vfront-porch = <4>;
            vsync-len = <10>;

            hsync-active = <0>;
            vsync-active = <0>;
            de-active = <1>;
            pixelclk-active = <0>;
            };
        };
    };
};

  针对ALIENTEK-ALPHA开发板上使用的LCD屏对该节点信息进行修改(本文以ATK4384屏为例)修改后的内容如下:
在这里插入图片描述

/*修改LCD屏幕参数节点信息适配ALIENTEK-ALPHA开发板ATK4384屏*/
&lcdif {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_lcdif_dat      /*LCD屏数据线引脚初始化*/   
                 &pinctrl_lcdif_ctrl>;   /*LCD屏控制信号引脚初始化*/   

    display = <&display0>;
status = "okay";

    /*ATK4384屏参数修改*/
    display0: display@0 {           /*LCD属性信息*/
        bits-per-pixel = <24>;      /*一个像素占用24bit*/
        bus-width = <24>;           /*总线宽度*/

        display-timings {           /*LCD屏时序信息*/
            native-mode = <&timing0>;
            timing0: timing0 {
            clock-frequency = <31000000>;  /*LCD像素时钟,单位Hz*/
            hactive = <800>;               /*LCD X轴像素个数*/
            vactive = <480>;               /*LCD Y轴像素个数*/
            hfront-porch = <40>;           /*LCD hfp参数*/ 
            hback-porch = <88>;            /*LCD hbp参数*/ 
            hsync-len = <48>;              /*LCD hspw参数*/
            vback-porch = <32>;            /*LCD vbp参数*/
            vfront-porch = <13>;           /*LCD vfp参数*/ 
            vsync-len = <3>;               /*LCD vspw参数*/

            hsync-active = <0>;           /*hsync 数据线极性*/
            vsync-active = <0>;           /*vsync 数据线极性*/
            de-active = <1>;              /*de 数据线极性*/
            pixelclk-active = <0>;        /*clk 数据线极性*/
            };
        };
};
};

3. LCD初始化代码修改

  打开board/freescale/mx6ull_alientek_emmc目录下的
mx6ull_alientek_emmc.c
文件,找到setup_lcd()函数屏蔽此函数中LCD显示屏复位操作,修改后的代码如下所示:

static int setup_lcd(void)
{
    enable_lcdif_clock(LCDIF1_BASE_ADDR, 1);

    imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));

    /*屏蔽LCD显示屏的RESET复位引脚,ALIENTEK-ALPHA开发板LCD屏没有使用IO口控制LCD复位引脚
    gpio_request(IMX_GPIO_NR(5, 9), "lcd reset");
    gpio_direction_output(IMX_GPIO_NR(5, 9) , 0);
    udelay(500);
    gpio_direction_output(IMX_GPIO_NR(5, 9) , 1);
    */

    /* Set Brightness to high */
    gpio_request(IMX_GPIO_NR(1, 8), "backlight");
    gpio_direction_output(IMX_GPIO_NR(1, 8) , 1);

    return 0;
}

4. uboot启动信息修改

  1.打开board/freescale/mx6ull_alientek_emmc目录下的
mx6ull_alientek_emmc.c
文件,找到board_late_init()函数将板子名字修改为:ALIENTEK-ALPHA,修改后的代码如下图所示:

int board_late_init(void)
{
#ifdef CONFIG_CMD_BMODE
    add_board_boot_modes(board_boot_modes);
#endif

    env_set("tee", "no");
#ifdef CONFIG_IMX_OPTEE
    env_set("tee", "yes");
#endif

#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
    //env_set("board_name", "EVK");
env_set("board_name", "ALIENTEK-ALPHA"); /*设置ALIENTEK-ALPHA开发板名字*/

    if (is_mx6ull_9x9_evk())
        env_set("board_rev", "9X9");
    else
        env_set("board_rev", "14X14");

    if (is_cpu_type(MXC_CPU_MX6ULZ)) {
        env_set("board_name", "ULZ-EVK");
        env_set("usb_net_cmd", "usb start");
    }
#endif
setup_lcd();

#ifdef CONFIG_ENV_IS_IN_MMC
    board_late_mmc_env_init();
#endif

set_wdog_reset((struct wdog_regs *)WDOG1_BASE_ADDR);

    return 0;
}

  2.打开board/freescale/mx6ull_alientek_emmc目录下的
mx6ull_alientek_emmc.c
文件,找到checkboard()函数将Board变量改为:MX6ULL ALIENTEK EMMC,修改后的代码如下图所示:

int checkboard(void)
{
    if (is_mx6ull_9x9_evk())
    {
        puts("Board: MX6ULL 9x9 EVK\n");
    }
        
    else if (is_mx6ull_alientek_emmc())
    {
        puts("Board: MX6ULL ALIENTEK EMMC\n");
    }
    
    else if (is_cpu_type(MXC_CPU_MX6ULZ))
    {
        puts("Board: MX6ULZ 14x14 EVK\n");
    }
        
    else
    {
        puts("Board: MX6ULL 14x14 EVK\n");
    }
    
    return 0;
}

  3.打开include/configs目录下的mx6ull_
alientek_emmc.h
文件,增加如下代码:

#define is_mx6ull_alientek_emmc() CONFIG_IS_ENABLED(TARGET_MX6ULL_ALIENTEK_EMMC)

5. uboot测试

  1.将上述修改后的文件保存,重新编译uboot,编译过程如下图所示:
在这里插入图片描述
在这里插入图片描述
  2.编译完成后,使用正点原子imxdownload软件将新编译的u-boot.bin文件烧录到SD卡中,烧录过程如下图所示:
在这里插入图片描述
  3.将SD开插入ALIENTEK-ALPHA开发板,开发板拨码开关拨到SD卡启动,打开SecureCRT 软件,接收到uboot启动信息如下图所示:
在这里插入图片描述
  4.使用mmc list查看ALIENTEK-ALPHA开发板mmc设备,如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  从上图中可以看出,MMC设备1为EMMC,容量为7.3GB,说明EMMC 驱动也成功,MMC设备0为SD卡,容量为7.4GB,说明SD卡和EMMC的驱动都没问题。
  5.使用print命令打印uboot中环境变量,如下图所示:
在这里插入图片描述
  6.LCD驱动检查
在这里插入图片描述
  由上图可知 LCD显示正常,uboot中LCD驱动修改完成。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值