本文转载自: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. linux内核开机显示企鹅logo,批改linux内核kernel开机logo(小企鹅)

    修改linux内核kernel开机logo(小企鹅) 修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_ka ...

  2. WINCE开机显示logo之前先显示白屏的问题

    WINCE开机显示logo之前先显示白屏的问题 ********************************LoongEmbedded******************************* ...

  3. 联想一体机开机黑屏只显示LOGO联想标志两个字解决办法

    联想一体机2015年的机器 , 开机后黑屏只显示LOGO联想标志,如下图所示, U引导也无法进入,一直黑屏,但是可以进入BIOS,进入后查看硬件没任何问题,网上各种方法试了,都不管用,断电后按电源键几 ...

  4. 10.操作系统实战——二级引导器探查收集信息(检查CPU,获取内存布局,初始化内核栈,放置内核文件和字库文件,建立MMU页表,设置图形模式,显示LOGO)

    该课程来自极客时间<操作系统实战45讲>,踩坑笔记,具体操作步骤见"显示logo"目录. 在二级引导器中,我们要检查 CPU 是否支持 64 位的工作模式.收集内存布局 ...

  5. java 进程跑飞_RK3288 st7703 mipi屏指令过长,程序跑飞

    CPU:RK3288 系统:Android 5.1 调试 mipi 屏前,先关闭了 uboot 的 logo 显示 rockchip,uboot-logo-on = <0>; 屏调试完成后 ...

  6. 全志平台MIPI屏调试记录

    由于项目需要,在全志平台点一块480x1920的MIPI屏,这里将调试过程作下小结. 1.熟悉屏厂规格书,重点在供电电源.上电时序上: 2.配置LVDS显示接口,全志平台,相关的参考配置如下: lcd ...

  7. 电脑开机只显示计算机界面,电脑开机只显示主板logo进不去系统是什么原因

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:电脑开机只显示主板logo进不去系统是什么原因?回答:说明主板不能读取其他硬件 无法跳过主板LOGO进入下一步 你把键鼠 耳机 头 ...

  8. TM034XVZP01 mipi屏 高通8909平台lk和kernel驱动 基于ili9881驱动

    效果图如上. 所需的时序文件链接 https://download.csdn.net/download/jxhln/11120468 大家可以下载参考 上述是最终的成果,该文章只着重讲述lk阶段的调试 ...

  9. linux显示启动logo源码分析以及修改显示logo

    1.linux显示启动logo整个流程分析 (1)logo图片在内核源码中是以ppm格式的文件保存,在编译内核时会把ppm格式的文件自动转换成.c文件,在c文件中会构造一个struct linux_l ...

最新文章

  1. Python和JavaScript之间的JSON日期时间
  2. U盘安装Centos6.3 续
  3. XMLHttpRequest() 请求 返回结果JSON 对象与JSON 字符串处理
  4. 技能拓展笔记-React(一)
  5. 如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
  6. 翻译: Flex Collection 事件和手动通知变化
  7. java求几何周长面积_JAVA:编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序...
  8. [转]Eclipse遇到的常见问题
  9. 图像缩放之双三次插值法
  10. 2018 年寒假/春节,来蓝鲸玩吧!
  11. android换肤的实现方案,Android 换肤的思路
  12. 2018新年计划-雄起
  13. 流量、技术、超级APP,百度吹响国潮IP进攻号
  14. 如何将支付宝小程序迁移至微信/FinClip运行
  15. pacemaker+nginx+iscsi实现的nginx服务远程储存高可用
  16. [C++] 小游戏—三国杀
  17. ios13全选手势_iOS13大揭秘:深色模式、多任务、新手势等
  18. 【解决方案】严防夏天溺水,开启EasyDSS+无人机的智能安防监控新时代
  19. 开发 Web 应用程序
  20. C# 委托、事件与Observer模型小案例

热门文章

  1. bzoj1131[POI2008]Sta*
  2. linux系统自带的监控工具
  3. 弹性分组环(RPR)技术特点及其在城域网中的应用
  4. 自定义服务器控件 继承不到父类/基类的 SupportsEventValidation 特性.
  5. Vista光线效果photoshop教程
  6. 使用Masonry实现UILabel和UIIMageView自适应长度居中
  7. 基于windows 2012部署oracle 12.1.0.2 rac历险记
  8. 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)
  9. 怎么修改Outlook2010 PST数据文件位置(默认邮件存储目录)
  10. phpcmsV9SQL注射+列目录