各位好!
目前我是在做am3715上面实现uboot中开机logo显示的功能,lcd是一个480*640 24位的,需要用spi配置。现在在uboot中显示时出现了如下的情况:
(我用的是默认的logo图片,带有denx标志的那个)
感觉是本来该在左上角的logo重复了4次,而且下面的字符也跟着重复。我对uboot中初始化lcd是初次调试,有些现象都不太明白。麻烦各位如果对这个lcd初始化有了解的话,帮忙看下这种现象可能的原因有哪些,谢谢了!!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
各位好!
目前我是在做am3715上面实现uboot中开机logo显示的功能,lcd是一个480*640 24位的,需要用spi配置。现在在uboot中显示时出现了如下的情况:
(我用的是默认的logo图片,带有denx标志的那个)
感觉是本来该在左上角的logo重复了4次,而且下面的字符也跟着重复。我对uboot中初始化lcd是初次调试,有些现象都不太明白。麻烦各位如果对这个lcd初始化有了解的话,帮忙看下这种现象可能的原因有哪些,谢谢了!!
leo chen 你好,谢谢你的答复。你是说LCD连接板子的连接头那边不稳定吗?可是同样的状态开机后kernel是正常的,连接应该没问题吧 。我现在试着改过几种对framebuffer的设置,如果增加了对 DISPC_GFX_BA1 这个寄存器的设置会有uboot中间的一段显示是黑屏(就是没图像但一直黑)的现象。之前是只对 DISPC_GFX_BA0这个寄存器设置了。这两个属于对Graphics DMA控制相关的寄存器:
对照datasheet上面有这两个寄存器的控制的说明:
我不是太明白这两个地址到底是要设成什么大小,是一样的,还是说 BA1 比 BA0多一定的大小。而且我看网上有的参考上面也没有特别的提到这个问题。不过从我尝试几次的修改看,这两个buffer地址的修改确实对图像显示有影响。下面我也不知道怎么改了。。。有点卡住了,我们要放假了,这个问题估计要到年后再来好好看了。
再次谢谢你们的答复,也祝各位新年快乐!
各位好!
之前的重影的问题现在我找到原因了,是分辨率的设置问题。现在我这边uboot中能够显示出来logo图像和打印信息:
但是有以下几个问题:
1)logo图像的颜色不对,显示不出来彩色。这个图像是uboot中默认的那个denx图标的bmp图片。uboot中是通过将denx.bmp这个图片制作成像素数组保存的。
按照网上的一些说法,我想换成一个自己的logo图片,可是我制作成bmp图片替换这个denx后显示也不正常。颜色和内容都有些差异。
2)在uboot显示结束到kernel开始的那个交替时间中,会出现kernel logo闪烁一下,然后再保持正常。这个是不是和framebuffer的清除有关?
3)现在背光显示不太正常,我想让lcd显示时才开启背光并让它保持到kernel,应该怎么做?
上面几个问题还请各位有时间的话帮忙分析一下,感谢!
针对你的3个问题的几个建议:
1.进入kernel后,LCD显示的内容正常吗?如果进入Linux kernel后,GUI显示是正常的,说明还是U-boot中寄存器配的不对,可以参考kernel下寄存器的配置。
2.kernel会重新初始化一遍clock,你可以把这部分代码去掉看看效果。
3.背光控制应该是通过某个GPIO做的,控制这个GPIO就可以了。
谢谢你的答复。
目前我这边有了些新进展:
1)背光通过设置一个GPIO后,差不多可以在logo显示出来的同时也一直保持了。
2)目前的颜色始终不对,不管用什么图片都只能是黑白的,没有彩色。进入kernel后LCD内容都是正常的,我也对照kernel的寄存器改了,就是dispc ,dsi,dss相关的值基本都和kernel中的一样。主要不知道是哪个寄存器的配置会影响这个颜色问题,目前我还在一个一个的看。
3)我修改了cfb_console.c中的一些代码,现在的logo能全屏显示了。按说分辨率是480*640,可是不知道为什么得用640*640分辨率的图片(8bit bmp图)才可以,如果用480*640的图片总会有一部分的黑屏。这个我目前还不知道原因:
480*640的图片
640*640的图片
4)目前重点的问题是在uboot结束到进入kernel的时候,会有几秒的白屏,之后才完全进入kernel的logo。而且这个kernel的logo会先闪烁一下才稳定。
在这个白屏的时间里,我量了一下某个像素数据的管脚和像素时钟的管脚,发现这几秒的时间里都没有信号传输。在uboot显示图片和后面的kernel
阶段数据管脚和时钟管脚都是有信号(数据)一直在传。这个现在还没能分析出来原因,怀疑进入kernel后是不是把LCD控制的管脚之类的都给重新
复位了。感觉这几秒的时间LCD 就没正常工作。不知道还有没有其他可能的原因,还请也帮忙分析下,感谢!
进入kernel后会把LCD的配置整个初始化一遍的。
把kernel 里面的LCD初始化部分去掉应该就可以了。
你的是在进入kernel后颜色不正常还是uboot里面的?我的在kernel都是正常的,就是我自己加的uboot中的图像不正常,uboot里面的LCD驱动是我自己参考网上的写得,可能有问题。还有就是我之前说的几个问题中,进入kernel后kernel logo闪烁的问题解决了,是把kernel 里面的部分spi初始化和操作reset管脚的地方去掉了。现在就是还有两个问题没解决:
1)uboot中的颜色问题,我发现如果原始图像是不含彩色的那种简单的灰度图,可以完整的显示。一有彩色,那个彩色的地方就显示的不正常,总感觉缺色的那种。
2)进入kernel就白屏的问题还是找不到原因。就是在uboot结束到kernel启动的时候,从打印log看只要一进入kernel (时间打印开始有的时候)就开始变成白屏(或者有残影渐变成白屏),持续5秒左右到kernel中的LCD初始化显示kernel logo之后正常。
Cheng Zhuo Gu 说:你的是在进入kernel后颜色不正常还是uboot里面的?我的在kernel都是正常的,就是我自己加的uboot中的图像不正常,uboot里面的LCD驱动是我自己参考网上的写得,可能有问题。还有就是我之前说的几个问题中,进入kernel后kernel logo闪烁的问题解决了,是把kernel 里面的部分spi初始化和操作reset管脚的地方去掉了。现在就是还有两个问题没解决:
1)uboot中的颜色问题,我发现如果原始图像是不含彩色的那种简单的灰度图,可以完整的显示。一有彩色,那个彩色的地方就显示的不正常,总感觉缺色的那种。
2)进入kernel就白屏的问题还是找不到原因。就是在uboot结束到kernel启动的时候,从打印log看只要一进入kernel (时间打印开始有的时候)就开始变成白屏(或者有残影渐变成白屏),持续5秒左右到kernel中的LCD初始化显示kernel logo之后正常。
1. 关于颜色不正常,我觉得一方面你查查屏本身是否正常,另一方面, 可以用starterware来做下简单的验证。
2. 这个问题似乎我们的开发板也有,就是kernel起来后,会重新初始化各个时钟,导致了这个问题。
谢谢答复!
关于问题1,我试过其他的样机也是一样的,颜色没有,而且进入kernel后颜色正常。感觉不是屏本身的问题。你说的这个starterware我后面可以试着看看。
关于问题2,我之前在跟踪kernel初始化代码的时候好像也发现这个问题,就是在如下的位置:
在init_IRQ()里面跟进去有个 void __init omap2_init_common_infrastructure(void) ,里面的
if (cpu_is_omap2420())
omap2420_clk_init();
else if (cpu_is_omap2430())
omap2430_clk_init();
else if (cpu_is_omap34xx())
omap3xxx_clk_init();
else if (cpu_is_ti816x())
ti816x_clk_init();
else if (cpu_is_ti814x())
ti814x_clk_init();
else if (cpu_is_omap44xx())
omap4xxx_clk_init();
应该就是这个omap3xxx_clk_init()初始化clk的,我试过把这个注释掉,发现kernel会卡死,但是此时的屏不是白屏的,还能保持uboot中的logo图像。不知道这个分析的对不对。如果你们的开发板也有,那有没有什么规避的方案?或者能让体验好点的方法,这个5秒左右的白屏确实体验不好。我之前想过一种方法就是uboot结束或者进入kernel后让LCD的背光关掉,在kernel logo出来时再打开背光,这样那几秒的白屏就是黑屏了,可是同事说这种体验也不好。。所以我也不知道后面该怎么改了。
1. 关于颜色,我想确认下,您的连接是否已经参考了我们的勘误文档,Errata, 请再确认下。
2. 关于这个闪屏的问题,我觉得可否在uboot里面关掉背光试试。
秦工你好,
1. 关于连接的问题与相关同事确认过了,没有问题的,而且我们这边目前wince的显示和android kernel里面的显示都是正常的。会不会是uboot里面某些寄存器的配置与kernel中要有差异?
2. 我之前试过在uboot中一直关掉背光,体验也不好。在之前的那种进入kernel白屏的时间里是黑屏的,之后再显示出kernel logo。我想问下你说的那个进入kernel clk初始化问题,是不是它把LCD相关的如dss 、dpll等时钟重新初始化了造成这段时间LCD等于是不正常的状态,而由于背光在uboot开始是一直开着的所以就是白屏了那么5秒左右,直到kernel 开始初始化LCD。像这些时钟能不能不让它重新的初始化?或者有没有办法让它们保持uboot中的状态?请问你们那边是怎么解决这个白屏问题的?
我比较好奇的是,有没有在uboot里面显示logo,这个问题你们不是第一个遇到,很多客户都没有很好的方法解决:(
这个是整个系统的clock初始化,关掉估计会对整个系统的启动产生影响。
最后单步跟进代码,把LCD相关的clock初始化关掉就可以了
Jian Zhou 你好!
今天我在clk init的调用中看到这么一个数组:
/*
* clkdev
*/
/* XXX At some point we should rename this file to clock3xxx_data.c */
static struct omap_clk omap3xxx_clks[] = {
CLK(NULL, "apb_pclk", &dummy_apb_pclk, CK_3XXX),
CLK(NULL, "omap_32k_fck", &omap_32k_fck, CK_3XXX),
CLK(NULL, "virt_12m_ck", &virt_12m_ck, CK_3XXX),
CLK(NULL, "virt_13m_ck", &virt_13m_ck, CK_3XXX),
......
里面有很多应该是初始化依次要用到的时钟,其中有LCD相关的如:
CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1),
CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK("omapdss", "tv_fck", &dss_tv_fck, CK_3XXX),
CLK("omapdss", "video_fck", &dss_96m_fck, CK_3XXX),
CLK("omapdss", "dss2_fck", &dss2_alwon_fck, CK_3XXX),
CLK("omapdss", "ick", &dss_ick_3430es1, CK_3430ES1),
...
你说的意思是不是把这种类型的都给注释掉?我今天尝试着部分的注释掉过,结果是有的版本进入kernel就一直白屏,有的是一进kenel就一直黑屏,没图像显示待机界面也没能正常进入。反正试的几个版本都不正常。不知道我找的这个地方是不是你说的LCD相关时钟初始化的地方?能不能帮忙一起看下?谢谢!