 显示驱动)
前面学完 I2C 总线驱动本节课进入 LCD 显示模块从显示基础概念、屏幕硬件接口、时序原理再到 Video PLL 时钟配置、eLCDIF 寄存器编程、乒乓缓存机制完整梳理 RGB 屏幕裸机驱动开发全流程。一、I2C 回顾与显示技术基础1. I2C 通信要点回顾I2C 的难点不在初始化分频配置而是收发过程中对控制器控制位做精准时序控制。写时序主机发送起始信号→从机地址 写位→等待应答→发送寄存器地址→循环发数据、等待应答→停止信号。读时序更为复杂发送寄存器地址后发送重复起始信号重新发送从机地址并切换为读位控制器由发送模式切为接收模式。应答规则多字节接收时在倒数第二条数据前设置 NACK接收最后一条数据前提前切回发送模式防止误触发多余时钟。总线挂载理论地址最多支持 128 个设备但受硬件电容、阻抗限制实际工程一般只挂 10~20 个从机。2. 显示屏幕技术演进CRT 阴极射线管老式显像管依靠电子枪击打荧光粉发光体积大、高压危险现已淘汰。LCD 液晶显示屏液晶本身不发光依靠背光板电压改变液晶偏转充当滤光片混合 RGB 色彩成像。OLED 有机发光二极管像素自发光无需背光可以关闭像素实现纯黑对比度高双层 OLED 方案提升亮度、延长使用寿命。3. 图像关键参数色彩格式RGB888R/G/B 各 8bit24bit约 1600 万色RGB565 共 16bit6.5 万色。分辨率屏幕横向、纵向像素点数量例如 800×480。像素密度单位英寸内像素数量决定画面细腻程度。刷新率每秒画面刷新次数如 60Hz。二、LCD 硬件接口、时序与带宽1. RGB LCD 硬件排线信号通过排线连接底板 RGBLCD 接口分为数据线、控制线24 根数据线BGR 三色每色 8bitRGB888 格式。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 控制器与 DMASOC 使用 eLCDIF增强型 LCD 接口控制器驱动屏幕可开启 DMA直接把内存帧缓存的数据搬运到 LCD 控制器减轻 CPU 负担。HSYNC、VSYNC、PCLK 信号的有效极性必须对照屏幕手册在寄存器中配置。三、LCD 驱动代码任务规划与硬件细节引脚复用与电气配置配置 24 根数据线、4 根控制线、背光引脚的 IOMUX 复用LCD 引脚设置最大驱动能力 DSE111高压摆率 SRE1保障高速信号稳定。像素时钟目标800×48060HzPCLK 目标 31MHz选用 PLL5 视频锁相环作为时钟源。PLL5 输出 744MHz两级分频 4×624 分频744/2431MHz。eLCDIF 控制器初始化接口模式、信号极性、24 位数据格式、行场时序参数配置。图形库移植可选画点、画线、画圆、字符显示的 Framebuffer 图形库。背光实验阶段背光引脚临时配置为 GPIO 输出高电平固定 100% 亮度PWM 调光后续实验实现。四、Video PLL 时钟与 eLCDIF 寄存器配置1. Video PLL 时钟配置目标输出 744MHz分频系数 DIV_SELECT31NUMERATOR0DENOMINATOR1。寄存器操作先清零对应 bit再置位VIDEO_DIV 配置 1 分频等待 PLL 锁定读取状态寄存器 bit31 判断锁定完成。2. 时钟树选通与多级分频CSCDR2、CBCMR 寄存器配置预分频4 分频 6 分频CSCDR2 选择位指定 LCDIF1 时钟源来自 Video PLL。3. eLCDIF 控制器初始化流程CTRL 寄存器 bit31 置 1 执行模块复位延时 20ms再清零复位bit30 清零打开时钟门。DOTCLK_MODE 置 1选择 RGB DOTCLK 接口模式。设置总线宽度 24bitRGB888 未压缩格式主机模式。4. 屏幕参数封装与显存规划定义屏幕参数结构体存放分辨率、像素字节、H/V 时序前肩、后肩、脉冲宽度。帧缓冲区起始地址设置为0x89000000避开程序代码段、栈防止覆盖程序。五、寄存器细节、乒乓缓存与调试踩坑1. eLCDIF 关键视频寄存器Transfer Count 发送计数寄存器包含 V count 垂直计数、H count 水平计数写入时需要移位组合宽度高度。Buffer 地址寄存器Current Buffer 当前帧缓存Next Buffer 下一帧缓存单缓冲模式两者指向同一内存地址。VD Control 0~4 视频控制寄存器VD Control0VSYNC 输出方向、DE/PCLK 信号极性。VD Control1垂直周期 屏幕高度 VSPW VFP VBP。VD Control2行同步脉冲宽度与水平周期。VD Control3行、列等待计数脉冲宽度 后肩。VD Control4开启同步信号控制设置每行有效像素时钟数。2. 乒乓缓存双缓冲原理两块独立显存缓冲区一块交给 eLCDIF 读取用于屏幕显示CPU 在另一块缓冲区绘制下一帧图像。绘制和显示并行执行切换 Current/Next Buffer 指针完成帧切换消除画面撕裂、卡顿。3. 代码实现与常见调试问题显存操作将显存物理地址强制转为二维数组指针直接通过行列索引修改像素颜色。典型 BugPLL 无法锁定744MHz 高频配置时 PLL 锁定标志不置位需要调整时钟配置谨慎使用死循环等待锁定。宽高写反发送计数寄存器水平、垂直位置颠倒画面显示错乱。DE 信号极性配置错误导致画面黑屏 / 花屏。调试技巧硬件复位、寄存器配置后增加延时保证硬件稳定对照一份可正常运行的参考代码快速对比寄存器差异定位问题。六、学习总结RGB LCD 裸机开发分为三层时钟层Video PLL 多级分频、eLCDIF 控制器寄存器层、显存 / 图形应用层。时序参数前后肩、同步脉冲、信号极性是 LCD 驱动最容易出错的地方。乒乓缓存双缓冲是图形显示常用优化手段解决画面撕裂问题。另外区分开 LCD 显示驱动和 I2C 触摸驱动二者硬件相互独立不要混淆