|
本帖最后由 turf456 于 2012-1-23 16:40 编辑
我最初学习SD卡和相关只是不是为了做小车。纯属业余爱好。
学习SD卡要什么东西?
1是一张SD卡(和SDHC不同),2是和单片机相连的sd卡座(注意电压),3是WINHEX软件。
先说硬件电路:一般单片机是5V供电,而SD卡是3.3V。供电部分一般用1117-3.3之类的变压就行了。通信接口接限流电阻,是否需要上啦电阻看实际需要。剩下的按照SD卡的引脚说明接到spi接口上就行了。
需要的知识?
1,SD卡的时序和各种指令。2,FAT32文件系统,否则无法直接在电脑上读取图片,学起来比较费脑细胞。3,BMP文件的结构,比较容易。
当然大家希望找一些速成的视频教材,我没有 ,我学习SD卡和FAT32的时候就是参考时序图,相关资料和别人的范例。天天从早到晚忙了半个假期学会的。有捷径就走,别学我。
关于SD卡,如何成功初始化,如何写扇区,读扇区,网上的例子很多很详细。不过要说的是不同的SD卡的spi模式可能有点不兼容,所以有时候网上的范例是不一定好使的,一定要学会尝试自己完善它。
关于FAT32文件系统,是windows中很常用的文件系统。任何数据都要按照一定的要求写在存储器中,这样在windows中才能通过简单的双击正确读取出来。
FAT32(或者FAT)的文件结构网上也有很多资料。boot区,fat1表,fat2表,根目录,数据存储区什么的,各在哪个地址上,初始化后先读出这些地址,然后是读是写就参考SD的时序了。
比如读一个文件,可以先在根目录里找到文件名等信息,最关键的信息数据是文件从哪个簇开始和文件大小,然后进入fat表,像链表一样几个串一个。从fat表中找到相应的簇,把里面所有扇区的数据读出来,然后返回fat表看看下一组数据链接到哪个簇了,根据文件大小和簇号的标记读完整个文件。
比如写一个文件,先在fat表中找个空地方,写入一簇数据,然后接着找空地方,创建和上一簇的链接,再写入一簇数据。。。。最后在根目录里创建文件信息,比如文件名,文件时间,大小,簇号,属性等等。当然这种方法很弱智,无法覆盖已删除的文件,最好是识别已删除文件,然后覆盖掉,最大效率利用资源。其实windows的“删除文件”就是给文件加个标记而其,而文件数据并没有消失。
fat32研究明白了这些就都懂了。
最后就是bmp的文件结构了,不难,看看就会了。
当然最好的学习方法就是实践啦。就是用到上面提到的winhex软件,可以直接读取文件或者存储器的hex数据。先弄个SD卡,格式化(不要快速),然后创建或者保存几个不同的文件,在winhex中打开SD卡,看看哪类数据在什么地方,试着改改文件的数据。这样理解起来就更容易了。
对于bmp图片也如此。
最后提醒大家写整套程序要层次分明。例如:底层接口——》读写扇区——》读写fat32——》读写文件。
这是当时学习sd卡的时候做的作品:读SD卡的电子相册。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|