概述
本文探讨了一种低成本的解决方案,用于直接驱动QVGA TFT-LCD,适用于任何没有内置LCD控制器的MCU微控制器。很多ARM内核MCU拥有一个嵌入式FSMC(灵活的静态存储控制器),它可以与内置的DMA(直接存储器访问)控制器一起使用,以实现对TFT-LCD的直接驱动。
这种低成本的解决方案非常适合数字相框、独立信息显示器和静态广告面板等应用。 本文描述了如何使用MCU作为LCD控制器来驱动一个与FSMC接口的QVGA 3.5英寸TFT面板。通过这种解决方案可以实现的优化意味着只需要1%的CPU负载就能显示静态图像。
1 MCU微控制器的QVGA TFT-LCD直接驱动
MCU微控制器内嵌了灵活的静态存储控制器(FSMC),用于与NAND、NOR、SRAM和PSRAM等外部存储器进行交互。此外,这些微控制器还配备了大量通用输入/输出(I/O)引脚,结合FSMC可以作为低成本的TFT-LCD控制器,适用于经济型显示器:
● FSMC的16位数据总线可以方便地与TFT-LCD面板的565 RGB格式接口相连(在565 RGB格式中,红色占5位,绿色占6位,蓝色占5位)。
● 可以使用外部存储器作为图像源以及TFT-LCD刷新时的帧缓冲区。
● 通用I/O引脚能够提供LCD所需的同步逻辑信号。
1.1 MCU QVGA TFT-LCD直接驱动的工作原理
无内置控制器的TFT-LCD面板有多种数据线配置,如16位、18位或24位RGB。一个16位数据接口的TFT-LCD面板每个像素提供565格式的显示。
TFT-LCD面板的显示是通过行列结构来管理的。垂直扫描控制行数据的输出,而水平扫描控制列数据的输出。 除了不同的数据线配置外,所有TFT-LCD面板还有一些共通的数据显示管理信号:
● 帧同步信号(VSYNC)负责管理垂直扫描,并作为图像(帧)更新的同步脉冲。
● 行同步信号(HSYNC)负责管理水平线扫描,并作为行显示的同步脉冲。
● 同步信号和像素数据时钟(DCLK)共同完成数据向TFT RGB数据线的输出。
● DCLK主要作为TFT的数据有效信号。
TFT仅在DCLK的上升沿或下降沿时将数据视为有效输入,具体边沿由TFT的数据手册指定。 水平扫描构成一条显示线,而垂直扫描构建整个画面。图像的垂直和水平扫描以连续的方式进行,以每秒多帧的速率更新。
TFT还需要TFT使能信号,它主要作为芯片的使能信号,以及TFT复位信号。 为了确保显示效果的连续性,TFT信号必须与显示时序的要求同步。
图1展示了水平和垂直扫描信号的时序。
图1 QVGA TFT-LCD扫描信号
FSMC总线具有16位的数据宽度。因此,如果TFT-LCD面板采用24位RGB数据线路,那么LCD的RGB数据线路的最高位(MSBs)可以按照565格式进行连接。 图像需要在TFT-LCD上实现连续显示,这一过程可以由MCU微控制器轻松控制。 图2展示了TFT同步信号的波形图。
注:"565格式"指的是一种颜色编码方式,其中红色和蓝色各占5位,绿色占6位,用于表示每个像素的颜色。这种格式常用于需要节省带宽或存储空间的图像显示应用中。
图2. 帧同步信号的波形图
"前沿空白区"在显示技术中通常指的是在每个扫描行或帧的开始,像素数据开始传输之前的时间间隔。这个术语来源于老式电视机的扫描线,其中电子束在到达屏幕的起始点之前需要一些额外的时间来稳定下来,这个额外的时间就像进入房子前的“门廊”一样。
“后沿空白区”HSYNC脉冲之后的时间间隔,称为后缘空白期,用于准备显示屏接收新的一行数据。
图3 TFT行同步信号的波形图
- HSYNC脉冲:一个水平的脉冲,表示一行像素数据的开始。
- 前沿空白区:HSYNC脉冲之前的时间间隔,称为前缘空白期,用于电子枪或显示控制逻辑准备下一行数据。
- 有效数据:实际显示像素数据的时间段。
- 后沿空白区:HSYNC脉冲之后的时间间隔,称为后缘空白期,用于准备显示屏接收新的一行数据。
2 基于MCU的QVGA TFT-LCD驱动实现
采用MCU的TFT-LCD驱动通过FSMC的16位数据总线来实现。MCU微控制器配备了两个内部的DMA(直接存储器访问)控制器,这些控制器用于增强显示性能,从而支持更高的显示帧率。 一个外部的SRAM(静态随机存取存储器)被用作帧缓冲区,以便进行连续的图像刷新,这一过程可以通过定时器来控制。
图4. MCU TFT-LCD驱动示意图
2.1 MCU的FSMC与QVGA TFT-LCD信号接口
QVGA TFT-LCD的同步信号,包括垂直同步(VSYNC)和水平同步(HSYNC),通过MCU的通用输入输出(GPIO)引脚进行控制。
FSMC存储器接口的写使能信号采用反相配置,作为TFT像素时钟(DCLK)使用,而FSMC的片选信号则充当TFT的使能信号。
在数据传输至FSMC总线时,首先将片选信号拉低以激活TFT-LCD。随后,写使能信号也被拉低,以便在低电平状态下将16位数据传输至TFT的RGB数据线,实现单个像素的显示:
■ TFT使能信号:FSMC片选信号(PG12引脚)
■ 垂直同步信号:GPIO引脚 - PA8
■ 水平同步信号:GPIO引脚 - PC6
■ 像素时钟信号:反相配置的FSMC写使能信号 - PD5
■ 数据总线:FSMC[D0:D15]
■ SPI1接口:用于LCD的配置
2.2 图像格式与分辨率
MCU的FSMC具有16位数据总线,能够驱动一个24位的无控制器LCD模块。由于FSMC内存总线仅有16条数据线,因此接口采用的是565格式的RGB。QVGA TFT-LCD的剩余线路未被使用。为了避免MCU进行数据格式转换的开销,图像以565格式存储在外部SRAM中。
从性能角度考虑,内存中转换后的图像可用性有助于加快数据传输至TFT接口的速度,从而支持更快的图像刷新率。
● 像素数据大小 = 16位 = 2字节
● QVGA TFT图像存储大小 = 320 x 240 x 2 = 153600字节
2.3 图像来源
565格式的图像被编程进NOR存储器中。
首先,将两张图像从NOR存储器传输到外部的板载SRAM中。外部SRAM充当TFT-LCD的帧刷新缓冲区。
为了实现动态横幅显示,SRAM帧缓冲区在运行模式下会用来自NOR存储器的新图像进行更新。这种方法用于维持TFT-LCD控制器的精确工作模式。
板载NOR存储器中包含了用于在LCD上显示的预编程图像。SRAM的双缓冲区管理允许在运行模式下更新源数据。
2.4 MCU QVGA LCD-TFT直接驱动流程
为了在无控制器的TFT上实现静态图像显示,图像帧至少需要以每秒15帧的速率刷新。根据TFT-LCD模块的技术规格书,执行单帧的垂直和水平扫描。
QVGA-LCD模块单帧显示需要320x240像素的数据量。
在TFT上,通过垂直扫描240行(每行320像素)来显示一帧图像。 除了数据扫描外,还需要对TFT进行虚拟数据写入,以实现所需的水平和垂直前后缘空白期值。这些值可在TFT的数据手册中找到。
虚拟数据写入包括向TFT RGB线路写入零数据。
● DMA1通道1用于后缘空白期数据传输
● DMA1通道2用于活动数据传输
● DMA1通道3用于前缘空白期数据传输
FSMC被配置为异步模式,并在模式1下操作,这是在配置SRAM存储器类型时所选择的默认模式。
图5和图6展示了在SRAM模式1下,FSMC进行异步读写事务的一个16位数据像素的过程。
图5 模式1—SRAM读访问
图6 模式1—SRAM写数据
DMA通道用于刷新TFT-LCD上的图像,这减轻了CPU的数据传输任务。
DMA配置为将外部SRAM内存作为数据源,将LCD作为目标地址。利用DMA传输完成中断来切换VSYNC和HSYNC同步信号,以便进行新帧的传输。
一个定时器(TIM3)用于控制显示的帧率。 当DMA在FSMC总线上写数据时,FSMC会生成TFT使能信号、TFT像素时钟(DCLK),并将数据写入TFT的RGB数据线。
这样,MCU就能为无控制器的TFT LCD模块管理整个图像显示过程。 图7和图8展示了TFT-LCD单帧显示和水平线显示的流程图。
图7:TFT-LCD单帧显示流程图
图8:TFT-LCD单行水平显示流程图
2.4.1 显示模式
提供了两种可供选择的显示模式。MCU幻灯片播放显示模式 在此模式中,存储在SRAM缓冲区中的两张静态图像会在设定的时间间隔后在TFT-LCD上显示。用户同样可以配置超过两张的图像,并改变帧缓冲区的地址位置。此模式下,能够显示的帧率最高可达每秒40帧。
表1. MCU幻灯片播放显示模式:CPU负载与帧率
参数 | 数值 |
---|---|
DCLK(像素时钟) | 3.6兆赫兹 |
最大帧率 | 40赫兹 |
CPU负载 | 1% |
24.2 MCU横幅显示模式
在这种模式下,SRAM中的图像缓冲区动态地从NOR Flash存储器接收更新,以显示图像动画。在更新图像的过程中,利用了两个DMA通道。
表2. STM32幻灯片播放显示模式:CPU负载与帧率
参数 | 值 |
---|---|
帧率影响因素 | 由于SRAM帧缓冲区的动态更新,动画模式下的帧率较低 |
帧缓冲区更新时机 | 在一帧完整显示之后进行帧缓冲区的更新 |
注意事项 | 帧率和CPU负载的测量是在EWARM Toolchain V5.5工具链下,采用高速优化进行的。CPU频率为72MHz。 |
这段描述说明了在横幅显示模式下,由于需要动态更新SRAM中的帧缓冲区以实现动画效果,帧率会相对较低。此外,这种更新是在一帧图像完整显示之后进行的。同时,还提供了关于测量帧率和CPU负载时使用的工具链和CPU频率的额外信息。
2.5 TFT-LCD背光控制
在两种显示模式中,TFT的背光源同样通过定时器和模数转换器(ADC)通道进行控制。 定时器(TIM4)被设置为在PB6引脚上产生1千赫兹(KHz)的PWM信号输出,该信号可以用作TFT背光控制器的PWM使能信号。通过调整电位器,按键等手段,可以改变PWM使能信号的占空比,以此来控制TFT-LCD的背光亮度。