首先抱歉一下,我不是硬件设计背景,但是主管的项目里,设计了一块主控板,使用Am335x芯片, Linux 3.2.0, 通过GPIO外接LCD;所以表述上可能不是很准确,希望能说明白问题。
问题:已按照论坛里的置顶帖做过DDR3 Software Leveling,系统初始化过程中能看到LCD背光点亮,然后有几率成功显示界面,也有几率LCD直接黑屏,显示出现Underflow,此时LCD背光都没有了,也无法自行恢复,经常多次Underflow,之后可能内核崩溃;如果成功显示界面,之后一般会比较稳定,但是也有几率LCD突然黑屏,并出现Underflow;
这块板是自己的项目组设计的,采用UBL+Uboot,开始没有设计JTAG接口,调试出现此问题后,试图自行设置DDR3参数解决问题,但是结果是很大几率LCD黑屏,并没有Underflow的中断信息,后来加了JTAG后,用CCS跑了Leveling, 变成上面的情况,区别只是现在必定能看到Underflow信息
if ((stat & LCD_SYNC_LOST) || (stat & LCD_FIFO_UNDERFLOW)) {
printk(KERN_ERR "LCDC sync lost or underflow error occured! SYNC_LOST:0x%lx UNDERFLOW:0x%lx 0x%x\n", stat & LCD_SYNC_LOST, stat & LCD_FIFO_UNDERFLOW, lcdc_read(LCD_RAW_STAT_REG));
lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);
//clk_disable(par->lcdc_clk);
lcdc_write(stat, LCD_MASKED_STAT_REG);
lcd_enable_raster();
//clk_enable(par->lcdc_clk);
试过各种DDR3参数调整,时钟调整,有的时候似乎有点作用,但是都能重现黑屏且无法恢复;
也检查了布线,始终找不到问题所在;
测LCDC时钟在黑屏后异常,pix clk 从正常的75M变成140M;
请求帮助,现在不知道该从哪里入手,该怎么定位问题。
Jian Zhou:
你的LCD的分辨率是多少的,感觉像是内存泄漏
Cheng Yang1:
回复 Jian Zhou:
非常感谢您的回复,在da8xx-fb里使用如下定义,
[2] = { .name = "VGA", .width = 1024, .height = 768, .hfp = 18, .hbp = 1248, .hsw = 53, .vfp = 3, .vbp = 29, .vsw = 6, .pxl_clk = 72000000, .invert_pxl_clk = 1,//0, },
lcdc function clock 300M,实际使用pxl_clk是75M