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

RGB LCD 驱动开发学习笔记

1. LCD 硬件接口与信号线

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

  • 数据线:R[7:0](8根)、G[7:0](8根)、B[7: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 控制器,之后显存中的数据会自动显示在屏幕上。
相关推荐
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Alaso_shuang5 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
TangDuoduo00055 天前
【Linux SPI驱动开发】
驱动开发
脚后跟5 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126915 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
The️5 天前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
星马梦缘5 天前
驱动层开发——蜂鸣器驱动
stm32·单片机·嵌入式硬件·hal·驱动