☰
i.MX6ULL 裸机开发|LCD (eLCDIF) 显示驱动
2026/9/28 21:06:54 网站建设 项目流程

前面学完 I2C 总线驱动,本节课进入 LCD 显示模块,从显示基础概念、屏幕硬件接口、时序原理,再到 Video PLL 时钟配置、eLCDIF 寄存器编程、乒乓缓存机制,完整梳理 RGB 屏幕裸机驱动开发全流程。

一、I2C 回顾与显示技术基础

1. I2C 通信要点回顾

I2C 的难点不在初始化分频配置,而是收发过程中对控制器控制位做精准时序控制。

  • 写时序:主机发送起始信号→从机地址 + 写位→等待应答→发送寄存器地址→循环发数据、等待应答→停止信号。
  • 读时序更为复杂:发送寄存器地址后,发送重复起始信号,重新发送从机地址并切换为读位,控制器由发送模式切为接收模式。
  • 应答规则:多字节接收时,在倒数第二条数据前设置 NACK;接收最后一条数据前提前切回发送模式,防止误触发多余时钟。
  • 总线挂载:理论地址最多支持 128 个设备,但受硬件电容、阻抗限制,实际工程一般只挂 10~20 个从机。

2. 显示屏幕技术演进

  • CRT 阴极射线管:老式显像管,依靠电子枪击打荧光粉发光,体积大、高压危险,现已淘汰。
  • LCD 液晶显示屏:液晶本身不发光,依靠背光板;电压改变液晶偏转充当滤光片,混合 RGB 色彩成像。
  • OLED 有机发光二极管:像素自发光,无需背光,可以关闭像素实现纯黑,对比度高;双层 OLED 方案提升亮度、延长使用寿命。

3. 图像关键参数

  • 色彩格式:RGB888,R/G/B 各 8bit,24bit,约 1600 万色;RGB565 共 16bit,6.5 万色。
  • 分辨率:屏幕横向、纵向像素点数量,例如 800×480。
  • 像素密度:单位英寸内像素数量,决定画面细腻程度。
  • 刷新率:每秒画面刷新次数,如 60Hz。

二、LCD 硬件接口、时序与带宽

1. RGB LCD 硬件排线信号

通过排线连接底板 RGBLCD 接口,分为数据线、控制线:

  • 24 根数据线:BGR 三色,每色 8bit,RGB888 格式。
  • 4 根核心控制线
    • PCLK 像素时钟:同步像素数据。
    • HSYNC 行同步:标记一行结束、下一行开始。
    • VSYNC 场 / 垂直同步:标记一帧画面结束。
    • DE 数据使能:高电平代表数据线数据有效。
  • 其他引脚:PWM 背光调节引脚、复位 Reset 引脚、触摸中断 INT 引脚(触摸走 I2C,和 LCD 显示驱动相互独立)。

2. 通信类型与带宽估算

RGB 并行 LCD 属于单工、同步、并行通信。
示例:800×480、60Hz 屏幕,加上前后肩同步开销,像素时钟 PCLK 约 30.9MHz。
显存存储:RGB888 一个像素 3 字节,但内存中常用 4 字节 int 对齐存放,多出字节可预留 Alpha 通道。

3. 行场时序参数(Z 型扫描:从左向右、从上向下)

  • 行时序:HFP 行前肩、HSYNC 宽度、HBP 行后肩、Active Video 有效像素。
  • 帧时序:VFP 场前肩、VSYNC 宽度、VBP 场后肩,单位为 “行”。

4. eLCDIF 控制器与 DMA

SOC 使用 eLCDIF(增强型 LCD 接口控制器)驱动屏幕;可开启 DMA,直接把内存帧缓存的数据搬运到 LCD 控制器,减轻 CPU 负担。
HSYNC、VSYNC、PCLK 信号的有效极性,必须对照屏幕手册在寄存器中配置。

