关于LCD、VGA、HV、DE
近来调试LCD显示,略有心得,遂记
概念
VGA
VGA(Video Graphics Array)视频图形阵列是IBM于1987年随PS/2机一起推出的一种使用模拟信号的视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。不支持热插拔,不支持音频传输。
HV
在液晶显示器中,行同步信号(HS)的作用是选择出液晶面板上有效行信号区间,场同步信号(VS)的作用是选择出液晶面板上有效场信号区间,行场同步信号的共同作用,可将选择出液晶面板上的有效视频信号区间。
DE
在输入到液晶显示器的视频信号中,有效视频信号(有效RGB信号)只占信号周期中的一部分,而信号的行消隐和场消隐期间并不包含有效的视频数据。因此,液晶显示器中的有关电路在处理视频信号时,必须将包含有效视频信号的区间和不包含有效视频信号的消隐区间区分开来。为了区分有效和无效视频信号,在液晶显示器电路中设置了DE信号
时序计算
如何根据LCD手册时序表,计算相应的VGA参数,以HV mode为例
在LCD手册中HV mode input timing table 如下:
时序图如下:
图表对应关系如下:
图 | 表 | 数值(以实际为准) |
---|---|---|
行同步(宽度) | Hsync pulse width(hpw) | 1-140 |
行后沿 | Hsync Back porch(hbp) | 可通过计算获得 |
行有效图像 | Horizontal display area(hd) | 1024 |
行前沿 | Hsync Front porch(hfp) | 16-216 |
行扫描周期 | 1 Horizontal Line | 1344=hpw+hbp+hd+hfp |
场同步(宽度) | Vsync pulse width(vpw) | 1-20 |
场后沿 | Vsync Back porch(vbp) | 可通过计算获得 |
场有效图像 | Vsync display area(vd) | 600 |
场前沿 | Vsync Front porch(vfp) | 1-127 |
场扫描周期 | Vsync period time(tv) | 635=vpw+vbp+vd+vfp |
时钟计算公式
行扫描周期*场扫描周期*帧率 = 时钟频率
以1024*600,60Hz为例,1344*635*60 = 51.2Mhz,与LCD手册中的DCLK frequency对应
STM32结构体,正点原子LCD屏幕
typedef struct
{
uint32_t clock_freq;
uint8_t pixel_clock_polarity;
uint16_t hactive;
uint16_t hback_porch;
uint16_t hfront_porch;
uint16_t hsync_len;
uint16_t vactive;
uint16_t vback_porch;
uint16_t vfront_porch;
uint16_t vsync_len;
} atk_rgblcd_timing_t;
/* RGB LCD模块参数匹配表 */
static const atk_rgblcd_param_t atk_rgblcd_param[] = {
{0, ATK_RGBLCD_PID_4342, 480, 272, { 9000000, 1, 480, 40, 5, 1, 272, 8, 8, 1}, ATK_RGBLCD_TOUCH_TYPE_GTXX}, // ATK-MD0430R-480272
{1, ATK_RGBLCD_PID_7084, 800, 480, {33000000, 1, 800, 46, 210, 1, 480, 23, 22, 1}, ATK_RGBLCD_TOUCH_TYPE_FTXX}, // ATK-MD0700R-800480
{2, ATK_RGBLCD_PID_7016, 1024, 600, {45000000, 1, 1024, 140, 160, 20, 600, 20, 12, 3}, ATK_RGBLCD_TOUCH_TYPE_GTXX}, // ATK-MD0700R-1024600
{3, ATK_RGBLCD_PID_7018, 1280, 800, { 0, 1, 1280, 0, 0, 0, 800, 0, 0, 0}, ATK_RGBLCD_TOUCH_TYPE_GTXX}, // ATK-MD0700R-1280800
{4, ATK_RGBLCD_PID_4384, 800, 480, {33000000, 1, 800, 88, 40, 48, 480, 32, 13, 3}, ATK_RGBLCD_TOUCH_TYPE_GTXX}, // ATK-MD0430R-800480
{5, ATK_RGBLCD_PID_1018, 1280, 800, {45000000, 0, 1280, 140, 10, 10, 800, 10, 10, 3}, ATK_RGBLCD_TOUCH_TYPE_GTXX}, // ATK-MD1010R-1280800
};
可以看到参数列表中的数值都是可以从LCD手册中获得的,但是这里时钟频率是45Mhz,不是典型值,所以帧率不是60Hz
struct mode_struc {
float pclk;
int hr, hss, hse, hfl;
int vr, vss, vse, vfl;
};
static struct mode_struc vgamode_vesa[] = {
{ 30.00, 1024, 1184, 1204, 1344, 600, 608, 612, 635, }, /*"1024x600_60.00" */
};
hss为hsync start,计算公式为1024+160(满足LCD要求即可)
hse为hsync end,计算公式为1024+160+20(满足LCD要求即可)
标准VGA参数可以使用linux下的工具gtf、cvt计算