当前位置:首页 > 消费电子 > 消费电子
[导读]引言 目前,对于图片解码器的研究主要是针对PC环境,设计工作只是在原有基础上的升级,对系统和硬件的考虑较少,不能在嵌入式系统中直接实现。本文设计了一种嵌入式图片解码器。通过FatFs文件系统识别图片文件的格

引言

目前,对于图片解码器的研究主要是针对PC环境,设计工作只是在原有基础上的升级,对系统和硬件的考虑较少,不能在嵌入式系统中直接实现。本文设计了一种嵌入式图片解码器。通过FatFs文件系统识别图片文件的格式,调用相应的格式解码单元实现图像重构,并在TFT液晶显示器上进行显示。

1  系统硬件设计

系统的核心CPU采用LM3S8962,具有丰富的外围接口以及多种片内的硬件接口功能(如UART、SPI、I2C、PWM等)。整个系统的硬件电路包括SD卡电路、TFT液晶显示电路、独立按键电路。

1.1  SD卡电路

SD卡有两种工作模式,即SD和SPI模式。由于LM3S8962具有SPI接口,为此该嵌入式系统采用SPI模式。SD卡电路如图1所示。 SD卡的信号检测线CARD_INSERT接CPU的PG0端口,CARD_WP检测卡写保护接CPU的PE2。SD卡的供电电路采用P型MOS管 2SJ355的可控电路,由CARD_POWER跳接CPU的PG1脚进行控制。片选线CARD_CS接CPU的PA3。时钟信号CARD_SCK接 CPU的PA2。SPI主机输出从机输入CARD_MOSI、主机输入从机输出CARD_MISO分别接CPU的PA5、PA4。

图1  SD卡电路

1.2  TFT液晶显示电路及独立按键电路

TFT液晶显示电路中,显示器的数据线D0~D7接CPU的PB0~PB7,地址线A0~A7接CPU的PC0~PC7。TFT背面板LED+、TFT驱动电源都采用3.3 V供电。独立按键为CPU的PD0~PD3口,当按键被按下时,CPU检测到的引脚为低电平。

2  软件设计

为使整个系统正常读取SD卡的数据文件和目录,需再创建一个可被Windows操作系统认知的文件系统。考虑到兼容性和方便性,本设计在 μC/OSII操作系统的基础上移植了一种小型嵌入式文件系统FatFs。该文件系统具有支持多种操作系统、易于移植和存储速度快的特点。

2.1  SD卡驱动设计

SD卡驱动不但需要完成SD卡控制器中相应寄存器的设置和向SD卡发送命令,还要实现SD卡的初始化、读写等操作。目的是为其上层提供相应的功能函数,屏蔽直接对硬件的具体操作。SD卡的驱动使用了ZLG/SD的MMC/SD的软件包。软件包中提供一些常用的API函数,只需调用相关的API 函数就可以实现对SD卡的访问,其中包括SD_Initialize(初始化SD卡)、SD_ReadBlock(读SD卡的一个块)、 SD_WriteBlock(写SD卡的一个块)、SD_EraseBlock(擦除SD卡的多个块)等。

2.2  FatFs文件系统设计

FatFs是一个开源的文件管理系统,常用于小型嵌入式系统中实现文件系统,支持FAT12、FAT16、FAT32,遵循ANSI C标准,不依赖于硬件平台。对FatFs的移植,首先需要定义数据类型并与CPU.H的数据类型匹配;其次,使FatFs中的底层函数直接调用 ZLG/SD软件包的函数。例如:

DRESULT  disk_read (BYTE  drv, BYTE  *buff, DWORD  sector, BYTE  count){
if(count==1){
SD_ReadBlock (sector, buff);//读取SD卡的一个块,调用SD_ReadBlock
}
else{
SD_ReadMultiBlock (sector, count, buff);//读取SD卡的多个块,调用SD_ReadMultiBlock
}
return FALSE;
}

