AM335x-Uboot下的LCD驱动1280x800-failed解决方法
1. 问题描述:
uboot下显示图片,800x480、1024x600可以显示,如果1280x800则不能显示图片。
图一 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处理器设计的工业级核心板,广泛用于各种串口服务器,多串口网关等应用场景。