1,完成了SD卡读取文本文件的内容。--完成
2,接着让SD卡读取24位bmp图片,并显示。--完成 步骤1,移植。 步骤2,调试。
调试步骤:
第一步:验证能从SD的FAT32文件系统中读取所有bmp图片数据---完成。
第二步:验证处理后的像素数据正确。---完成。
第三步:把处理完的像素数据,通过显示屏显示。--完成。
主要困难点:一开始不知道24bit bmp的图片的行末尾数据会自动补0,因为一个扫描行必须为4的倍数。
参考了2种代码。调试如下。
第一步:验证能从SD的FAT32文件系统中读取所有bmp图片数据---完成。
一开始以为读文件的内容的函数不能读图片数据。来后对比其他参考程序后,发现是可以读的,别人也在调用这个函数读图片数据呢。
复习了FAT32的文件系统,知道了apple.bmp的数据内容在2101扇区,于是让read One block直接读,但是读不出。发现在znfat.c中调用read one block读2101扇区是可以的,说明数据能读,并且读出来看了下,内容和winhex一样。但是循环读几个block后,就死机了。
于是,再往下分析 znFAT_Read_File函数,原来for(i=pfi->FileCurPos;iBytesPerSector;i++)中的指针中的数值一直在变化。把它改成
imin=pfi->FileCurPos;
imax=pArg->BytesPerSector;
for(i=imin;i
那么这段函数算是可以用了。不会循环几次就死机了。
但是因为bmp文件大于512byte。所以要循环读的。读完后都放在file_info中,但是发现读第一个512是对的,读第二个512就变成了0.后来发现原因。原来是file_info一定要定义一个范围。这样下次读的时候就可以覆盖之前的512个字节.一开始定义为UINT8 *file_info;于是循环读的时候就出问题了。改成UINT8 file_info[512];就ok了。已经证明能顺利从SD的FAT32文件系统中读取所有bmp图片数据,并且和winhex中看出的数值是一致的。
第二步:验证处理后的像素数据正确。---完成。
复习了bmp文件的格式,主要是24位bmp的格式,数据是从左下角,以行方式读到右上角的。并且一个像素由B,R,G三个字节组成。前54个字节是文件头。后面的是真正的数据值。ok,24为bmp真彩就这几个要点。于是看了看把24位转为为16位的方法。这里在调试的时候因为漏看了数据的组织方式是左下角到右上角。导致我之前一度怀疑24位转16的代码有问题。不过,转换代码中,我没有把B,G,R转为16位后再进行与操作。导致数据丢失。后来串口打印出来才看出的。
第三步:把处理完的像素数据,通过显示屏显示。--完成。
这步照理很简单啊。但是显示的图像就是很奇怪,一开始显示一条斜线。
于是我网上搜索了下,主要有2种方案,
1,一种是一个个点写入。
2,另一种是设置显示区域,然后填充数据。后来查出来。
方案1:调试后发现。
address_set(x,x,y,y);我移植过来就改了函数名称为address_set,其实,我的这个函数应该是address_set(x,y,x,y);怪不得显示一条斜线呢!
然后就是每3个字节,处理成16bit的2个字节,一点点显示出来。但是显示的图片就是不对。难道读出的数据有问题?我之前检查过每问题了。难道处理后的数据有问题,我之前检查过函数也正确。于是,把处理后的数据打印出来,与Image2LCD中处理的数据对比。发现了很奇怪,前182个像素处理的很ok,很特别的是182就是第一行数据,到第183-185这3个字节处理的结果和Image2LCD是不同的,然后发现如果放弃183.去处理184-185转为2个字节,那么就和Image2LCD一致了。然后突然先到了之前网页上看到的一句话,说一个扫描行必须为4的倍数。不是4的倍数就自动补0,这些0就是无效的像素数据了。如下图,终于发现了关键的问题。但是代码要怎么改呢?于是乎,想到了方案2的代码中,本来以为很多余的一句,我把它注释掉了。原来就是很关键的一句话。znFAT_Read_File(&FileInfo,FileInfo.FileCurOffset,270,file_info);从每行的头开始读取数据。那么就移植方案2的代码吧!一移植就成功了。
关键字:SD卡 读取bmp图片 移植调试
引用地址:
SD卡读取bmp图片移植调试完成
推荐阅读最新更新时间:2024-03-16 15:00
ST提升超高速micro-SD卡槽ESD保护芯片的灵活性
ESD和 EMI二合一芯片可支持 SD 3.0数据速率和存储容量,提升移动用户的使用体验
中国,2011年10月31日 —— 横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出新款单片整合EMI滤波与静电放电(ESD)防护两种功能的芯片,为配备SD 3.0超高速(UHS-I)micro-SD卡槽的手机、平板电脑和3G无线网卡带来独一无二的保护功能。
根据Strategy Analytics关于内置存储卡槽的手机市场预测报告,截至2013年,约5亿部手机将会内置UHS-I 兼容SD卡槽。UHS类存储卡拥有最高2 Terabyte的存储容量
[电源管理]
s3c2440上MMC/SD卡驱动的分析(一)
一、开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二、MMC/SD介绍及SDI主机控制器 首先我们来理清几个概念: MMC:(Multi Media Card)由西门子公司和首推CF的SanDisk于1997年推出的多媒体记忆卡标准。 SD:(Secure Digital Memory Card)由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制的新一代记忆卡标准,已完全兼容MMC标准。 SDIO:(Secure Digital Input and Output
[单片机]
利用MSP430在SD卡上实现FAT32文件系统
经过一周左右时间的摸索,终于明白了如何用msp30在SD卡实现FAT32文件系统,很开心~在学习的过程中,也发现一个问题,就是网上系统地讲SD卡的资料很少,而讲SDHC卡的资料则更少,所以决定写一篇博客与大家分享,由于SDHC卡大部分内容都与SD卡一样,所以下文除非是特别介绍SDHC卡,其余都会以SD卡代替SDHC卡。如果发现文中存在问题,欢迎指正,谢谢。 首先,我们先说明一下本文的主要内容,本文的主要侧重点在于利用msp430(其它单片机应该类似)驱动SD卡。驱动方式选用SPI方式,驱动成功之后,将FAT32文件系统移植过来。所以如果想要仔细学习FAT32文件系统的,可以忽略本文了,想要快速地利用单片机
[单片机]
基于Nios II 软核处理器的SD卡接口设计
0 引言 Altera公司开发的Nios II是基于可编程片上系统SOPC(System on a Programmable Chip)技术的32 位嵌入式处理器软核。Altera 公司开发的Nios II软核,可以直接放在FPGA中,它体现了把实现产品的全部单元电路集成到一个芯片之内的片上系统SOPC的思想。作为一种具有竞争力的技术,在国外已经有大量的产品使用了这种技术,在国内使用Nios II处理器进行嵌入式系统设计的开发者也越来越多,但是离大规模应用还有距离,应该得到更加广泛的关注。本文在实际的项目中需要使用Nios II来开发存储系统,对于利用Nios II来进行嵌入式系统开发,还有许多工作需要去深入研究本文在进行存储系
[单片机]
单片机spi驱动SD卡
1. 单片机spi驱动SD卡 SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。既然它有着这么多优点,那么如果将它加入到单片机应用开发系统中来,将使系统变得更加出色。这就要求对SD卡的硬件与读写时序进行研究。对于SD卡的硬件结构,在官方的文档上有很详细的介绍,如SD卡内的存储器结构、存储单元组织方式等内容。要实现对它的读写,最核心的是它的时序,笔者在经过了实际的测试后,使用51单片机成功实现了对SD卡的扇区读写,并对其读写速度进行了评估。下面先
[单片机]
STM32学习笔记9——stm32L072 SD卡程序移植记录
项目使用stm32L072,需要将采样的数据保存到SD卡中。SD卡程序参考ST公司的官方STM32L073Z_EVAL开发板的例程。需要修改的地方如下: 1、 修改stm32L073z_eval.h中SPI的管脚配置、AF配置; 2、 官方开发板使用了一片STM32L152CCT6扩展了STM32L073的IO口,并通过I2C接口连接。在SD卡例程中,扩展IO口用于检测SD卡是否连接好。我们的板子中没有设计SD卡硬件检测的功能,所以在stm32L073z_eval_sd.c的BSP_SD_Init函数中将有关SD卡detect的代码屏蔽,只保留调用SD_IO_Init函数和return。 3、 在stm320L0xx_
[单片机]
STM32下SD卡驱动详解
自己在这几个月中为了毕业设计放下了对S3C2440的学习,从而着手在STM32上的模块开发。我用STM32做的是一个有界面的MP3所以不得不用到SD卡,(当然nandflash也可以不过pcb难画不说,最主要容易坏掉)。SD卡方便快捷。 说道SD卡就会想到他的具体驱动,网上也有很多例子,但是都没这么详细说一个过程对于新手很难吃懂,当然这篇对于做过的同学来说没有什么作用,现在来具体分析一下吧。 我们所说的SD卡只是闪存的一种其全称是Secure Digital,意为 安全数码 ,是由日本两大电器集团松下电器和东芝联手SanDisk共同推出的,于1999年8月首次发布。常见的闪存有:SD卡、CF卡、XD卡、MMC卡、SM卡、Min
[单片机]
AVR的SD卡接口程序
SD卡接口程序/*****************************************************/ /* SD Code for M32L */ /* By pasyong */ /* 2006-4 */ /* Base ICC6.31A */ /************************************************************/ #include iom32v.h #include macros.h #include "1011.h" #define uchar unsigned char #de
[单片机]