我的板子支持VGA LVDS视频输出,由于AM335X只有LCD RGA接口,因此实现方式上都是使用RGB转换芯片, LVDS使用的是LVDS93A TI的片子, VGA使用的是ADV7125KSTZ140驱动芯片,
软件方面:
am335x的驱动,主要也就3个方面,
1.1.PINMUX
2.2, LCD CFG
3.3. da8xx_panel 时序
对应的也就2个文件需要修改, da8xx-fb.c board-am33txevm.c
lcdc_pin_mux
()此函数配置LCD驱动引脚, 这个可以在设计时,最好与am335xevm官方一致,这样就不用修改了,也避开一个潜在的问题点。
其实主要精力都在于下面的2个结构体,
lcd_cfg
结构体需要动的比较少,最多修改下bpp bit per pixel 每一个像素占用多少个bit, 其实就2个选择,16b 32b,色彩如果多于16bit的话,那就设置32就行,比如24位真彩色。
static struct lcd_ctrl_config lcd_cfg = {
&disp_panel,
.ac_bias = 255,
.ac_bias_intrpt = 0,
.dma_burst_sz = 16,
.bpp = 32,
.fdd = 0x80,
.tft_alt_mode = 0,
.stn_565_mode = 0,
.mono_8bit_mode = 0,
.invert_line_clock = 1,
.invert_frm_clock = 1,
.sync_edge = 0,
.sync_ctrl = 1,
.raster_order = 0,
};
known_lcd_panels
这个结构体才是关键中的关键,这里面有很多定义,如果从来没有接触过LCD的人会很不适应,适应客户自己 的LCD主要修改的就是这个时序与时钟频率。下面是VGA常用的时序设置,不过我们自己的LCD大部分都不是这个时序,所以需要我们修改这个时序。
static struct da8xx_panel known_lcd_panels[] = {
/* Sharp LCD035Q3DG01 */
[0] = {
.name = "Sharp_LCD035Q3DG01",
.width = 320,
.height = 240,
.hfp = 8,
.hbp = 6,
.hsw = 0,
.vfp = 2,
.vbp = 2,
.vsw = 0,
.pxl_clk = 4608000,
.invert_pxl_clk = 1,
},
硬件:
LVDS信号非常小,0.5~1.2V 振幅也很小, 但是通过示波器是可以观察到的。并不是TTL电平,就是为了适应高速传输,为了让信号可以上升、下降到位。
VGA频率表
VGA Signal Timing [VGA频率表]
2
详细介绍了各种VGA信号的频率,
SVGA Signal 800 x 600 @ 60 Hz timing
General timing
Screen refresh rate | 60 Hz |
Vertical refresh | 37.878787878788 kHz |
Pixel freq. | 40.0 MHz |
Horizontal timing (line)
Polarity of horizontal sync pulse is positive.
Scanline part | Pixels | Time [µs] |
Visible area | 800 | 20 |
Front porch | 40 | 1 |
Sync pulse | 128 | 3.2 |
Back porch | 88 | 2.2 |
Whole line | 1056 | 26.4 |
Vertical timing (frame)
Polarity of vertical sync pulse is positive.
Frame part | Lines | Time [ms] |
Visible area | 600 | 15.84 |
Front porch | 1 | 0.0264 |
Sync pulse | 4 | 0.1056 |
Back porch | 23 | 0.6072 |
Whole frame | 628 |
16.5792 |
front porch后肩 back porch前肩 sync pluse同步宽度 这里面都是一些标准的或者是推荐的VGA频率, 但各个厂家不一定遵守!(如果LCD文档中没有时序要求,则可以直接按里面推荐的时序配置试试)
时间频率是就是行x宽x刷新率=1056
666
60约= 40Mhz
我在调试过程中,发现上面这些bp fp等时序,要求并不是非常严格,错一点也会显示,但是显示的不完美,需要调整,这样才能把LCD调试的非常居中,
但是VGA就不一样了,我在调试过程中VGA显示器老是显示不支持的显示格式,常用的格式640×480 800×600我都测了,我猜测VGA显示器主要检测刷新频率,刷新频率应该是50~85范围内,可能我的设置超过了这个范围,然后显示器就不显示,揭示“不支持”
VGA控制器不需要 LCD驱动信号中的
DE
线,但是LVDS控制器需要。
还有个知识点,就是LCD的背光,背光接口一般有4个定义,12V GND PWM EN, 由于我就是简易调试,根本没有背光使能控制与PWM控制,于是简单粗暴的直接把PWM、EN接到12V上,完美,背光全亮,就可以专注于LCD接口的调试了 (注:
PWM EN不一定是12V电平,切记看PDF文档)