PL111 RGB LCD时序配置详解

PL111 RGB LCD 时序说明

1)文档范围

本文从两个维度整理 PL111 时序:

  • 通俗理解(面向调试与沟通)
  • 硬件寄存器映射(面向实现与定位问题)

内容与 bsp/qemu-vexpress-a9/drivers/drv_clcd.c 的实现保持一致。


2)核心概念

2.1 水平方向时序(单行)

  • HSW(Horizontal Sync Width,行同步宽度)
    • HSYNC 脉冲持续的像素时钟个数
    • 用于标记"换行",帮助屏端锁定采样相位
  • HBP(Horizontal Back Porch,水平后肩)
    • HSYNC 结束后到有效像素开始前的空白区
  • HPP(有效像素宽度)
    • 一行中真正显示的像素数量
  • HFP(Horizontal Front Porch,水平前肩)
    • 有效像素结束后到下一次 HSYNC 前的空白区

单行时序顺序:

HSW -> HBP -> HPP(有效像素) -> HFP

2.2 垂直方向时序(单帧)

  • VSW(Vertical Sync Width,场同步宽度)
    • VSYNC 脉冲持续的行数
  • VBP(Vertical Back Porch,垂直后肩)
    • VSYNC 后到有效显示区前的空白行
  • LPP(有效显示高度)
    • 一帧中真正显示的有效行数
  • VFP(Vertical Front Porch,垂直前肩)
    • 有效显示结束后到下一帧 VSYNC 前的空白行

单帧时序顺序:

VSW -> VBP -> LPP(有效行) -> VFP


3)PL111 寄存器位定义

3.1 LCDTiming0(水平时序)

PL111 常用位定义如下:

  • bits[7:2]PPL = (pixels_per_line / 16) - 1
  • bits[15:8]HSW - 1
  • bits[23:16]HFP - 1
  • bits[31:24]HBP - 1

反解公式:

  • active_width = (PPL + 1) * 16
  • HSW = ((tim0 >> 8) & 0xFF) + 1
  • HFP = ((tim0 >> 16) & 0xFF) + 1
  • HBP = ((tim0 >> 24) & 0xFF) + 1

3.2 LCDTiming1(垂直时序)

PL111 常用位定义如下:

  • bits[9:0]LPP = lines_per_panel - 1
  • bits[15:10]VSW - 1
  • bits[23:16]VFP - 1
  • bits[31:24]VBP - 1

反解公式:

  • active_height = LPP + 1
  • VSW = ((tim1 >> 10) & 0x3F) + 1
  • VFP = ((tim1 >> 16) & 0xFF) + 1
  • VBP = ((tim1 >> 24) & 0xFF) + 1

4)本 BSP 驱动中的实际赋值

drv_clcd.c 中:

c 复制代码
plio->tim0 = 0x3F1F3C00 | ((CLCD_WIDTH / 16 - 1) << 2);
plio->tim1 = 0x080B6000 | (CLCD_HEIGHT - 1);

解释:

  • tim0 的常量 0x3F1F3C00 固定了 HBP/HFP/HSW
  • tim0 的低位字段用 CLCD_WIDTH 动态计算 PPL
  • tim1 的常量 0x080B6000 固定了 VBP/VFP/VSW
  • tim1 的低位字段用 CLCD_HEIGHT 动态计算 LPP

以 480 行为例:

  • LPP = 480 - 1 = 479
  • VSW = 25
  • VFP = 12
  • VBP = 9

5)HSW/VSW 为什么关键

5.1 通俗理解

  • 屏幕按"从左到右、逐行、逐帧"方式刷新。
  • 每一行/每一帧开始前,需要一个同步脉冲告诉屏端"边界到了"。
  • HSW/VSW 就是这个同步脉冲的长度。

5.2 硬件原理

  • 同步脉冲用于 LCD 驱动电路锁定像素采样时序。
  • 宽度不合理会导致锁相不稳,常见表现:
    • 闪屏
    • 滚屏
    • 画面抖动或撕裂感
    • 无显示

6)水平与垂直的镜像关系

  • HSW <-> VSW:同步脉冲宽度
  • HBP <-> VBP:同步后的稳定等待区
  • HPP(有效宽) <-> LPP(有效高):可见画面
  • HFP <-> VFP:周期结束前的尾部空白区

本质相同,只是作用轴不同:

  • 水平参数控制"每一行"
  • 垂直参数控制"每一帧"

7)工程调参建议流程

  1. 以屏厂 datasheet 为唯一时序基准。
  2. 先确认有效分辨率:CLCD_WIDTHCLCD_HEIGHT
  3. 按位编码:
    • 水平参数写入 tim0
    • 垂直参数写入 tim1
  4. 同步检查像素格式与时钟配置(control、平台时钟树)。
  5. 若显示不稳定,按以下顺序排查:
    • 同步极性与同步宽度
    • 前后肩参数
    • 像素时钟频率
    • framebuffer 地址与对齐

8)常见故障与症状

  • HSW 过小:行边界不稳,画面错位/抖动
  • HSW 过大:行周期变长,帧率下降
  • VSW 不匹配:滚屏、帧周期性不稳定
  • Porch 不匹配:边缘裁切、偏移、部分面板无法锁定

9)一句话总结

HSW/VSW 定义了行/帧同步脉冲长度,用于告诉屏幕何时换行/换帧;HBP/HFP 与 VBP/VFP 提供消隐缓冲;HPP/LPP 定义有效显示区域。

相关推荐
时光飞逝的日子10 天前
嵌入式智能体开发指南:基于鸿蒙 ArkUI 与 RT-Thread 的设备自主决策系统实现
rt-thread·鸿蒙系统·自主决策·嵌入式智能体·设备协同·嵌入式 aiot
小灰灰搞电子20 天前
rt-thread RTC设备使用详解
rt-thread·rtc
长安第一美人1 个月前
RT-Thread 工业屏驱动开发实战:UART 串口屏协议解析 + 数据实时刷新 + 设备驱动框架完整实现
驱动开发·嵌入式硬件·rt-thread·工业控制·uart通信·串口屏驱动
小灰灰搞电子1 个月前
rt-thread 解析sbus协议源码分享
rt-thread·sbus
xzl041 个月前
LVGL显示移植:lv_port_disp.c 详情介绍
rt-thread·lvgl·ra6m3-hmi-board
xzl041 个月前
LVGL 启动流程全解析:RT-Thread 下的界面渲染链路
rt-thread·lvgl
xzl041 个月前
LVGL Coffee UI 接入实战:问题解决全记录
ui·rt-thread·lvgl
神一样的老师2 个月前
【兆易创新GD32VW553开发板试用】 BSP 从 GitHub 下载与编译指南
单片机·github·rt-thread
xzl042 个月前
【Menuconfig】RT-Thread配置菜单第一级
rt-thread