SD卡应用总结(FatFs)

2019-04-14 21:06发布

SD卡应用总结(FatFs)

此文转载地址为:http://bbs.eeworld.com.cn/thread-377465-1-1.html 对于SD卡的应用,想必大家都尝试多。不过,很多网友恐怕只停留在实验的基础上吧。对于SD卡在文件系统下或者不带文件系统下,对SD卡的操作都是很简单的。是的,只是简单的文件读写确实不难。但是,如果每秒钟不停的写数据,而且是不停的工作,恐怕SD卡的应用就没有这么简单了吧,有时总会出现一些莫名其妙的问题。       不知道大家是否遇到过这些问题?本人开发了几个关于SD卡的项目,例如,定时拍照、定时录音等。对于这样的项目,基本上要求每一秒都在不停的写数据,而且一般一天工作好几个小时,甚至会不停的工作。在这些项目中,本人遇到太多的问题,下面把遇到的问题及解决方法与大家分享,希望有同样经验的网友一起分享一下您的经验。 问题1:根目录下文件毁坏 问题2:根目录正常,里边的文件夹毁坏 问题3:文件大小为0字节,并且无法删除 问题4:SD卡电源无法关断 问题5:临界代码 问题6:FAT表与FSInfo信息不匹配 问题7:文件毁坏 问题8:SD卡数据写入失败 问题9:SD卡热插拔  

问题1:根目录下文件毁坏。

     现象:在FatFs下可以读写文件,可在PC上无法打开目录,提示文件毁坏。     分析:通过WinHex软件打开磁盘,发现目录完全正常,但是FAT表已经毁坏,引起的原因可能是带电插拔。      解决:既然是FAT表与目录对不上,而且FAT毁坏,就是用PC修复也只会删除这些文件,对于我们的单片机来说,也没有好的解决方法,那就格式吧。

 问题2:根目录正常,里边的文件夹毁坏。

         现象:在FatFs下可以读写文件,可在PC上可以打开根目录,却无法里面的文件夹,提示文件毁坏。       分析:通过WinHex软件打开磁盘,发现目录完全正常,但是FAT表与目录数据对应不上,引起的原因可能是带电插拔。       解决:既然是FAT表与目录对不上,就是用PC修复也只会删除这些文件,对于我们的单片机来说,也没有好的解决方法,那就删除这个文件吧。

问题3:文件大小为0字节,并且无法删除。

      现象:文件已经存在,但在PC下无法删除,删除后会自动生成。      分析:既然文件已经创建,但没有内容,说明,文件打开后,写数据失败。     解决:既然文件已经新建,但没有写内容,我们可以在写内容失败后删除此文件,否则后面就删不掉了,只能格式了。

问题4:SD卡电源无法关断。

      现象:通过I/O端口控制SD卡电源,关断后SD卡电源端还有2.9V左右的电压。      分析:不管用mos管还是电源芯片,通过I/O端口控制都应该截断电源,但事实上SD卡电源叫还是有电,原因是这些电压是通过SPI的4个端口串进去了,特别是片选管脚。      解决:既然是通过这几个管脚窜进去的,那么在关掉电源之前让这几个管脚都没有电压输入就可以了。

问题5:临界代码。

       现象:在操作文件系统时有时还没有读写完成,就断电或插拔SD卡。       分析:如果没有写完数据就直接断电或插拔会导致文件或文件系统毁坏。       解决:在对文件进行写操作时进来减小临界代码的尺寸。 我们可以尽量减少操作文件的时间,如果时间不能减少,我们可以减少临界代码的尺寸,可以在代码中添加f_sync()函数。

问题6:FAT表与FSInfo信息不匹配。

现象:为了尽快操作文件,而不用通过FAT遍历就可以知道SD卡的存储状态,在FSInfo中存储了未使用簇数和空闲簇号,但某种原因导致FAT表中是实际使用情况与FSInfo中信息不匹配。 分析:FSInfo中的信息可以快速定位到SD卡中的空闲区域,如果这里的信息不正确,我们只能通过FAT表获取这些信息。如果SD卡很大,特别是应用了很大空间,从FAT表中获取这些信息非常缓慢。 解决:如果某处读写操作非常缓慢时,可能是FAT表与FSInfo中的信息不匹配,我们需要进行一次匹配以矫正FSInfo中的信息。

问题7:文件毁坏。

现象:在FatFs下写入文件时,有时由于头没有写对,有时由于尾没有写读,导致文件文件打开。     分析:通过WinHex软件打开磁盘,发现文件内容不正确,有点缺头,有的缺尾。     解决:既然是文件头或未不正确,我们可以对其头或尾进行判断,不正确的可以删除掉。

问题8:SD卡数据写入失败。

     现象:在FatFs下写入文件时,有时会一次写入不了数据,有时会连续几次写入不了数据。     分析:写入不了数据,是一些存储异常或者SD卡异常导致,例如接触不良、内存或堆栈问题等。     解决:写不了数据并不意味做SD卡有问题,我们可以让设备重启,再写入数据。      如果连续几次写不了数据就格式化SD卡,势必导致SD卡中文件内容的丢失,为了把损失将到最低,我们可以让设备重启,如果仍然无法写入数据,再格式化SD卡。

问题9:SD卡热插拔。

     现象:在很都时候,我们都需要对SD卡进行热插拔操作,而我们知道,很多文件毁坏都是这样操作导致的。     分析:在读写SD卡时,突出断电由于文件并没有操作完成,会导致文件毁坏。     解决:在对SD卡进行插拔操作时,断掉SD卡的供电。要读SD卡进行断电操作,可以有很多方法,例如,可以把SD卡锁在设备中,扒卡之前必须开锁,通过锁我们知道要对SD卡进行插拔了,所以,不能再对SD卡操作了,切断SD卡供电。在没有插入卡之前不能对SD卡供电。    当然我们还可以通过按键之类的东西实现,以保证不对SD卡带电操作即可。