1 引 言
TFT-LCD因其厚度薄且画面质量优异,可以实现信息的高速度、高亮度及高对比度显示,已广泛应用于图像显示系统中。虽然TFT-LCD具有良好的显示性能,但TFT-LCD的驱动信号非常复杂,同时外围的控制单元需要处理的数据量非常大,以一个分辨率为640×480的彩色TFT-LCD为例,显示一幅彩色图像就需要处理900kbyte的数据量,这对于传统的单片机等处理器显得无能为力。由于图像数据量大,目前图像大都采用压缩后再存储,其中JPEG (Joint PhotographicExperts Group)格式的压缩图像应用最为广泛。
为了解决图像等大容量数据在TFT-LCD显示屏上的应用,本文提出了一种基于ARM9处理器S3C2440X的彩色液晶显示模块。模块能够实现对字符及彩色RGB格式图像的显示,同时还可以显示JPEG格式的图像。由于液晶显示屏只能接收RGB格式的图像数据,为了实现对JPEG格式的图像显示,必须对压缩图像进行解压缩,JPEG格式图像的解码功能在ARM9处理器上实现。本文提出的方法简化了彩色TFT-LCD图像显示的设计难度,同时为JPEG格式的解码及液晶显示提供了一种实现方法。液晶显示模块可以方便地与外接系统接口,实现图像显示模块的功能。
2 模块结构设计与分析
模块硬件包括4个部分:ARM9S3C2440X处理器、数据存储模块、液晶显示模块及RS232串口通信模块。模块中使用了两种非易失性闪存NAND Flash和NOR Flash。考虑到NOR Flash具有芯片内执行及可靠性高的特点,使用它来存储ARM9处理器运行的程序代码;存储容量大且高单元密度的NAND Flash用来存储海量数据,作为图像库及字符库的存储单元。SDRAM 作为外扩存储器使用。TFT-LCD LQ080V3DG01作为模块的显示屏使用。与其他外部模块通信采用RS232串口方式。
模块实现的主要功能有:JPEG 格式图像的解码;支持24bit彩色RGB图像数据及JPEG两种格式图像的显示;字符的显示;数据存储容量为64Mbyte,可以实现对图像库及字符库的更新;可以设置不同的串口波特率。模块功能框图如图1所示。
图1 模块功能框图。
2.1 ARM9嵌入式处理器S3C2440X
S3C2440X是一款基于ARM920T 内核、主频最高达400MHz、适用于嵌入式应用的RISC处理器。它支持可配置的8,16,32bit数据总线宽度。在存储器接口方面,最多可以扩展6个通道的ROM 或RAM 存储器,以及2 个通道的SDRAM,同时它还支持NAND Flash、NORFlash存储器扩展。
它内部的ARM920T 内核具有高速微控制器总线(AMBA BUS)结构及哈佛结构的高速缓冲存储器(Cache),高速缓冲分别是16kbyte程序及16kbyte数据存储器,使其具有良好的高速性能[3];具有丰富的外围设备,包括LCD控制器、UART、USB、SD 及SPI等接口,可以满足不同的设计要求。
2.1.1 LCD控制器
S3C2440X内部LCD控制器接口支持STNLCD及TFT-LCD的无缝连接,它支持单色、调色板彩色及24bit真彩色的显示。根据不同的设计要求,通过程序编程可以实现相应的LCD分辨率,数据格式及帧频等设置,从而满足各种类型的LCD模块。S3C2440XLCD控制器用来传输视频数据VD [23:0],同时产生相应的控制信号VSYNC、HSYNC、VDEN及LEND,时序图如图1所示。实现LCD 控制器功能的关键是根据LCD时序的要求,合理配置控制器寄存器。
图2 TFT-LCD时序图。[!--empirenews.page--]
图1中的信号定义如下:
VSYNC:LCD控制器和LCD之间的帧同步信号,高电平有效时表示一帧图像的起始。
HSYNC:行同步信号,由水平有效像素的大小决定。
VCLK:LCD时钟信号,在一个时钟周期内数据送入LCD移位寄存器内。
VDEN:数据使能信号,高电平表示数据有效。
LEND:行结束信号。
VD[23:0]:RGB数据信号线。对于24bitTFT-LCD,R、G、B各占8位;而对于16bit TFT屏有两种方式:5∶6∶5及5∶5∶5+1,使用时需要注意要与相应TFT-LCD的信号相一致。
2.1.2 数据存储模块
NAND Flash是一种固态内存,与EEPROM相比,具有读写速度快的优势;与SRAM 相比,具有非易失性等优势。图像尤其是彩色图像数据量大,因此需要考虑使用大容量的存储器来存储图像数据。另外,考虑到断电后数据的非易失性,因此选择NAND Flash作为存储器件。
数据存储单元NAND Flash包括图像库及字符库,其中字符库存储容量是8Mbyte,图像库存储容量是56Mbyte。模块选用NAND FlashK9F1216U0A作为图像的存储器件,它的容量大小为64M×8bit,其中每页是(512+16)byte,块大小是(16k+512)byte;随机读取一页数据的最大时间是12μs,而向NAND Flash写入一页数据的典型时间是200μs。以分辨率为640×480的RGB 彩色图像为例,图像数据大小是900byte,因此将此图像写入Flash的最大时间是341μs,然后将此图像从Flash读出的最长时间是21μs。
以分辨率为640×480的RGB格式彩色图像为例,56Mbyte的图像存储容量可以存储62幅图像,完全可以满足大容量存储的要求。在存储图像数据的编程过程中,由于NAND Flash是以页为单元进行数据存储,这就意味着一幅图像需要占用多个页的存储空间。需要注意的是,由于NAND Flash器件存在坏块单元,而且坏块是随机分布的,因此需要对坏块进行标记处理,对它们标记为不可用,这样就避免了由于坏块单元引起的数据存储错误。
2.1.3 JPEG图像解码
JPEG是一种目前广泛使用的静态图像压缩标准,它以其显着的压缩效率和较低的图像质量损失获得了广泛应用,成为国际通用的标准。
JPEG的目的是提供一种使用于各种连续色调图像的压缩方法,并且能够易于硬件实现,具有良好的性价比。为了满足各种应用需求,它提供了两种压缩编码技术:基于离散余弦变换(DCT)的有损压缩编码和基于DPCM 的无损编码,这两种编码方式可以采用4种操作模式来实现:顺序编码、累进编码、无损编码及层次编码。其中基于DCT变换的顺序编码方式最常用。
以基于离散余弦变换的顺序编码方式来说明JPEG图像解码的过程。图像解码是压缩编码的反过程,解码的码流起始位置标志信息,解码器根据JPEG压缩图像的文件头信息,得到原始图像的基本信息。得到原始图像信息后,解码器根据JPEG文件中的霍夫曼表进行解码。由于熵编码过程中使用霍夫曼编码分别对DC及AC系数进行编码,其中系数编码的顺序采用zig-zag序列,因此实现解码时需要考虑这些相关实现过程,详细信息请参考相关文献[5]。根据量化系数表,经霍夫曼解码后的系数与相应的量化值进行乘积,然后进行反余弦变换。需要注意的是,JPEG 图像使用的是YCrCb模型,其中Y 是亮度分量,Cr及Cb是色度分量,需要将系数的色彩空间从YCrCb转换到RGB空间,最终得到图像的R、G、B 数据值,这些数据才可以在液晶显示屏上显示。
根据JPEG 文件交换格式提供的资料文献[6],YCrCb色彩空间到RGB色彩空间的转换见公式(1)。
考虑到延时应尽量小,程序在NOR Flash存储器上执行效率低。图像解码算法中应合理安排在ARM9中的内存分配。设计过程中将频繁访问的程序代码及数据搬运到ARM9内部高速缓冲存储器中,从而提高编码的效率。由于顺序编码方式最常用,它通常称为JPEG 基本系统(BaseLine)。设计过程中,实现的JPEG 图像解码支持顺序编码,完全可以满足应用要求。
2.2 TFT-LCD LQ080V3DG01
实验中选用LQ080V3DG01彩色液晶显示模块测试设计效果。LQ080V3DG01 由彩色TFT-LCD面板、驱动电路、控制电路、供电电路及背光单元组成。它支持最大分辨率为640×480的图形和文字显示,数据输入格式为18bit,其中红绿蓝各占6bit,提供的颜色共262 144种。
TFT-LCD需要+3。3V或+5V供电电压,背光需要交流电源供电。输入的控制信号有4个:帧同步信号VSYNC、行同步信号HSYNC、数据使能信号ENAB及时钟信号CK。数据线宽度是18bit,红绿蓝各占6bit,分别是R [0∶5]、G [0∶5]及B [0∶5],颜色配置信息如表1所示。
表1 输入数据信号及颜色显示配置
LQ080V3DG01液晶显示屏的数据线共18bit,对于24bit的彩色图像以及24bit的ARM9S3C2440X的TFT-LCD控制器而言,其接口并不兼容。设计中为了适应LQ080V3DG01液晶显示屏的接口,分别舍弃了8bit R、G、B 值的低2位,测试结果显示效果良好。如果选用的TFTLCD是24bit数据线,则可以直接连接到LCD控制器相应的数据线。
3 模块设计方案的实现
3.1 工作流程
在ARM9执行初始化后,主程序就等待外部模块通过串口发送指令。外接模块通过RS232串口与本模块通信,根据通信协议发送不同的指令,实现相应的功能。在约定的串口波特率下,通信协议如下:显示图像时首先发送指令0x55,然后再发送图像在图像库中的编号;显示字符时首先发送指令0x56,然后再发送字符在字符库中的编号,最后发送字符在液晶屏上显示的横轴及纵轴坐标。需要说明的是,在NAND Flash存储空间中的图像库及字符库是自己定义的,可以重新下载更新。软件流程图如图3示。
图3 软件流程图
3.2 彩色图像显示
所设计的模块支持24bit彩色RGB及JPEG两种格式的图像显示。因为像素数据可以直接送到液晶接口控制模块显示,而JPEG格式的图像则必须经过解码之后才能显示,所以图像在显示前,需要先判断图像数据是什么格式。如果图像数据是JPEG格式,则必须经过图像解码,解码后得到原始彩色图像的像素数据值R、G、B,这些数据经过显示控制单元送到液晶屏显示。如果图像是原始图像的数据,则可以直接送到液晶控制模块进行显示。
由于要显示的图像存储在NAND Flash的图像库存储空间,所以在将彩色图像输出到TFT-LCD显示时,首先要将需要显示的图像数据从NAND Flash中读取出来,得到一幅24bit彩色图像的完整原始图像数据。原始图像数据中,一个像素占用3byte,其中R、G、B 各占1byte。将数据输出给TFT-LCD 显示前,需要根据LCD接收的数据格式将图像数据进行转换,然后才能输出显示,图像数据按照从上到下,自左向右的顺序输出[9]。同样,将TFT-LCD按照相同的顺序进行扫描,最终完成整幅图像的显示。
NAND Flash存储着大量的图像数据,为了区分不同的图像数据,将相应的图像输出显示,模块采用RS232串口与外界通信。通过发送不同的指令,可以将在NAND Flash上存储的相应图像读取出来,输出在TFT-LCD上,最终实现各种彩色图像的显示。
3.3 字符显示
字符采用16×16点阵,由于每个像素占用3byte,所以每个字符占用768byte。可以将常用字符存储在NAND Flash中,作为字符库使用,需要时调用即可。当显示字符时,首先要确认相应字符在存储器中的位置,然后根据地址信息对相应字符进行操作,最后根据字符要显示的位置在液晶屏上输出,实现字符在液晶屏上的显示。
实验过程中为字符库分配8Mbyte空间,可以存储10 922个字符。字符库还可以实现更新,只需将存储器NAND Flash对应地址空间的内容替换即可。
4 实验结果
为了测试模块的正确性,将一幅分辨率为640×480的图像"AutumnLeaves"下载到NANDFlash存储器中,它在图像库中的编号为0x01。
根据串口通信协议,向液晶显示模块发送指令0x55,然后再发送图像在图像库中的编号0x01。
显示模块接收到指令后,液晶屏显示效果如图4所示。测试结果表明,模块工作正常,发送显示其他图像及字符的指令同样效果良好,运行可靠,达到了模块方案设计要求。
图4 液晶屏显示图像测试结果。
5 结 论
提出了一种基于ARM9的24bit彩色TFTLCD液晶显示模块设计方案。图像及字符库存储在NAND Flash固态闪存中,保证了图像及字符的实时显示,同时还能实现对图像库及字符库的更新。提供了串口通信方式,可以方便地实现与其他外接系统交互。该模块设计简化了彩色TFT-LCD显示图像的设计难度,提高了开发效能。模块可以兼容不同类型的彩色TFT-LCD,为液晶显示模块的彩色图像显示提供了一种新的方法。