本文转载自:http://blog.csdn.net/fulinus/article/details/45071721

平台:瑞芯的rk3288

u-boot版本:u-boot-2014.10

kernel版本:3.10

mipi屏型号:LQ079L1SX01

作者:fulinux

*****本文允许转载,不过请注明出处:http://blog.csdn.net/fulinus****

 

问题:

u-boot启动不能显示logo的问题。

分析:

内核可以正常使用,那说明硬件没有问题,内核和u-boot使用的是同一个dts文件描述的设备树,所以dts文件中的信息应该也是没有问题的。那很可能是u-boot的mipi通信问题。

过程:

经过多次调试,我们在内核中初始化mipi屏的probe函数中加入了一个rk32_dsi_enable函数,竟然把原本需要在u-boot中需要显示的logo:


给显示出来了。抓住这个机会对rk32_dsi_enable函数逐步屏蔽,发现了关键问题,在比较u-boot做的这部分工作发现u-boot的mipi初始化时没有发送初始化指令,于是我在u-boot中添加如下代码,强制给mipi控制器发送如下指令:

    cmds[0] = LPDT;
    cmds[1] = 0x05;
    cmds[2] = 0x11;
    dsi_send_packet(0, cmds, 3);
    dsi_send_packet(1, cmds, 3);
        
    cmds[0] = LPDT;
    cmds[1] = 0x15;
    cmds[2] = 0x51;
    cmds[3] = 0xff;
    dsi_send_packet(0, cmds, 4);
    dsi_send_packet(1, cmds, 4);

cmds[0] = LPDT;
    cmds[1] = 0x15;
    cmds[2] = 0x55;
    cmds[3] = 0x02;
    dsi_send_packet(0, cmds, 4);
    dsi_send_packet(1, cmds, 4);

cmds[0] = LPDT;
    cmds[1] = 0x15;
    cmds[2] = 0x53;
    cmds[3] = 0x2c;
    dsi_send_packet(0, cmds, 4);
    dsi_send_packet(1, cmds, 4);

cmds[0] = LPDT;
    cmds[1] = 0x05;
    cmds[2] = 0x29;
    dsi_send_packet(0, cmds, 3);
    dsi_send_packet(1, cmds, 3);

果不其然,OK了,这些指令就是mipi的dts文件中的信息。

不过这个代码可不行,于是进一步分析问题是在这里:

