嵌入式开发基础学习笔记(RGB LCD 驱动开发)

RGB LCD 驱动开发学习笔记

1. LCD 硬件接口与信号线

RGB LCD 采用并行接口,主要包含以下信号线:

  • 数据线:R7:0(8根)、G7:0(8根)、B7:0(8根),共24根数据线(也可配置为16位模式)。
  • 控制信号线
    • DE (Data Enable):数据使能信号。
    • VSYNC:垂直同步信号(帧同步信号)。
    • HSYNC:水平同步信号(行同步信号)。
    • PCLK (Pixel Clock):像素时钟信号。
2. LCD 像素格式 (Pixel Format)
  • ARGB8888 格式 :一个像素点占用 4 个字节 (32位)。
    • A (Alpha):透明度通道 (bit 31-24)。
    • R (Red):红色通道 (bit 23-16)。
    • G (Green):绿色通道 (bit 15-8)。
    • B (Blue):蓝色通道 (bit 7-0)。
  • 显存 (Frame Buffer):需要在 DDR 中开辟一段内存空间用于存放像素数据,eLCDIF 控制器会自动从该地址读取数据发送给 LCD。
3. LCD 时序详解 (重点)

LCD 显示一帧图像的过程类似于"画图",电子枪从左到右、从上到下扫描像素点。为了锁定有效的像素数据,需要设置特定的时序参数(包含"黑边"时间)。

A. 行显示时序 (Horizontal Timing)

行时序决定了每一行的扫描过程。

  • HSYNC:行同步信号(低电平有效)。

  • HSPW (Horizontal Sync Pulse Width):行同步信号宽度(Thp),单位为 CLK。

  • HBP (Horizontal Back Porch):行同步信号后肩(Thb)。

  • HOZVAL:显示一行有效数据所需的时间(即屏幕宽度)。

  • HFP (Horizontal Front Porch) :行同步信号前肩(Thf)。

  • 关键计算公式:

  • 显示一行所需时间 = HSPW + HBP + HOZVAL + HFP

  • 有效像素开始位置 = 等待 HSPW + HBP 个 CLK 时间后开始。

B. 帧显示时序 (Vertical Timing)

帧时序决定了每一帧(画面)的扫描过程。

  • VSYNC:帧同步信号(低电平有效)。
  • VSPW (Vertical Sync Pulse Width):帧同步信号宽度(Tvp)。
  • VBP (Vertical Back Porch):帧同步信号后肩(Tvb)。
  • LINE (或 VERVAL):显示一帧有效数据所需的时间(即屏幕高度)。
  • VFP (Vertical Front Porch):帧同步信号前肩(Tvf)。

关键计算公式:

  • 显示一帧所需时间 = (VSPW + VBP + LINE + VFP) 个行时间。
  • 总像素时钟频率 = 1 / (显示一帧所需时间 * 显示一行所需时间)

C. 时序参数对照表

参数缩写 全称 中文含义 说明
HSPW Horizontal Sync Pulse Width 行同步脉宽 HSYNC 信号持续时间
HBP Horizontal Back Porch 行后肩 同步信号结束后到有效数据开始的时间
HFP Horizontal Front Porch 行前肩 有效数据结束后到下一次同步信号的时间
VSPW Vertical Sync Pulse Width 帧同步脉宽 VSYNC 信号持续时间
VBP Vertical Back Porch 帧后肩 帧同步信号结束后到有效数据开始的时间
VFP Vertical Front Porch 帧前肩 有效画面结束后到下一次帧同步的时间
4. eLCDIF 控制器配置

I.MX6U 的 LCD 控制器称为 eLCDIF (Enhanced LCD Interface)

A. 像素时钟配置 (Pixel Clock)

eLCDIF 的工作频率需要根据屏幕参数精确配置。

  • 时钟源选择 :通常选择 PLL5 (Video PLL)
  • 分频流程
    1. 选择 PLL5 作为时钟源(设置 CSCDR2[LCDIF1_PRE_CLK_SEL])。
    2. 经过预分频器(设置 CSCDR2[LCDIF1_PODF])。
    3. 最终到达 eLCDIF 外设。
  • 计算示例
    • 目标频率:31.5 MHz。
    • 设置 PLL5 为 1008 MHz -> 4分频 -> 8分频 -> 31.5 MHz。

B. 关键寄存器配置

在代码中,需要初始化 LCDIF_CTRLLCDIF_VDCTRL0-4 等寄存器。

寄存器 关键位域 (BitFields) 说明
LCDIF_CTRL CLKGATE, SFTRST 复位和时钟门控
DOTCLK_MODE 必须置 1,工作在 DOTCLK 模式
WORD_LENGTH 像素位宽 (3=24位)
LCDIF_VDCTRL0 HSYNC_POL, VSYNC_POL 同步信号极性设置
ENABLE_POL DE 信号极性
VSYNC_PULSE_WIDTH VSPW 值设置
LCDIF_VDCTRL2 HSYNC_PULSE_WIDTH HSPW 值设置
HSYNC_PERIOD 一行的总周期 (HSPW+HBP+WIDTH+HFP)
LCDIF_VDCTRL3 VERTICAL_WAIT_CNT VSPW + VBP
HORIZONTAL_WAIT_CNT HSPW + HBP
LCDIF_VDCTRL4 DOTCLK_H_VALID_DATA_CNT 设置屏幕宽度 (WIDTH)
5. 驱动初始化流程
  1. 初始化 IO 引脚 :将 LCD 相关引脚复用为 LCDIF 功能,并配置电气属性(如驱动能力、压摆率)。
  2. 初始化像素时钟:配置 CCM 模块,设置 PLL5 和分频器,生成所需的像素时钟(如 31.5MHz)。
  3. 配置 eLCDIF 寄存器
    • 复位控制器。
    • 设置屏幕分辨率(TRANSFER_COUNT)。
    • 配置时序参数(VSPW, VBP, VFP, HSPW, HBP, HFP)。
    • 设置显存地址(CUR_BUF, NEXT_BUF)。
  4. 开启显示:使能 eLCDIF 控制器,之后显存中的数据会自动显示在屏幕上。
相关推荐
奔跑的架构师1 小时前
[A-49]ARMv9/v8-PSCI接口规范与工作流程简介
android·linux·arm开发·arm
国科安芯2 小时前
详解ADC 规则组外部触发:CH2、CH3 与 TRGO2
运维·网络·单片机·嵌入式硬件·mcu·系统架构
ACP广源盛139246256732 小时前
WAIC2026 国产算力浪潮@ACP#YLB3118 在算力矩阵中的存储定位与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
ACP广源盛139246256732 小时前
WAIC2026 国产算力浪潮下@ACP#IX8024 在算力矩阵中的定位与落地场景
大数据·数据库·人工智能·嵌入式硬件·线性代数·矩阵
振南的单片机世界2 小时前
硬核菊花链:3个GPIO+无限74HC595=端口扩展“无限套娃”
arm开发·stm32·单片机·嵌入式硬件
zlinear数据采集卡2 小时前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
Dr.kangder2 小时前
嵌入式面试总结(十)——流水线
单片机·嵌入式硬件·面试·职场和发展·系统架构·嵌入式
runafterhit3 小时前
【学习地图】ARM嵌入式类 · 文章索引
arm开发·学习
沐-风_3 小时前
双通道LVDS(Dual‑Link)Link0 / Link1:硬件、软件、标准
嵌入式硬件·学习
工业设备方案笔记4 小时前
RK3588工业视觉检测方案详解:AI如何赋能智能制造?
arm开发·人工智能·计算机视觉·目标跟踪·视觉检测·边缘计算·制造