一种嵌入式SD卡图片浏览器的设计与实现

发布者:dfdiqc最新更新时间:2011-01-19 关键字:嵌入式  SD卡  图片浏览器  LM3S8962 手机看文章 扫描二维码
随时随地手机看文章

引言

    目前,对于图片解码器的研究主要是针对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

   r_data = *(ty*3 +2+buffer);

   g_data = *(ty*3 +1+buffer);

   b_data = *(ty*3 +0+buffer);

    if(tx

  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、远程监控系统设计上仍然具有一定的参考价值。

关键字:嵌入式  SD卡  图片浏览器  LM3S8962 引用地址:一种嵌入式SD卡图片浏览器的设计与实现

上一篇:基于ISD1420的高响度语音电路设计
下一篇:基于PXA27x处理器的智能手机LCD驱动电路设计

推荐阅读最新更新时间:2024-05-02 21:15

基于HMS30C7202的嵌入式车载导航系统的设计
1.前言 HMS30C7202 嵌入式微处理器是目前性价比交优秀的芯片,由于其优良的性能用于替代早期的芯片,在车辆导航方面的开发应用有着广阔的应用前景。在诸多的操作系统中,由于Windows CE 、Vxwork 等操作系统都是商业化产品,其价格高昂、源代码封闭。另外,对于上层应用开发者而言,嵌入式系统需要的是一套高度简练、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。源码开放的Linux 正好可以满足这些要求。由于嵌入式系统的应用多种多样,并且标准Linux 操作系统比较庞大,因此,需要根据实际应用对标准Linux 进行重新的移植、裁剪和配置,生成代码紧凑、代码量小的特定操作系统。 2.导航系统的硬件组成 车载导航
[单片机]
基于HMS30C7202的<font color='red'>嵌入式</font>车载导航系统的设计
基于ARM平台的嵌入式软件保护方案
      近年来,从软件到软硬件联合攻击给嵌入式系统造成严峻的安全威胁。安全性已成为嵌入式系统设计中必不可少的一部分,同时这又是一个折衷的过程,不能单靠软件来保证,而全硬件的解决方式很昂贵且不具有弹性 。很多产品开始从设计之初就从系统架构上考虑了安全性,如ARM公司的Trust Zone技术开辟了一片可信代码区,通过一个S比特来区分系统的安全状态,IBM的PowerPC中使用了多核单元宽带引擎(BE)进行安全引导和物理隔离。   需要注意的是目前使用的很多嵌入式系统都是基于没有特别设计安全机制的硬件平台。本文以原ARM处理器平台为例,通过增加1块安全协处理器,就可以实现低成本、有实效的安全保护,并且能够抵御两类比较宽泛的攻击
[嵌入式]
3M电子推出符合RoHS规范的嵌入式电容材料
3M电子推出嵌入式电容所使用的高级薄片,符合RoHS规范要求。该材料有助于OEM和PCB制造商生产空间有限的器件,如便携和军事产品。 3M嵌入式电容材料的绝缘厚度仅为8μm,每平方英寸的电容密度大于10nF,是所有嵌入式极化电容所使用材料中厚度最薄、电容值最大的。该材料可生产高速数字PCB,在简化设计的同时可提高速度。当用于多层PC板的电源和接地层时,该材料可用作印制板中共享解耦电容,从而无需使用大量分立表面封装电容。
[新品]
第五届“博创杯”全国大学生嵌入式设计大赛
  到了时间会自动提示患者个人信息和需吃药品的语音药盒;通过声音控制即能前后左右行进、并控制家电开关的智能轮椅;通过一个键盘可以控制全场多台机器的无线自主网络键盘……这是记者日前在第五届“博创杯”全国大学生嵌入式设计大赛决赛现场看到的情景。这些闪烁的奇思妙想来自于参赛的78支大中专师生队伍。   第五届“博创杯”全国大学生嵌入式设计大赛自今年3月份开赛以来,共吸引了来自全国60多所高校的180余支队伍报名参加。   长春理工大学计算机专业大三学生宋峻明和同伴一起设计了嵌入式控制肿瘤光子热疗系统。这个作品的思路来自老师的课题。宋峻明告诉记者,他们在研究中发现,光子发射出一定波长可以杀死癌细胞。于是在老师的带领下,做了大量细致的研
[嵌入式]
宏力嵌入式闪存用于指纹认证加速器
  半导体代工厂商上海宏力半导体制造有限公司(宏力半导体)日前宣布其0.22微米嵌入式闪存工艺已成功运用到日本冲电气株式会社(OKI)指纹认证加速器上。该产品可让客户轻松创建出经济、准确、高速、低功耗的指纹认证系统。它同时还具有保护指纹数据免受未经授权访问的功能,从而使得系统的安全性能更为完备。由于嵌入式闪存可存储所有的指纹模板与客户的应用程序,该芯片不需要外部存储器。   宏力半导体在闪存和嵌入式闪存技术方面具有丰富经验,在众多消费电子和汽车工业方面的产品均已进入大规模量产。该技术质量可靠、发展前景良好。宏力半导体是极少数已通过汽车工业产品生产所必需的TS16949标准认证的代工厂商之一。   宏力半导体和冲电气自2001年
[焦点新闻]
经典嵌入式系统电源设计方案解析
    本文探讨便携嵌入式系统电源设计的注意事项以及设计中应遵循的准则。这些原则对任何具有强大功能且必须以电池供电的便携嵌入式系统电源设计都是有帮助的。根据本文描述的构造模块,读者可以为特定设计选择合适的器件以及设计策略。     为电源电路规定具体的功能和架构模块并非微不足道,这些工作直接影响到电池供电系统的工作时间。电源系统架构会因嵌入式产品和应用领域的不同而各异。下图是典型便携嵌入式系统中的电源方案。     下面我们分别定义图中每个组成部分的要求。假设该产品由电池组或外接电源供电。电源路径控制器的功能是当有多个电源时,负责切换至合适的电源。在某些设计中可能需要考虑包括新兴的USB和以太网供电(PoE)等供电方式。
[电源管理]
经典<font color='red'>嵌入式</font>系统电源设计方案解析
嵌入式系统硬件抽象层的原理与实现
    摘要: 板级支持包(BSP)是嵌入式系统中常用的硬件抽象形式,是介于操作系统和硬件之间的软件层次。介绍BSP的功能和特点,并结合工作实践提出了设计BSP的一般方法;最后针对当前嵌入式系统中BSP的设计方法所面临的问题提出了可行的解决办法。     关键词: 嵌入式系统 嵌入式实时操作系统(RTOS) 硬件抽象层(HAL) 板级支持包(BSP) 随着计算机硬件技术的快速发展,出现了越来越多的便携设备和智能设备。这些设备中通常包含控制用的CPU和相应的操作系统;这类特殊的计算机系统叫做嵌入式实时系统。嵌入式实时系统以其简洁高效等特点在计算机、通信等领域中广泛使用。 由于嵌入式实时系统应用环境的特
[嵌入式]
三自由度直升机的嵌入式控制系统
      三自由度直升机可以应用于飞行器控制系统的半实物仿真试验和性能测试等场合,用以模拟横列式直升机,即倾转旋翼机的直升机状态 。其控制系统属于典型的多输入-多输出系统,具有非线性和强交叉耦合性,不易用传递函数和状态方程描述,是控制系统中较为复杂的被控对象 。实验室配备的三自由度直升机平台采用PC机+运动控制卡的控制方案,运动控制卡实时测量并控制三自由度直升机平台的飞行姿态,控制量的计算则由PC机完成 。该方案偏离了真实直升机的飞行控制系统方案。为此,本文采用嵌入式设计方法重新设计了三自由度直升机的控制系统。在此基础上,改变外接的飞行摇杆的俯仰角和横侧角,并以此为指令信号,实时控制三自由度直升机平台的飞行姿态。通过对飞行摇杆上
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved