AM335x-Uboot下的LCD驱动1280x800-failed解决方法


1. 问题描述:

uboot下显示图片,800x480、1024x600可以显示,如果1280x800则不能显示图片。

uboot-logo.png

图一 uboot logo


2. 分析方法:

2.1 首先测试波形,假设在kernel和uboot下设定同样的参数的时候

    #define WIDTH 1280

    #define HEIGHT  800

    #define HFP   200

    #define HBP   46

    #define HSW   40

    #define VFP   40

    #define VBP   3

    #define VSW   20

    #define FRESH_HZ  40


    .width = WIDTH,

    .height = HEIGHT,

    .hfp = HFP,

    .hbp = HBP,

    .hsw = HSW,

    .vfp = VFP,

    .vbp = VBP,

    .vsw = VSW,

    .pxl_clk = (WIDTH+HFP+HBP+HSW)*(HEIGHT+VFP+VBP+VSW)*FRESH_HZ,


2.2 Kernel中可以显示1280x800的图片,其中的相关波形频率如下

    pclk   64MHZ

    vsync  47hz

    hsync  40Khz

    ac_bias  38khz

    lcd_data0  不一定 大概3MHZ

    lcd_data1 不一定  2.5mhz


2.3 然后uboot下的波形频率如下

    pclk    64mhz        kernel中是64MHZ   

    vsync    140hz    kernel中是47hz

    hsync    118khz   kernel中是40Khz

    ac_bias  112khz   kernel中是38khz

    lcd_data0  1.8mhz   kernel中是3MHZ

    lcd_data1  1.5mhz   kernel中是2.5mhz


3. 原因分析:

很明显,uboot下是有问题的,然后我们开始找问题,这么理解,如果是您是1280,则16*(msb+lsb+1)=1280  ,则msb=1  lsb=001111。然后根据实际print出来的寄存器的值是这样的,LCDC_RASTER_TIMING_0=44,data=0x2dc79cf0,从这里看出来msb就不是1,所以就是有问题


4. 解决方法

所以这里应该是设定Hsync的时候出错了,在文件Raster.c中的函数RasterHparamConfig,其中有如下代码

    ppl = (ppl & 0x000003f0) | ((ppl & 0x00000400) >> 8);

         HWREG(baseAddr + LCDC_RASTER_TIMING_0) = ppl; 

仔细分析,可以看出,这里的向右移8bit,需要修改成7bit,如下即可解决问题

    ppl = (ppl & 0x000003f0) | ((ppl & 0x00000400) >> 7);



维芯科AM335x核心板,基于TI AM335x处理器设计的工业级核心板,广泛用于各种串口服务器,多串口网关等应用场景。


Tags: Array