aaa1982 发表于 2009-11-7 08:38:41

关于带文件系统的SD卡操作怎么解决热插拔的问题

各位好:

用SD+Fat16面临一个问题

往SD卡里面写数据都是这么一个顺序

1)修改SD卡上面的fat表部分
2)修改SD卡上面的文件夹信息部分
3)向SD卡填入数据

但是一旦在操作过程中拔除卡,就会造成以下问题

1)Fat表修改了,但是实际没有数据,造成SD卡空间的浪费

2)文件夹的信息修改了,但是没有数据,造成数据的不连续甚至错位

3)其他一些还没有想到的问题

不知道各位在遇到这个问题上面是怎么解决的,能提供一下大概的思路让我参考以下么

感谢

aaa1982

zeropower 发表于 2009-11-7 09:29:28

你把顺序反过来就可以了!!
1)向SD卡填入数据
2)修改SD卡上面的文件夹信息部分
3)修改SD卡上面的fat表部分

如果在没写完前被拔掉!数据可以重写,FAT表的写入是要确保的,所以最好把FAT备份区也用上!
两部分FAT都有相同的内容才确定其完整!

aaa1982 发表于 2009-11-7 19:38:07

感谢楼上的回复,

在请教一个问题,一般SD卡的写数据速度有多快,我觉得这主要是由向SD卡在写入时候的wait busy时间决定的。

我测了一下,SPI模式,4Mbit/s的速度,写入512字节居然需要将近3ms时间,这样在加上文件系统的读写开销。时间就很长了

我用zlg提供的模板加上fat16的文件系统(上网找的一个例子),居然一个像文件系统下的文件写数据的函数需要将近20ms左右的时间(512字节)。

感觉时间太长了,不知道各位侧过没有SD卡的写入时间,大概是多少?

另外谁能推荐一个效率高一点的fat文件系统么?

感谢各位。


zeropower 一块冰

您好,我也觉得把数据放在最前面比较合适,但是我觉得dir的信息也不能写错,如果把dir的数据进行了更新(最主要是更新了file size)但是fat没有机会更

新。这样再写得时候也要出错误。

是不是还需要根据fat的内容和file size 的大小进行比较,从而判断是否在更新dir以后,更新fat之前出现了拔卡的问题?


感谢 zeropower 一块冰

aaa1982 发表于 2009-11-9 16:21:39

又测了一下,4MSPI 写入512个字节居然用了10ms,而且50m时钟和8m时钟基本看不出区别,可见都是Sd卡的写入时间,这样说什么也太慢了吧。请教各位指点一下。

Alexkey 发表于 2009-11-9 17:24:44

zlg的代码就不要用了,学习一下还可以,不实用

aaa1982 发表于 2009-11-9 21:51:12

LS的有什么好的建议么?


我感觉不是zlg代码的问题,关键是SD卡本身写入速度的问题,我用micorSD卡4M SPI写入512字节需要8ms,而且发现改变SPI速度,改变处理器速度基本上没有什么太大的影响,从而判断是SD卡本身写入速度的问题

micro SD卡本身写入速度有没有什么标准,不会这么慢吧

用过的高手出来指点一下吧。

另外,我觉得zlgSD卡的程序写的还是不错的,虽然他自己的人说有bug在里面,但是我一个也没找到。用过的可以一起讨论一下。

qingzhou 发表于 2009-11-9 22:02:38

mark

aaa1982 发表于 2009-11-12 21:43:44

顶上去,zeropower 一块冰能在帮着解释一下么?感谢

snglnc 发表于 2010-3-10 14:36:55

mark

yaya001 发表于 2010-3-10 14:53:35

mark

minux 发表于 2010-3-10 20:37:42

这个问题应该用日志文件系统来解决…… FAT就不是为这个设计的……

a__________a 发表于 2010-3-10 23:55:30

可能换个卡就好了吧,再说没事拔卡干啥啊

songric 发表于 2012-12-3 10:19:48

也在看SD热插拔的问题,关注中

xyz543 发表于 2012-12-3 11:01:39

这 SD 卡的热插拔是一个问题,而装置正在往 SD 卡写入数据时掉电也是另一个问题,这些都会造成 SD 卡上的资料流失..
页: [1]
查看完整版本: 关于带文件系统的SD卡操作怎么解决热插拔的问题