图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,为液晶显示模块的彩色图像显示提供了一种新的方法。