引用: 引用 36 楼 kkkcxf1981 的回复:
usbFN 除了MDD下的没看,我已经把PDD下的都仔细看过了,敢问一下,你的SD模拟U盘的功能实现了?
我做过将设备模拟成串口设备的。。而且我们的设备现在也支持将自己当成U盘。。。你要不找个别的BSP来好好的看下别人怎么搞的
既然U盘是走的mass storage协议就不需要改什么
"idVendor"=dword:045E
"Manufacturer"="Generic Manufacturer (PROTOTYPE--Remember to change idVendor)"
"idProduct"=dword:FFFF
这些只是显示在PC上边的内容,实际上只要走的mass storage协议,上边的设置是什么没关系。
另外mass sotrage功能通常不需要改PUBLIC下的代码,除非是你的CE设备中有两个盘符,你想在连接PC的时候把这两个盘符都送给PC,PC那边多出来两个移动磁盘,这样才需要改PUBLIC下的代码,我们的产品就是因为要在PC端同时显示NAND FLASH和SD卡这两个盘符才改了PUBLIC下的代码。
CE的U盘功能除了USB DEIVCE的PDD层驱动之外注册表也是十分重要的一项,因为PUBLIC下的MDD层是要读注册表的很多信息,详细的你可以看一下PUBLIC下USBFN的驱动代码,比如27楼所说描述的“DeviceName”这一项是USB驱动通过读这个信息来决定是把哪个盘符DismountStore,所以这里边的值一定要和你之前的FLASH盘符一致,比如说都是DSK1,否则是不行的。这一点你可以在CE设备下看看当连接PC后你的那个FLASH盘符是否还存在,正常情况下是会消失的,没消失肯定会成为无法识别的设备,当然,导致无法识别的设备原因有很多。
建议还是仔细研究一下USB MASS STORAGE枚举过程中的数据通信,然后结合BUS HOUND这个软件,再看PUBLIC下的MDD层代码和BSP中的PDD代码,会调试出来的。
大力感谢Veabol的指教!!
经过几天的努力,昨天终于可以在PC端显示"可移动磁盘"了,但是现在还是不能在查看属性的时候看到它的容量(现在是0字节),看来还得改些地方,还请Veabol继续指教啊
USB的枚举过程很重要,先前我就是卡在了第三个setup包上.
用BUS HOUND只能是当USB枚举成功以后才行,而枚举过程是它捕捉不到的!
如您所说:要在PC端同时显示NAND FLASH和SD卡这两个盘符才改了PUBLIC下的代码,我这产品也需要这样的功能,到时还得向您请教啊,呵呵
bus houd能看到枚举前的一些过程。。比如是USB的集线器和主机的通信。。。。当然这只是在你的USB的复位产生后前的一些信息。。后面的一定要拿到第一个EP中断后才能看到。。。
不过楼主看起来已经要OK了
我这枚举过程是通过串口打应信息出来的,看的很清楚.不过应该有其他的工具可以检测到这过程的
显示0字节的情况我没遇到过,\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\USBFN的代码和BSP中USBFN的驱动结合着看下。
好像在枚举过程中会送出去些mass storage容量等信息吧,记得不清楚了。
可以PUBLIC中的代码多加打印信息,查原因估计会方便一些。
请Veabol大虾赐教!!
用了wince5的源码usbfn,storage目录中 ,现在pc机上有盘符出现,但没容量显示.
可是在通信过程中,PC机老是会发 0x23指令,而此指令并不支持。导致reset。
在网上查到:
一个U盘插上,Windows要连续的发送12h(INQUIRY),23h(READ FORMAT CAPACITIES),25h(READ
CAPACITY),28h(READ10),最后的这个READ10是要读取U盘的MBR。
如果这个READ10成功了,主机可能还会发送MODE SENSE命令。
但是0x23不是SCSI指令集, 此指令是在UFI协议中才定义的。
bInterfaceSubClass这个值决定了使用的是何种命令传输集,1为RBC,2为SFF,4为UFI,6为SCSI.
而我在注册表,发给PC的interface descriptor中都是为6, 既是SCSI协议,
现在为什么PC机还会发0x23指令呢?难道要将bInterfaceSubClass 改为4 ??
我也在做这个,这个是我的贴:
http://topic.eeworld.net/u/20090921/15/a659fa47-e939-4f14-b57b-bf835aa3856a.html?61651
各位也帮帮忙了! 谢谢
我的组件添加了,在设备注册表里面也有DSK1: ,注册表也改了,但我连线之后没有任何反映,
[url=http://topic.eeworld.net/u/20090921/15/a659fa47-e939-4f14-b57b-bf835aa3856a.html?96366][/url]
引用: 引用 50 楼 kkkcxf1981 的回复:
请Veabol大虾赐教!!
用了wince5的源码usbfn,storage目录中 ,现在pc机上有盘符出现,但没容量显示.
可是在通信过程中,PC机老是会发 0x23指令,而此指令并不支持。导致reset。
在网上查到:
一个U盘插上,Windows要连续的发送12h(INQUIRY),23h(READ FORMAT CAPACITIES),25h(READ
CAPACITY),28h(READ10),最后的这个READ10是要读取U盘的MBR。
如果这个READ10成功了,主机可能还会发送MODE SENSE命令。
但是0x23不是SCSI指令集, 此指令是在UFI协议中才定义的。
bInterfaceSubClass这个值决定了使用的是何种命令传输集,1为RBC,2为SFF,4为UFI,6为SCSI.?
而我在注册表,发给PC的interface descriptor中都是为6, 既是SCSI协议,
现在为什么PC机还会发0x23指令呢?难道要将bInterfaceSubClass 改为4 ??
这种情况我没遇到过,不清楚原因
想请教Veabol一下:
你在做U盘功能的时候,应该不需要修改PUBLIC下的就可以在PC上显示U盘的容量,文件系统等内容吧?
Trueman_onlyme兄,你的情况是出在枚举上了,最好先了解下枚举的过程再找原因把
Trueman_onlyme兄,你的情况是出在枚举上了,最好先了解下枚举的过程再找原因把
请问你的打印信息时用什么高出来的
是KITL吗 ?