mipi屏在内核可以显示logo但是u-boot无法显示的问题【转】
本文转载自: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无法显示的问题【转】相关推荐
- linux内核开机显示企鹅logo,批改linux内核kernel开机logo(小企鹅)
修改linux内核kernel开机logo(小企鹅) 修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_ka ...
- WINCE开机显示logo之前先显示白屏的问题
WINCE开机显示logo之前先显示白屏的问题 ********************************LoongEmbedded******************************* ...
- 联想一体机开机黑屏只显示LOGO联想标志两个字解决办法
联想一体机2015年的机器 , 开机后黑屏只显示LOGO联想标志,如下图所示, U引导也无法进入,一直黑屏,但是可以进入BIOS,进入后查看硬件没任何问题,网上各种方法试了,都不管用,断电后按电源键几 ...
- 10.操作系统实战——二级引导器探查收集信息(检查CPU,获取内存布局,初始化内核栈,放置内核文件和字库文件,建立MMU页表,设置图形模式,显示LOGO)
该课程来自极客时间<操作系统实战45讲>,踩坑笔记,具体操作步骤见"显示logo"目录. 在二级引导器中,我们要检查 CPU 是否支持 64 位的工作模式.收集内存布局 ...
- java 进程跑飞_RK3288 st7703 mipi屏指令过长,程序跑飞
CPU:RK3288 系统:Android 5.1 调试 mipi 屏前,先关闭了 uboot 的 logo 显示 rockchip,uboot-logo-on = <0>; 屏调试完成后 ...
- 全志平台MIPI屏调试记录
由于项目需要,在全志平台点一块480x1920的MIPI屏,这里将调试过程作下小结. 1.熟悉屏厂规格书,重点在供电电源.上电时序上: 2.配置LVDS显示接口,全志平台,相关的参考配置如下: lcd ...
- 电脑开机只显示计算机界面,电脑开机只显示主板logo进不去系统是什么原因
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:电脑开机只显示主板logo进不去系统是什么原因?回答:说明主板不能读取其他硬件 无法跳过主板LOGO进入下一步 你把键鼠 耳机 头 ...
- TM034XVZP01 mipi屏 高通8909平台lk和kernel驱动 基于ili9881驱动
效果图如上. 所需的时序文件链接 https://download.csdn.net/download/jxhln/11120468 大家可以下载参考 上述是最终的成果,该文章只着重讲述lk阶段的调试 ...
- linux显示启动logo源码分析以及修改显示logo
1.linux显示启动logo整个流程分析 (1)logo图片在内核源码中是以ppm格式的文件保存,在编译内核时会把ppm格式的文件自动转换成.c文件,在c文件中会构造一个struct linux_l ...
最新文章
- Python和JavaScript之间的JSON日期时间
- U盘安装Centos6.3 续
- XMLHttpRequest() 请求 返回结果JSON 对象与JSON 字符串处理
- 技能拓展笔记-React(一)
- 如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
- 翻译: Flex Collection 事件和手动通知变化
- java求几何周长面积_JAVA:编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序...
- [转]Eclipse遇到的常见问题
- 图像缩放之双三次插值法
- 2018 年寒假/春节,来蓝鲸玩吧!
- android换肤的实现方案,Android 换肤的思路
- 2018新年计划-雄起
- 流量、技术、超级APP,百度吹响国潮IP进攻号
- 如何将支付宝小程序迁移至微信/FinClip运行
- pacemaker+nginx+iscsi实现的nginx服务远程储存高可用
- [C++] 小游戏—三国杀
- ios13全选手势_iOS13大揭秘:深色模式、多任务、新手势等
- 【解决方案】严防夏天溺水,开启EasyDSS+无人机的智能安防监控新时代
- 开发 Web 应用程序
- C# 委托、事件与Observer模型小案例
热门文章
- bzoj1131[POI2008]Sta*
- linux系统自带的监控工具
- 弹性分组环(RPR)技术特点及其在城域网中的应用
- 自定义服务器控件 继承不到父类/基类的 SupportsEventValidation 特性.
- Vista光线效果photoshop教程
- 使用Masonry实现UILabel和UIIMageView自适应长度居中
- 基于windows 2012部署oracle 12.1.0.2 rac历险记
- 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)
- 怎么修改Outlook2010 PST数据文件位置(默认邮件存储目录)
- phpcmsV9SQL注射+列目录