主題:求助!SD卡被我寫壞了 共有38438人關注過本帖 |
---|
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 [只看該作者]
謝謝與大家分享技術心得。
|
|
單帖管理 | 引用 | 回復 |