主题:求助!SD卡被我写坏了 共有33740人关注过本帖 |
---|
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 [只看该作者]
谢谢与大家分享技术心得。
|
|
单帖管理 | 引用 | 回复 |