主题:求助!SD卡被我写坏了

  共有23984人关注过本帖    
EM9260用户
1楼


求助!SD卡被我写坏了  发帖心情 Post By:2011-6-3 16:39:00   [只看该作者]

我用SD卡来保存数据,之前格式化为FAT16格式,发现频繁重启后,会导致SD卡中文件异常,具体表现是会自动出现一些名称很奇怪的文件,其中一些还无法删除。后来我格式化为了FAT32格式。

现在的问题是:我的应用需要保存大量历史数据,目前我使用CE版本的SQLLite数据库来保存,应用大概每5分钟产生16笔数据,每笔数据大约有100字节,历史数据要保存不少于3个月,每次采集后我将其循环写入到SQLLite库中。
应用运行几个月以后,SD卡就打不开了,用读卡器接在电脑上打开,会提示“驱动器 H 中的磁盘未被格式化。想现在格式化吗?”
SD卡并未损坏,格式化后还能再用。
所用SD卡是SanDisk class2的,其内部NAND Flash应该是MLC型的,也就是擦写1万次那种。

我看网上说SD卡内置了磨损平衡,但似乎也经受不住我这样的狂写。

  单帖管理 | 引用 | 回复 回到顶部
zhl
2楼


  发帖心情 Post By:2011-6-5 14:04:00   [只看该作者]

1、SD卡最好是格式化为FAT格式,也就FAT32格式。
2、磁盘扇区表被写坏这个问题的确需要花时间来测试这个问题,我们曾在EM9X60系列板卡做过SD卡文件连续读写操做上万次的测试,SD卡还是很稳定的。

  单帖管理 | 引用 | 回复 回到顶部
EM9260用户
3楼


  发帖心情 Post By:2011-7-19 17:21:00   [只看该作者]

目前优化了写入方式,改为1小时写入一次,实际效果如何,还有待测试。

  单帖管理 | 引用 | 回复 回到顶部
EM9260用户
4楼


  发帖心情 Post By:2011-8-5 10:47:00   [只看该作者]

SQLite每次事务都会自动产生journal文件,事务完成了自动删除,如果频繁写数据,FAT表不堪重负。所以现在把采集到的数据先缓存在内存中,1个小时集中写入一次。

另外要注意SQLite数据库文件大小问题,
1 要限制住数据库中记录的总条数;
2 要防止数据库碎片。碎片会导致数据库占用空间不断增大,使得SD卡的磨损平衡可用空间越来越小。虽然可以使用VACUUM来整理碎片,但整理过程中要数据大小的空闲空间。

以下情况会产生碎片:
1 在执行update语句时where条件后面的字段不是数据库表的主键,没update操作一次就会分配额外的空间,造成碎片。
2 执行update语句时某字段的新值所需存储空间比原来的大,也会造成碎片。

  单帖管理 | 引用 | 回复 回到顶部
zhl
5楼


  发帖心情 Post By:2011-8-5 12:54:00   [只看该作者]

谢谢与大家分享技术心得。

  单帖管理 | 引用 | 回复 回到顶部

返回首页

求助!SD卡被我写坏了

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: