3213|8

853

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

关于 S5PV210 wince6.0 USB FUNCTION的Storage 多分区显示问题 [复制链接]

据说要修改了USB FUNCTION的Storage代码才能实现多分区显示,以前看的帖子都是Nandflash 的器件,如果是SD卡或者emmc ,怎么做呢?
先度娘一圈,看看帖子
wince5.0 nand分区问题

wince设备 MASS STORAGE问题

最新回复

这个功能我早就做好了。  详情 回复 发表于 2013-12-26 22:34
点赞 关注
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460

回复
举报

853

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
我们的设备上采用的是2G的NAND FLASH外加一个SD卡,三星提供的BSP和相关文档上说设备作为MASS STORAGE时,同时只能将其中一个作为MASS STORAGE连接到PC上,我们想连接PC的时候同时显示这两个存储空间,目前的候选方案是在应用程序上进行一些设置,进行切换选择显示不同的存储空间。我看到有些MP4也是同时只能显示一个存储空间,也是通过软件设置选择的,这是目前比较难解决的问题吗?
请问谁有没有什么好的解决办法可以同时将NAND FLASH和SD卡作为MASS STORAGE连接到PC机上呢?
谢谢!

这位哥的需求就是我所想用的方式,
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 

回复

853

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
已经基本调试成功了,目前是将NAND FLASH分成了两个盘符,在PC上可以显示这个盘符,暂时没用NAND和SD卡测试,估计问题不大。
现将所更改的内容说一下:
1、将PUBLIC驱动中transport.h的iSerialNumber设置在3,这样HOST才会向DEVICE发出读SerialNumber的命令。
    static LPCWSTR g_rgpszStrings0409[] = {
    g_RegInfo.szVendor, g_RegInfo.szProduct, L"14273211-1575-4252-9161-419514811863"
};
static UFN_STRING_SET g_rgStringSets[] = {
    0x0409, g_rgpszStrings0409, dim(g_rgpszStrings0409)
};
     L"14273211-1575-4252-9161-419514811863"就是SerialNumber,自己随便写。

2,BOT_HandleClassRequest函数中
  g_bScratch=0x1 (表示支持两个LUN(logical unit  number))

3,在STORE_Init中初始化两个Store,并且都dismount掉。

4,在CSW中有个bCBWLUN表示这个CSW命令要发给哪个LUN
(LUN 从 0开始)。可以在BOT_HandleCBW这个函数中得到截获LUN的值,
然后用BOT_ExecuteCB这个函数来执行host端发送的命令,这些命令有可能是读、写等等。
block.c中的各函数要根据不同的lun来对不同的DISK_INFO操作。

-------------------------------------------------------


照着这个试试先,不过当然要做两个fat分区先。看来又要修改一些东西了。
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

853

帖子

0

TA的资源

五彩晶圆(中级)

4
 
先给你讲讲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区消失。

以上两种方法都可行,根据自己的情况做修改就行了。


http://bbs.csdn.net/topics/380135563
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

853

帖子

0

TA的资源

五彩晶圆(中级)

5
 
[UFNPDD] USB_POWER : D4
Serial Number[00000000-0000-0000-0000-00000000]
                                               [UFNPDD] USB_POWER : D0 IN
[UFNPDD] USB_POWER : D0 OUT
[UFNPDD] USB Mass Storage Function Class Enabled
[UFNPDD] USB_POWER : D0 IN
[UFNPDD] USB_POWER : D0 OUT
[PWC_PM:INFO] Check LP Mode 1, 1, 0, 0, 0, 0, 0
Entering LP_NORMAL

[PWC_PM:INFO] Check LP Mode 1, 0, 0, 1, 0, 0, 0
Entering LP_READY

UsbMsFn!STORE_Init: IOCTL_DISK_READ passed; 512 bytes read
[UFNPDD] OTG Cable Attached
[UFNPDD] RESET Again
[UFNPDD] RESET Again
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

853

帖子

0

TA的资源

五彩晶圆(中级)

6
 

Windows Mobile USB Mass Storage(大容量存储器)功能开发总结

Windows Mobile USB Mass Storage(大容量存储器)功能开发总结

1.       目标:
隐藏系统【设置-连接】里自带的“由USB连接到PC”,添加自己的设置项,在原有功能:“USB ActiveSync、启用高级网络功能”的基础上添加“USB大容量存储器”功能,使USB线连接到PC上时能把设备上的SD卡以移动磁盘的形式呈现出来。

