Icyan 发表于 2010-4-15 09:02:15

最近作430加SD卡的疑问—无缝存储?

关于SD卡的无缝存储问题……
不知道,标题是否可以这样写

众所周知, SD卡最小存储单位是一个扇区(512字节)

假设我一组数据10个字节,这样一个扇区能存51组数据,然后空下2个字节

如果我一组数据20个字节,这样一个扇区能存25组数据,然后空下12个字节

如此看来,空间的浪费很严重,可不可以将这剩余的空间都利用上,实现‘无缝存储呢’?

目前想到 两种方法:

1、一组数据一组数据的存储,我有了一组数据,就在当前扇区的最后一个数据位补上新的数据,类似于写FAT表的操作,但根据SD卡原理,就算一次写一个字节,SD卡还是一次读写一个扇区的,所以你只能读出一个扇区,然后根据数据项数在扇区内的索引,把新数据覆盖上去,然后再让SD卡将这一扇区数据写回去。这样来算就是每写一组数据,就进行了一次读/写扇区的操作,比较浪费时间,效率较低

2、采用双缓冲技术,用空间弥补时间,建立2个512得缓存,数据在一个缓存存储满后,立即向另一个缓存写入,然后将第一个缓存数据写入SD卡中,新数据存入第二个缓存,第二个缓存存满后,立即向第一个缓存写入,并把第二个缓存的数据写入SD卡中……以次类推,实现了数据的无缝存储。不过两个缓存1K得空间,对于MCU来说有点太大了吧

本人愚钝,只想到这么两种简单的方法,请教高人是否还有其他 更加可行或者成熟的技术呢

linhai 发表于 2010-5-31 20:51:30

我想问一下,你用430将SD卡驱动起来了啊吗

oet-oet 发表于 2010-6-1 09:12:56

我用的第二种方法,非常好用

gan1211 发表于 2010-6-1 15:46:30

学习

Icyan 发表于 2010-6-2 13:55:11

linhai:驱动起来了,实现了FAT、自定义等方式存储数据

oet-oet:这样做,1k是不是太大了点,况且,是否应该设置标志位,或者类似于FAT表的自定义索引,才能方便读取呢

gan1211 晨曦之剑:我也是学来的:-)

xiaohai8272 发表于 2010-6-10 21:38:52

你好,Icyan大哥,你用430时,使用了文件系统吗。

Icyan 发表于 2010-6-11 13:06:27

回复【5楼】xiaohai8272
-----------------------------------------------------------------------
用了FAT16,不过感觉不太好用,可以优化的地方还有很多,不过这个优化应该和需求联系起来吧
页: [1]
查看完整版本: 最近作430加SD卡的疑问—无缝存储?