由于篇幅有限,底层函数调用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个部分组成:位图文件头(bitmapfile header)、位图信息头(bitmapinformation 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/OSII操作系统进行任务管理。以任务Task_BMP为例,对24位真彩色BMP位图的显示进行测试,程序如下:

Task_BMP{
f_mount(0, &fs);
res = f_open(&fsrc, "ab.BMP", FA_OPEN_EXISTING | FA_READ);
res = f_read(&fsrc, &bmp, sizeof(bmp), &br);
if((bmp.pic_head[0]=='B')&&(bmp.pic_head[1]=='M')){//用文件头判断是否为BMP文件
res= f_lseek(&fsrc,((bmp.pic_data_address_h<<16)|bmp.pic_data_address_l));//采用了Windows的BMP格式,BMP原点在左下角
for(tx= bmp.pic_h_l;tx>0;tx--){
f_read(&fsrc, buffer, (bmp.pic_w_l)*3, &br);
for(ty=0;ty<bmp.pic_w_l;ty++){
r_data = *(ty*3 +2+buffer);
g_data = *(ty*3 +1+buffer);
b_data = *(ty*3 +0+buffer);
if(tx<bmp.pic_h_l){
point.x = tx;
point.y = ty;
point.r = r_data;
point.g = g_data;
point.b = b_data;
pixelDraw(point.y ,point.x,RGB888ToRGB565(point.r,point.g,point.b));//24位转换成TFT支持的16位并显示
}
}
}
}
f_close(&fsrc);
}

结语

本文提出了一种嵌入式图片浏览器的设计思路,以模块化的方法完成了设计过程,可方便地根据应用需求完善解码库的设计,使其能够在实际平台上良好地运行。本设计基本达到了预期效果,虽然不能作为一种通用图片浏览器的方案,但在需要用到图片解码器的GPS、手持PDA、远程监控系统设计上仍然具有一定的参考价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2024年4月17日 /美通社/ -- 在2024 F1中国站即将拉开帷幕之际,高端全合成润滑油品牌美孚1号今日举办了品牌50周年庆祝活动。三届F1年度车手总冠军马克斯•维斯塔潘也亲临现场,共同庆祝这一里程...

关键字: BSP 汽车制造 行业标准 产品系列

北京2024年4月17日 /美通社/ -- 2024年4月13日,由北京康盟慈善基金会主办的"县域诊疗,规范同行"——肿瘤诊疗学术巡讲项目首站在广州隆重召开。本次会议邀请全国多位肺癌领域专家和县域同道...

关键字: AI技术 医疗服务 BSP 互联网

海口2024年4月16日 /美通社/ -- 4月14日,在中法建交60周年之际,科学护肤先锋品牌Galenic法国科兰黎受邀入驻第四届中国国际消费品博览会(以下简称"消博会")法国馆。Galenic法...

关键字: NI IC BSP ACTIVE

上海2024年4月17日 /美通社/ -- 每年4月17日是世界血友病日。今年,世界血友病日以"认识出血性疾病,积极预防和治疗"为主题,呼吁关注所有出血性疾病,提升科学认知,提高规范化诊疗水平,让每一位出血性疾病患者享有...

关键字: VII 动力学 软件 BSP

伦敦2024年4月16日 /美通社/ -- ATFX宣布任命Siju Daniel为首席商务官。Siju在金融服务行业拥有丰富的经验和专业知识,曾在全球各地的高管职位上工作了19年以上。Siju之前担任FXCM首席商务官...

关键字: NI AN SI BSP

在这篇文章中,小编将为大家带来浏览器缓存的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 浏览器 缓存 浏览器缓存

为增进大家对浏览器缓存的认识,本文将对浏览器缓存的清空方法以及清空浏览器缓存时需要注意的事项予以介绍。

关键字: 浏览器 指数 缓存

浏览器缓存是计算机存储技术中的一种机制,主要用于临时存储网页资源(如图片、脚本、样式表等),以便在用户再次访问相同网站时能够快速加载页面内容,提高浏览速度。然而,随着时间的推移,缓存中的数据可能会过期或导致网站显示不正常...

关键字: 浏览器 缓存清除

常州2023年9月25日 /美通社/ -- 9月23日,由江苏省商务厅指导,世界中餐业联合会、常州市人民政府主办的"第三届中华节气菜大会暨首届江南美食节"在江苏常州开幕。文化和旅游部国际交流与合作局一...

关键字: BSP 可持续发展 大赛 质量控制
关闭
关闭