2.       模块划分:
此功能开发分为三部分:
(1)       控制面板程序(usbtopc.cpl)。
(2)       功能主程序(主要是UI、逻辑及注册表处理)(usbtopc.exe),点击【设置-连接】里的图标所启动的程序。
(3)       USB驱动转换程序(usbswtich.exe)。
PS:也可以将后面两个程序集成为一个程序,便于加强控制。

3.       三者关系:
系统device.exe自动查找cpl程序,在进入【设置】时加载usbtopc.cpl,在设置里添加图标;Usbtopc.cpl捕获双击行为,调用usbtopc.exe,启动功能主程序;选择完要切换的驱动确认后,usbtopc.exe调用usbswitch.exe进行驱动切换。

4.       usbtopc.cpl:在【设置】里添加图标,并会捕获双击行为,启动其他程序。
usbtopc.exe提供功能主界面,处理是否需要切换驱动的逻辑,并根据用户的选择修改相应的注册表信息(DefaultClientDriver)。
usbswitch.exe根据注册表信息(DefaultClientDriver),进行USB驱动切换。

5.       不知缘由CE_MODULES_USBMSFN宏失效,通过在
I:\WM604\PLATFORM\DracoBSP\FILES\wpc\oem.cpm.csv
文件里添加CE_MODULES_USBMSFN,OEMDrivers解决。

6.       取消【设置-连接】里的“由USB连接到PC”模块。
在platform.reg中添加如下注册设置:
[HKEY_LOCAL_MACHINE\ControlPanel\PCConnection]
"Group"=dword:2
"redirect"=""

7.       添加USB Mass Storage功能
(1)       添加SYSGEN_USBFN_STORAGE宏(所用的bsp上本身就添加了)
(2)       上面的宏原则上会使CE_MODULES_USBMSFN宏生效。(所用的bsp不知为何没生效,第5条给出了解决方案)
(3)       在platform.reg中添加注册表信息(所用的bsp已经给出)
(4)       在platform.bib中添加文件信息。
保证镜像运行起来后,windows目录下有usbmsfn.dll文件,此为usb mass Storage的驱动文件。
示例设置:
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers\Mass_Storage_Class]
        "Dll"="usbmsfn.dll"
        "idvendor"=dword:1286
        "idProduct"=dword:A6CD
        "Product"="Marvell Mass Storage"
        "Manufacturer"="Marvell"
        "InterfaceSubClass"=dword:06
        "InterfaceProtocol"=dword:50
        "DeviceName"="DSK2:"
        "Removable"=dword:1

8.       usb驱动切换程序参照微软源码usbswitch
I:\wm604\PUBLIC\APPS\OAK\SAMPLES\USBSWITCH
核心代码:
DeviceIoControl(hUfn, IOCTL_UFN_CHANGE_CURRENT_CLIENT, &ucn, sizeof(ucn), NULL, 0, NULL, NULL);

9.    cpl程序出现的位置设置:
(1)设置注册表(2代表出现在【连接】页)
[HKEY_LOCAL_MACHINE\ControlPanel\usbtopc]
"Group" = dword:2
(2)cpl程序里处理CPL_IDNAME消息,设置控制面板小程序的名称,这个名称可以不跟程序本身的名称相同,但必须跟注册表里设置的名字相同(也便是usbtopc),这便是程序跟注册表里的设置联系的纽带。

10. 微软有的版本的usbmsfn.dll 是存在问题的,如果一直有问题,可以换用新版本的dll文件试试。
11. 后来添加了sd卡检测功能,卡不存在时不允许启用 “大容量存储器选项”
具体实现见:
12. 如果对USB驱动的概念不清楚,可参考文章:WinCE USB驱动架构及术语明析
13. 如何在”设置“中添加项,参考文章:Windows mobile在控制面板中添加应用
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

853

帖子

0

TA的资源

五彩晶圆(中级)

7
 
今天就看到一个帖子
http://bbs.csdn.net/topics/300083027
这个帖子最有用。
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

853

帖子

0

TA的资源

五彩晶圆(中级)

8
 
咦,这个eeworld 自动联想相同帖子怎么没有了?
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

9
 
这个功能我早就做好了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表