飞凌imx6dl lvds闪屏问题记录

飞凌imx6dl linux4.1.15 uboot2016 lvds闪屏问题记录

最近在用飞凌的imx6dl 开发板做一个医疗项目,屏幕用的时lvds接口

平台: imx6dl
bsp: linux4.1.15, uboot2016, X11, qt5.6.2

问题1:屏幕不亮

开发板手册里只告诉如何连接,我连接好之后背光都不亮,这不是纯纯坑我吗。

原因:

万用表测量发现背光的 LCD_POWER_EN pin一直是低电平,软件上拉高后,背光点亮,屏幕可以显示了

在这里插入图片描述
具体改动如下:(需要先设置pinmux, 如何设置请查参照芯片手册)

diff --git a/uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c b/uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c
old mode 100644
new mode 100755
index cf840902e..863b6c33a
--- a/uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c
+++ b/uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c
@@ -90,6 +90,8 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define MIPI_PWR_EN     IMX_GPIO_NR(6, 10)
 
+#define LCD_POWER_EN    IMX_GPIO_NR(3, 0)
+
Binary files /dev/null and b/linux-4.1.15/sound/soc/fsl/imx-wm8960.mod differ
diff --git a/uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c b/uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c
old mode 100644
new mode 100755
index cf840902e..863b6c33a
--- a/uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c
+++ b/uboot-2016/board/freescale/mx6sabresd/mx6sabresd.c
@@ -90,6 +90,8 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define MIPI_PWR_EN     IMX_GPIO_NR(6, 10)
 
+#define LCD_POWER_EN    IMX_GPIO_NR(3, 0)
+
 void generate_mac_by_uuid(void)
 {
         u32 inbuf[2];
@@ -121,12 +123,16 @@ int dram_init(void)
 static iomux_v3_cfg_t const lvds_pads[] = {
         MX6_PAD_NANDF_CS2__GPIO6_IO15 | MUX_PAD_CTRL(NO_PAD_CTRL),
         MX6_PAD_SD1_DAT1__GPIO1_IO17 | MUX_PAD_CTRL(PAD_CTL_PUS_100K_DOWN | PAD_CTL_PUE |  PAD_CTL_PKE | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm),
+        /* Bruce Su 20210719, add LCD_POWER_EN  pinmux, set it as a gpio*/
+        MX6_PAD_EIM_DA0__GPIO3_IO00  | MUX_PAD_CTRL(PAD_CTL_PUS_100K_DOWN | PAD_CTL_PUE |  PAD_CTL_PKE | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm),
 };
 
 static void enable_lvds_pwr(void)
 {
         imx_iomux_v3_setup_multiple_pads(lvds_pads, ARRAY_SIZE(lvds_pads));
         gpio_direction_output(LVDS_PWR_EN, 1);
+        /* Bruce Su 20210719, enable lcd power*/
+        gpio_direction_output(LCD_POWER_EN,1);
 }
 
 static iomux_v3_cfg_t const uart1_pads[] = {

问题2: 闪屏

在启动过程中,有两次闪屏uboot 到kernel 一次,kenrel 进文件系统闪一次

uboot到内核的闪屏

跟踪发现, boot启动kernel 前夕故意拉低了 上图中的PWM3,导致背光熄灭,进了kernel 又开启引起的闪烁。 实测这里不拉低pwm3, 也就是背光常亮会出现另一个问题,短暂的花屏。(如果有解决的大佬,还请告知一下)
具体代码位置:uboot-2016\arch\arm\cpu\armv7\cpu.c

int cleanup_before_linux(void)
{
#if 1
	/* close LCD blacklight */
	gpio_direction_output(IMX_GPIO_NR(1, 21), 0);
	gpio_direction_output(IMX_GPIO_NR(1, 17), 0);   // 不知道是飞凌干的还是nxp干的


内核进文件系统的闪屏

我用的bsp 是 x11, qt5.6.2的版本,在进入文件系统后会初始化xorg, 跟踪xorg 代码发现,

tmp\work\cortexa9hf-neon-mx6qdl-poky-linux-gnueabi\xf86-video-imxfb-vivante\3_5.0.11.p8.6-r0\xserver-xorg-video-imx-viv-5.0.11.p8.6\EXA\src\vivante_fbdev\imx_display.c
imx_display.c 中有多次 进行了 FB_BLANK_UNBLANK ./ FB_BLANK_NORMAL 的操作,导致闪屏

    // Turn on frame buffer blanking to setup sys node mode
    if (0 != ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK))
    {
        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
            "unable to blank frame buffer device '%s':%s \n",
            fPtr->fbDeviceName, strerror(errno));
    }

我们可以选择,修改xorg的代码移除 blank的操作。
或者直接修改内核,blank操作只做一次,避免没必要的闪屏,内核修改如下:(仅供参考)
linux-4.1.15/drivers/video/fbdev/core/fbmem.c

@@ -1149,13 +1149,19 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
        return ret;
 }
 EXPORT_SYMBOL(fb_set_var);
-
+static int blank_flag = 0;
 int
 fb_blank(struct fb_info *info, int blank)
-{      
+{
        struct fb_event event;
        int ret = -EINVAL, early_ret;
 
+       /* Bruce Su 20210831 do not blank during Xorg init*/
+
+       if(blank_flag) return 0;
+
+       blank_flag = 1;
+
        if (blank > FB_BLANK_POWERDOWN)
                blank = FB_BLANK_POWERDOWN;
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于imx6ul的入门,我能够找到三个相关的引用内容。首先是内核自带的IMX6ULL LCD驱动程序,该驱动程序的源码可以在Linux内核的drivers\video\fbdev\mxsfb.c路径下找到。其次是imx6ul环境搭建脚本,使用该脚本可以在飞凌嵌入式imx6ul-c2的板子上搭建开发环境。最后是IMX6ULL的LCD裸机程序,可以在IMX6ULL\source\03_LCD\05_参考的裸机源码\03_font_test路径下找到。关于59管脚,我没有找到与之相关的信息。 所以,对于imx6ul入门以及59管脚的具体信息,可能需要进一步的资料来获取答案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [嵌入式Linux上机实验_基于IMX6ULL](https://blog.csdn.net/thisway_diy/article/details/119905729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [imx6ul 环境搭建脚本](https://download.csdn.net/download/u011019070/12788112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值