Mass Storage出现异常

guetcw 2012-01-06 09:38:15
我用Mass Storage的功能把Flash映射成U盘在电脑上操作文件都正常,但是在CE里只要操作一下Flash的文件就会出现异常,比如打开几张图片后就出现
Exception 'Data Abort' (4): Thread-Id=01420012(pth=8c1e3da0), Proc-Id=00400002(pprc=82619308) 'NK.EXE', VM-active=04380006(pprc=8eb2de64) 'explorer.exe'
PC=c00ef148(filesys.dll+0x0000f148) RA=c00ef104(filesys.dll+0x0000f104) SP=d040f8e8, BVA=d2731000
Exception 'Data Abort' (4): Thread-Id=01420012(pth=8c1e3da0), Proc-Id=00400002(pprc=82619308) 'NK.EXE', VM-active=04380006(pprc=8eb2de64) 'explorer.exe'
PC=c00ef148(filesys.dll+0x0000f148) RA=c00ef104(filesys.dll+0x0000f104) SP=d040fb48, BVA=d2731000
Exception 'Data Abort' (4): Thread-Id=01420012(pth=8c1e3da0), Proc-Id=00400002(pprc=82619308) 'NK.EXE', VM-active=04380006(pprc=8eb2de64) 'explorer.exe'
PC=c00ef148(filesys.dll+0x0000f148) RA=c00ef104(filesys.dll+0x0000f104) SP=d040f8e8, BVA=d2731000

原来一直用的同步(Serial_Class)没有问题,不知道大家遇到过没有
...全文
777 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guetcw 2012-01-12
  • 打赏
  • 举报
回复
问题有点明朗了,只要运行基于.NET的应用就会出现那个异常,其它的没问题怎么这么奇怪啊,从同步改到mass storage怎么会影响.NET的东西,还望大家多多指点一下啊,这么多奇怪的问题
ProEmbedded 2012-01-12
  • 打赏
  • 举报
回复
CE6的FAT系统就是用的exfat.dll吧,具体可以查查MSDN
ProEmbedded 2012-01-11
  • 打赏
  • 举报
回复
先给你讲讲mass storage的大概原理吧,

mass storage连接的时候会读取[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers\Mass_Storage_Class]下的注册表信息,"DeviceName"="DSK1:"是指定哪个盘符,"Removable"=dword:0是在PC端显示成本地磁盘还是移动磁盘。
一个完整实现的mass storage功能,修改Removable值的时候不会出现你的映射binfs或者fat的差别,两者没影响。
同时这个盘符在pc上看到后,在wince下就会消失,在wince下不能同时访问这个盘符。

微软自带的mass storage驱动,连接的时候会取DeviceName值,然后将这个dsk unmount,显示到PC端。
你这边的问题应该是BINFS作为系统的存储区本身是不能够被unmount的,你所要映射到PC端的应该是FAT区。

针对一个FLASH的FAT区映射到PC有两种思路。

1,根据三星的MLC NAND驱动,一个FLASH被分成多个DSK加载,这个可以通过修改NAND驱动来实现,BINFS是一个DSK,如果DSK1,FAT区是另一个DSK,如DSK2,将DeviceName设置成DSK2:就可以了,这样MASS STORAGE连接的时候会unmount dsk2,也就是你的FAT区。

2,修改mass storage的代码,微软的这个代码是unmount整个dsk,而一般的SLC FLASH是只有一个dsk,其中包含至少两个partition,前边的是BINFS,后边的是FAT,所要修改的是不要unmount整个dsk,而是unmount这个DSK的第二个partition,也就是FAT区,把这个partition映射到PC,同时WINCE端这个FAT区消失。

以上两种方法都可行,根据自己的情况做修改就行了。
gooogleman 2012-01-11
  • 打赏
  • 举报
回复
这个问题我mark
2416 我也要做一下这个mass storage
动态切换的。
guetcw 2012-01-11
  • 打赏
  • 举报
回复
我修改了storage的代码,在open store后加一句代码
g_hStore = OpenPartition(g_hStore, _T("Part01"));
就能成功映射FAT的那个分区,但是这样还是有异常,

在注册表中我把分区的注册表信息
"FormatExfat"=dword:1
改成 "FormatFAT"=dword:1
后第一次连上电脑的时候就不需要格式化了,直接就能打开,否则要先格式化才能打开。但是在CE的控制面板里的存储器属性里看FAT的分区属性,文件系统那里显示的是 exfat.dll,实际上我没有选EXFAT文件系统的组件,而是选FAT文件系统的组件,不知道这个异常是否跟这个有关,CE里都是这样的吗,搞过的朋友给点意见吧
guetcw 2012-01-09
  • 打赏
  • 举报
回复
我的NAND分了两个区,一个是BIFS,一个是FAT
注册表里
"Removable"=dword:0
的话就会映射FAT那个分区,但是显示的本地磁盘,在电脑上操作文件都很正常,在CE下打开NAND里面几个文件就异常了
如果"Removable"=dword:1
就会映射BIFS那个分区,显示的是移动磁盘,在电脑上操作不了,有什么办法让它映射FAT那个分区呢
woshi_ziyu 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 guetcw 的回复:]

我的NAND分了两个区,一个是BIFS,一个是FAT
注册表里
"Removable"=dword:0
的话就会映射FAT那个分区,但是显示的本地磁盘,在电脑上操作文件都很正常,在CE下打开NAND里面几个文件就异常了
如果"Removable"=dword:1
就会映射BIFS那个分区,显示的是移动磁盘,在电脑上操作不了,有什么办法让它映射FAT那个分区呢
[/Quote]
要改驱动呢 映射地址
guetcw 2012-01-06
  • 打赏
  • 举报
回复
注册表是这样的
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers]
"DefaultClientDriver"="Mass_Storage_Class"

[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers\Mass_Storage_Class]
"Dll"="usbmsfn.dll"
"InterfaceSubClass"=dword:06
"InterfaceProtocol"=dword:50
"DeviceName"="DSK1:"
"FriendlyName"="Mass Storage"
"idVendor"=dword:045E
"Manufacturer"="Generic Manufacturer (PROTOTYPE--Remember to change idVendor)"
"idProduct"=dword:FFFF
"Product"="Generic Mass Storage (PROTOTYPE--Remember to change idVendor)"
"bcdDevice"=dword:0
"Removable"=dword:0
"PNPThreadPrio256"=dword:63


[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class]
"Index"=dword:3

[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class\High_Capacity]
"Index"=dword:3

[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\MMC_Class]
"Index"=dword:3
woshi_ziyu 2012-01-06
  • 打赏
  • 举报
回复
或许是当作U盘之后就不能同时对FALSH操作了
woshi_ziyu 2012-01-06
  • 打赏
  • 举报
回复

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