list_for_each(screen_pos, &screen->cmdlist_head){

发现cmdlist_head的是空的,说明没有解析到dts文件的信息,解析dts文件的信息在:

rk_mipi_screen_init_dt函数中:

    /*get the initial command list*/
    node = fdtdec_next_compatible(blob, 0, COMPAT_ROCKCHIP_MIPI_SONCMDS);
    if (node < 0) {
        MIPI_SCREEN_DBG("Can not get node of COMPAT_ROCKCHIP_MIPI_SONCMDS\n");
    } else {
#if 1
        noffset = fdt_first_subnode(blob, node);
        const char *name = fdt_get_name(blob, noffset, NULL);
        printf("XJH_DEBUG1:%s\n", name);
        noffset = fdt_next_subnode(blob, noffset);
        const char *name1 = fdt_get_name(blob, noffset, NULL);
        printf("XJH_DEBUG2:%s\n", name1);
#endif
        printf ("fulinux mipi_oncmds 1\n");
        for (noffset = fdt_first_subnode(blob,node);
                noffset >= 0;
                noffset = fdt_next_subnode(blob, noffset)) {
            printf ("fulinux mipi_oncmds 2\n");
            MIPI_SCREEN_DBG("build MIPI LCD init cmd tables\n");
            dcs_cmd = calloc(1,sizeof(struct mipi_dcs_cmd_ctr_list));
            strcpy(dcs_cmd->dcs_cmd.name, fdt_get_name(blob, noffset, NULL));
            MIPI_SCREEN_DBG("%s\n",dcs_cmd->dcs_cmd.name);

dcs_cmd->dcs_cmd.type = fdtdec_get_int(blob, noffset, "rockchip,cmd_type", -1);
            MIPI_SCREEN_DBG("dcs_cmd.type=%02x\n",dcs_cmd->dcs_cmd.type);

dcs_cmd->dcs_cmd.dsi_id = fdtdec_get_int(blob, noffset, "rockchip,dsi_id", -1);
            MIPI_SCREEN_DBG("dcs_cmd.dsi_id=%02x\n",dcs_cmd->dcs_cmd.dsi_id);

fdt_getprop(blob, noffset, "rockchip,cmd", &length);
            dcs_cmd->dcs_cmd.cmd_len = length / sizeof(u32) ;
            err = fdtdec_get_int_array(blob, noffset, "rockchip,cmd", cmds, dcs_cmd->dcs_cmd.cmd_len);
            MIPI_SCREEN_DBG("length=%d,cmd_len = %d  err = %d\n",length,dcs_cmd->dcs_cmd.cmd_len,err);

for (i = 0; i < (length / sizeof(u32)); i++) {
                MIPI_SCREEN_DBG("cmd[%d]=0x%08x, ",i+1,cmds[i]);
                dcs_cmd->dcs_cmd.cmds[i] = cmds[i];
            }
            MIPI_SCREEN_DBG("\n");

dcs_cmd->dcs_cmd.delay = fdtdec_get_int(blob, noffset, "rockchip,cmd_delay", -1);
            MIPI_SCREEN_DBG("dcs_cmd.delay=%d\n",dcs_cmd->dcs_cmd.delay);

list_add_tail(&dcs_cmd->list, &screen->cmdlist_head);
        }
    }
    return 0;

u-boot的log显示没有打印printf ("fulinux mipi_oncmds 2\n");这条信息。但是前面有个类似功能的代码是正常的。那说明问题在dts解析时出现了问题。考虑一下是不是dts文件中的格式有问题呢?经过反复的调试和摸索,原来是谁在填写mipi屏的dts文件时拉掉了这句:

compatible = "rockchip,screen-on-cmds";

这个问题告诉我们大厦是一步步建起来的不能跳过基础的东西!

mipi屏在内核可以显示logo但是u-boot无法显示的问题【转】的更多相关文章

  1. 内核启动后,lcd显示logo失败

    针对-s5pv210,但对其他平台也使用 lcd显示logo失败,若显示成功默认的logo是一只企鹅,但是串口打印“Start display and show logo”,但是LCD屏没有显示    ...

  2. RK3288 st7703 mipi屏指令过长,程序跑飞

    本文为博主原创文章,转载请注明出处:https://www.cnblogs.com/lialong1st/p/11218433.html CPU:RK3288 系统:Android 5.1 调试 mi ...

  3. uboot显示logo的方式

    转:http://blog.chinaunix.net/uid-22030783-id-3257554.html 本文使用uboot2010.03版本,2010.06版本同样适用,在XC2440板上实 ...

  4. 东芝开发板驱动OLED模块显示LOGO图片

    前言 在之前的两篇评测文章: 使用系统定时器SysTick实现精确延时微秒和毫秒函数 东芝MCU实现位带操作 介绍了系统SysTick实现精确延时,GPIO的输入输出使用,并实现了位带方式操作GPIO ...

  5. android MIPI屏 导航栏丢失

    /**************************************************************************** * android MIPI屏 导航栏丢失 ...

  6. RK3288 mipi屏参数配置文件

    RK3288     Android 5.1系统     Linux 3.10 mipi屏参数配置文件所在的路径:kernel/arch/arm/boot/dts/xxx_mipi.dtsi 屏参数配 ...

  7. RK3288 mipi屏调试流程

    CPU:RK3288 系统:Android 5.1 1.修改kernel/arch/arm/configs/rockchip_defconfig,打开mipi屏开关 # CONFIG_LCD_GENE ...

  8. 从U-Boot显示Logo到Android

    /******************************************************************************* * 从U-Boot显示Logo到And ...

  9. Linux中文显示乱码?如何设置centos显示中文

    Linux中文显示乱码?如何设置centos显示中文 怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码.出现这个情况一 ...

随机推荐

  1. 洛谷 P1938 [USACO09NOV] 找工就业Job Hunt

    这道题可以说是一个复活SPFA的题 因为数据比较小,SPFA也比较简单 那就复习(复读)一次SPFA吧 #include<iostream> #include<cstdio> ...

  2. 大数据学习——yum练习安装jdk

    yum list | grep jdk 安装jdk-1.8.0版本 -openjdk* 安装后,执行java -version 配置环境变量 使用vim /etc/profile 编辑profile文 ...

  3. Codevs 1695 Windows2013

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 话说adamyi编的Windows 2013超时了(- -!),所以他不得不在自 ...

  4. poj3532求生成树中最大权与最小权只差最小的生成树+hoj1598俩个点之间的最大权与最小权只差最小的路经。

    该题是最小生成树问题变通活用,表示自己开始没有想到该算法:先将所有边按权重排序,然后枚举最小边,求最小生成树(一个简单图的最小生成树的最大权是所有生成树中最大权最小的,这个容易理解,所以每次取最小边, ...

  5. Event Logging 技术简介

    https://blog.csdn.net/xiliang_pan/article/details/41805023

  6. 从零开始写STL—functional

    function C++11 将任意类型的可调用(Callable)对象与函数调用的特征封装到一起. 这里的类是对函数策略的封装,将函数的性质抽象成组件,便于和algorithm库配合使用 基本运算符 ...

  7. Intersecting Lines--POJ1269(判断两条直线的关系 && 求两条直线的交点)

    http://poj.org/problem?id=1269 我今天才知道原来标准的浮点输出用%.2f   并不是%.2lf  所以wa了好几次 题目大意:   就给你两个线段 然后求这两个线段所在的 ...

  8. Windows如何在cmd命令行中查看、修改、删除与添加、设置环境变量

    首先明确一点: 所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改.也就是说当关闭此cmd命令行窗口后,将不再起作用.永久性修改环境变量的方法有两种:一种是直接修改注册表(此种方 ...

  9. DTRACE FOR MYSQL PHP

    Using DTrace to troubleshoot Apache DTrace for MySQL , Inspecting MySQL with DTrace , MySQL DTrace P ...

  10. 获取鼠标位置的几个通用的JS函数

    原文:http://www.open-open.com/code/view/1421401009218 /*两个通用函数,用于获取鼠标相对于整个页面的当前位置*/ function getX(e) { ...