三、LCD 驱动代码任务规划与硬件细节

  1. 引脚复用与电气配置:配置 24 根数据线、4 根控制线、背光引脚的 IOMUX 复用;LCD 引脚设置最大驱动能力 DSE=111,高压摆率 SRE=1,保障高速信号稳定。
  2. 像素时钟目标:800×480@60Hz,PCLK 目标 31MHz,选用 PLL5 视频锁相环作为时钟源。PLL5 输出 744MHz,两级分频 4×6=24 分频,744/24=31MHz。
  3. eLCDIF 控制器初始化:接口模式、信号极性、24 位数据格式、行场时序参数配置。
  4. 图形库移植(可选):画点、画线、画圆、字符显示的 Framebuffer 图形库。
  5. 背光:实验阶段背光引脚临时配置为 GPIO 输出高电平,固定 100% 亮度,PWM 调光后续实验实现。

四、Video PLL 时钟与 eLCDIF 寄存器配置

1. Video PLL 时钟配置

目标输出 744MHz,分频系数 DIV_SELECT=31,NUMERATOR=0,DENOMINATOR=1。
寄存器操作:先清零对应 bit,再置位;VIDEO_DIV 配置 1 分频,等待 PLL 锁定(读取状态寄存器 bit31 判断锁定完成)。

2. 时钟树选通与多级分频

CSCDR2、CBCMR 寄存器配置预分频,4 分频 + 6 分频;CSCDR2 选择位指定 LCDIF1 时钟源来自 Video PLL。

3. eLCDIF 控制器初始化流程

  1. CTRL 寄存器 bit31 置 1 执行模块复位,延时 20ms,再清零复位;bit30 清零打开时钟门。
  2. DOTCLK_MODE 置 1,选择 RGB DOTCLK 接口模式。
  3. 设置总线宽度 24bit,RGB888 未压缩格式,主机模式。

4. 屏幕参数封装与显存规划

定义屏幕参数结构体,存放分辨率、像素字节、H/V 时序(前肩、后肩、脉冲宽度)。
帧缓冲区起始地址设置为0x89000000,避开程序代码段、栈,防止覆盖程序。

五、寄存器细节、乒乓缓存与调试踩坑

1. eLCDIF 关键视频寄存器

  • Transfer Count 发送计数寄存器:包含 V count 垂直计数、H count 水平计数,写入时需要移位组合宽度高度。
  • Buffer 地址寄存器:Current Buffer 当前帧缓存,Next Buffer 下一帧缓存;单缓冲模式两者指向同一内存地址。
  • VD Control 0~4 视频控制寄存器
    • VD Control0:VSYNC 输出方向、DE/PCLK 信号极性。
    • VD Control1:垂直周期 = 屏幕高度 + VSPW + VFP + VBP。
    • VD Control2:行同步脉冲宽度与水平周期。
    • VD Control3:行、列等待计数(脉冲宽度 + 后肩)。
    • VD Control4:开启同步信号控制,设置每行有效像素时钟数。

2. 乒乓缓存(双缓冲)原理

两块独立显存缓冲区:一块交给 eLCDIF 读取用于屏幕显示;CPU 在另一块缓冲区绘制下一帧图像。
绘制和显示并行执行,切换 Current/Next Buffer 指针完成帧切换,消除画面撕裂、卡顿。

3. 代码实现与常见调试问题

  • 显存操作:将显存物理地址强制转为二维数组指针,直接通过行列索引修改像素颜色。
  • 典型 Bug
    1. PLL 无法锁定:744MHz 高频配置时 PLL 锁定标志不置位,需要调整时钟配置,谨慎使用死循环等待锁定。
    2. 宽高写反:发送计数寄存器水平、垂直位置颠倒,画面显示错乱。
    3. DE 信号极性配置错误,导致画面黑屏 / 花屏。
  • 调试技巧:硬件复位、寄存器配置后增加延时,保证硬件稳定;对照一份可正常运行的参考代码,快速对比寄存器差异定位问题。

六、学习总结

RGB LCD 裸机开发分为三层:时钟层(Video PLL + 多级分频)、eLCDIF 控制器寄存器层、显存 / 图形应用层。
时序参数(前后肩、同步脉冲)、信号极性是 LCD 驱动最容易出错的地方。
乒乓缓存双缓冲是图形显示常用优化手段,解决画面撕裂问题。
另外区分开 LCD 显示驱动和 I2C 触摸驱动,二者硬件相互独立,不要混淆

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询