关于wince 在读写flash时候突然掉电的问题

sinccy   2009-5-21 14:54 楼主
昨天,一应用程序员反问了这个问题

在写向flash写数据的时候,突然断电,下次再启动的时候。这个文件变成不可读写了,说是写保护了。

请问大家是否遇到这种情况了?

我看了两个类似的帖子。
http://topic.eeworld.net/u/20080616/11/C34E5388-9A67-4579-9D8A-D61E14CA713A.html
http://topic.eeworld.net/u/20080731/16/80CBBA93-B42B-4BA3-885E-433150D50009.html

感觉很相似。

我起初以为是我的flash驱动有问题,但是我拿一个老外进口的手持机尝试一样断电,也会这样。

那些老帖提到用什么大电容保持电一段时间,觉得听上去可以,但是未必可行。

问了一些网友,他们说他们的机子不会,他也没有做什么保障措施,他们说wince文件系统做了保护。咋我的就会呢?
还有windows XP 突然断电,就会重新检测硬盘才行,wince是否可以这样做做呢?又该如何实现呢?

欢迎大家指点。

回复评论 (18)

那个貌似是微软的 fat 文件系统的通病了,
linux 下一般采用 jffs 文件系统,它能够较好的避免这个问题
点赞  2009-5-21 19:24
建议 LZ 将 TFAT(Transaction-Safe FAT File System) 加入, 可大大地提高 File System 的稳定性.

Paul, Chao @ Techware
点赞  2009-5-21 14:59
引用: 引用 1 楼 paul_chao 的回复:
建议 LZ 将 TFAT(Transaction-Safe FAT File System) 加入, 可大大地提高 File System 的稳定性.

Paul, Chao @ Techware


TFAT和FAT可以共存的吗?

直接选上去就可以了?这个我要看看怎么使用先。编译的DLL和FAT一样,还是要自己在reg bib文件修改的?
点赞  2009-5-21 15:10
Paul, Chao 太厉害了,帮助我不少,加分100
点赞  2009-5-21 15:10
晕,明天才能加。
点赞  2009-5-21 15:11
MSDN关于TFAT和FAT的差异, 感觉TFAT主要改进就是2个FATs 不是同时更新的,而是在操作前更新备份的FAT, 操作完成后再更新另一个FAT, 这样文件要么全部写入, 要么全部没有写入,可以防止突然掉电造成FAT表混乱.
——试试使用TFAT先!
点赞  2009-5-21 15:34
引用: 引用 6 楼 gooogleman 的回复:
MSDN关于TFAT和FAT的差异, 感觉TFAT主要改进就是2个FATs 不是同时更新的,而是在操作前更新备份的FAT, 操作完成后再更新另一个FAT, 这样文件要么全部写入, 要么全部没有写入,可以防止突然掉电造成FAT表混乱.
——试试使用TFAT先!

TFAT相比FAT好很多,不过如果你的设备使用Mass Storage的话,还是要权衡一下,使用TFAT的设备在
使用Mass Storage挂载到PC端并不能做到完全兼容。
点赞  2009-5-21 15:42
为啥一定要向某人询问?开个玩笑

产生这个问题的原因主要是由于FAT文件系统本身的问题和NandFlash的特性,本人认为改善这个问题有几个方案,第一个保证供电状态,第二个就是用TFAT,不过TFAT WinXP不认,好知为之。
点赞  2009-5-21 16:31
引用: 引用 9 楼 xbsmail 的回复:
为啥一定要向某人询问?开个玩笑

产生这个问题的原因主要是由于FAT文件系统本身的问题和NandFlash的特性,本人认为改善这个问题有几个方案,第一个保证供电状态,第二个就是用TFAT,不过TFAT WinXP不认,好知为之。


一直以为断点之后文件损坏是无解的
现在才知道还有这样的方法,改天试试。
点赞  2009-5-21 16:42
引用: 引用 9 楼 xbsmail 的回复:
为啥一定要向某人询问?开个玩笑

产生这个问题的原因主要是由于FAT文件系统本身的问题和NandFlash的特性,本人认为改善这个问题有几个方案,第一个保证供电状态,第二个就是用TFAT,不过TFAT WinXP不认,好知为之。


能连上同步软件即可,不管那么多。
点赞  2009-5-21 16:54
LZ, 您 registry 有沒有加入

"Flags"=dword:00640024   ;FATFS_TFAT_ALWAYS|FATFS_FORCE_TFAT|FATFS_TRANS_DATA

這個值啊, 沒加它還是跑 FATFS 哦

Paul, Chao @ Techware
点赞  2009-5-22 10:23
“不可读写”?也无法打开了?那说明此文件已经损坏。

文件在写入时处于“写保护”,直到写完才会取消保护,允许别的程序访问。瞬间掉电,那么文件肯定无法完全写完整,保护的特性还存在,但是在FAT表中已经有对应的记录,所以能看到,只是文件实际上不完整,那么就无法真实的访问了。

文件的保护跟操作系统和文件系统有很大的关联,不是一个软件能解决的。至少FAT到NTFS都无法解决,否则XP也不需要再自检了。

WINCE也可以做,不过好像必要性不大吧。
点赞  2009-5-21 15:27
; @CESYSGEN IF CE_MODULES_TFAT
   fatfsd.dll       $(_FLATRELEASEDIR)\tfat.dll                NK  SH
   diskcache.dll    $(_FLATRELEASEDIR)\diskcache.dll           NK  SH
; @CESYSGEN ELSE
; @CESYSGEN IF CE_MODULES_FATFSD
   fatfsd.dll       $(_FLATRELEASEDIR)\fatfsd.dll                NK  SH
   diskcache.dll    $(_FLATRELEASEDIR)\diskcache.dll             NK  SH
; @CESYSGEN ENDIF
; @CESYSGEN ENDIF

——哦,选上即可。但是要注意不能FAT和TFAT都选,否则FAT会覆盖掉TFAT的。
点赞  2009-5-21 15:44
现在编译完了,你们意思不能在PC用同步软件看?但是我现在可以啊。
点赞  2009-5-21 16:56
TFAT只解决了一部分问题,换上MLC试试,包死的挺挺的。
XP认肯定是没问题的,不过TFAT被FAT写过以后,就没有TFAT特性了。要完全支持,安装补丁包吧。
点赞  2009-5-21 17:42
引用: 引用 13 楼 clementzhao 的回复:
TFAT只解决了一部分问题,换上MLC试试,包死的挺挺的。
XP认肯定是没问题的,不过TFAT被FAT写过以后,就没有TFAT特性了。要完全支持,安装补丁包吧。


我更新了2008 和2007全年的补丁了。
点赞  2009-5-21 18:55
引用: 引用 14 楼 wogoyixikexie_gliet 的回复:
引用 13 楼 clementzhao 的回复:
TFAT只解决了一部分问题,换上MLC试试,包死的挺挺的。
XP认肯定是没问题的,不过TFAT被FAT写过以后,就没有TFAT特性了。要完全支持,安装补丁包吧。


我更新了2008 和2007全年的补丁了。


extfat的补丁啊,别理解错了
点赞  2009-5-22 08:49
引用: 引用 15 楼 morris88 的回复:
那个貌似是微软的 fat 文件系统的通病了,
linux 下一般采用 jffs 文件系统,它能够较好的避免这个问题


汗,研究过再讨论好不。jffs主要针对nor,yaffs才是nand。你能想象开发的东西用yaffs,插上windows却识别不出来吗。技术是技术,产品是产品。ExFAT和yaffs无法相提并论。
点赞  2009-5-22 08:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复