新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Cortex-M3的SD卡图片浏览器

基于Cortex-M3的SD卡图片浏览器

作者: 时间:2011-03-14 来源:网络 收藏

2 软件设计
为使整个系统正常读取卡的数据文件和目录,需再创建一个可被Windows操作系统认知的文件系统。考虑到兼容性和方便性,本设计在μC/OS-II操作系统的基础上移植了一种小型嵌入式文件系统FatFs。该文件系统具有支持多种操作系统、易于移植和存储速度快的特点。
2.1 卡驱动设计
卡驱动不但需要完成SD卡控制器中相应寄存器的设置和向SD卡发送命令,还要实现SD卡的初始化、读写等操作。目的是为其上层提供相应的功能函数,屏蔽直接对硬件的具体操作。SD卡的驱动使用了ZLG/SD的MMC/SD的软件包。软件包中提供一些常用的API函数,只需调用相关的API函数就可以实现对SD卡的访问,其中包括SD_Initialize(初始化SD卡)、SD_ReadBloek(读SD卡的一个块)、SD_WriteBlock(写SD卡的一个块)、SD_EraseBlock(擦除SD卡的多个块)等。
2.2 FatFs文件系统设计
FatFs是一个开源的文件管理系统,常用于小型嵌入式系统中实现文件系统,支持FAT12、FAT16、FAT32,遵循ANSI C标准,不依赖于硬件平台。对FatFs的移植,首先需要定义数据类型并与CPU.H的数据类型匹配;其次,使FatFs中的底层函数直接调用ZLG/SD软件包的函数。例如:

b.JPG
由于篇幅有限,底层函数调用SD软件包的函数不一一列出。通过这些操作就可以调用f_open、f_read、f_write等函数来进行文件的创建、读写等操作。

3 解码分析
3.1 JPG格式的分析
JPEG专家组开发了2种基本的压缩算法、2种数据编码方法和4种编码模式。在实际应用中,绝大多数JPG图像使用的是DCT(离散余弦变换)、Huffman(哈夫曼)编码、顺序模式。JPG编码过程主要包括颜色转换、DCT变换、量化、熵编码及Huffman编码等部分。
软件实现图像解码的过程就是图像编码的逆过程,程序编程步骤如下:
①初始化FatFs文件系统,并利用f_open函数打开jpg格式的文件,用f_read从JPG格式文件中读取编码的相关信息,如图像大小、量化表、Huffman表等。
②读取最小编码单元数据,对其进行熵解码、反量化、反离散余弦变换、YCrCb模式向RGB模式转换等,并将最后的解码数据保存至Buffer或直接输出至显示。
③不断重复第②步过程,直至整张解码完毕。
3.2 BMP格式的分析
BMP(Bitmap,位图)是Windows采用的图像文件格式。位图文件由4个部分组成:位图文件头(bitmap-fileheader)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列。BMP图像的色深,常见有1、4、8、16、24和32位,分别对应单色、16色、256色、16位高彩色、24位真彩色和32位增强型真彩色。这就需要建立相应的彩色表实现位图的显示。编程实现位图显示的步骤如下;
①初始化FatFs文件系统,并BMP格式文件中读取图片编码的相关信息,如图像像素数据、图像位数、RGB值等。
②根据像素索引定位相应颜色在彩色表中的位置。文件定位到相应彩色项,取出索引对应的颜色。
③从文件读取的RGB数据,转换为TFT支持的格式(本系统选用的TFT支持RGB565格式)。在液晶上画出该像素,直到画完整个图像为止。
3.3 GIF格式的分析
一个GIF文件的结构可分为文件头(file header)、GIF数据流(GIF data stream)和文件终结器(trailer)3个部分。GIF文件格式采用了可变长度的LZW压缩编码。LZW压缩有3个重要的对象:数据流(CharStream)、编码流(CodeStream)和编译表(String Table)。在编码时,数
据流是输入对象(图像的光栅数据序列),编码流就是输出对象(存储在GIF文件的图像数据)。在解码软件实现上流程与JPG、BMP相类似,都是先调用GIF格式文件再创建进行GIF_LZW解码,最后在TFT上显示出来。需要注意的是,在解码过程中,编码流则是输入对象,数据流是输出对象。编译表是在编码和解码时都须要借助的对象。

4 模块化测试
整个系统采用模块化的设计,利用μC/OS-II操作系统进行任务管理。以任务Task_BMP为例,对24位真彩色BMP位图的显示进行测试,程序如下:

c.JPG



评论


相关推荐

技术专区

关闭