【usb 总线枚举失败! 《usb function driver》问题如何排查!】
【平台:】 2440+wince5.0
【目的】:实现CE 设备在USB与PC连线的情况下显示为 移动设备(U盘)的功能! 因为我的BSP中的usb function的driver只有serial的功能 无法通过简单的注册表更改实现切换!所以不得不自己移植sb function driver!(我是从samsug 官方bsp下的usbfn 移植到当前BSP下,)因为他的release note 有说明:
The USB Mass Storage Function driver was implemented.
The USB driver was updated to support the USB Mass Storage Function. And, the usbmsfn.dll was added in the files folder. So, it can support both the Serial and the Mass Storage Function Class.
【现象:】
用 usb view 软件查看CE DEVICE 得到如下信息:
/*Device Descriptor:bcdUSB: 0x0000bDeviceClass: 0x00bDeviceSubClass: 0x00bDeviceProtocol: 0x00bMaxPacketSize0: 0x00 (0)idVendor: 0x0000idProduct: 0x0000bcdDevice: 0x0000iManufacturer: 0x00iProduct: 0x00iSerialNumber: 0x00bNumConfigurations: 0x00ConnectionStatus: [color=#FF0000]DeviceFailedEnumeration[/color]Current Config Value: 0x00Device Bus Speed: LowDevice Address: 0x00Open Pipes: 0*/
SC2440UsbFn!UfnPdd_IsEndpointSupportable: --
UsbFnMdd!IsInterfaceSupportable: Endpoint index 1 can be supported by physical endpoint 2
UsbFnMdd!UfnMdd_RegisterDevice: Device registered
---->now Read transfer thread priority from registry
UsbMsFn!BOT_ReadConfigurationValue: ++
UsbMsFn!BOT_ReadConfigurationValue: --
UsbMsFn!BOT_InternalInit: BOT transfer thread priority = 100
---->now call CeSetThreadPriority()
UsbMsFn!BOT_TransferThread: ++
---->now call BOT_DeviceNotify()
//这里并没有实际进入BOT_DeviceNotify()函数! 次函数在BOT_InternalInit()中被调用
SC2440UsbFn!UfnPdd_InitEndpoint: ++
SC2440UsbFn!UfnPdd_IsEndpointSupportable: ++
SC2440UsbFn!UfnPdd_IsEndpointSupportable: --
SC2440UsbFn!UfnPdd_InitEndpoint: --
SC2440UsbFn!UfnPdd_IOControl: ++
usb->SetPowerState(.
usb->HW_USBClocks.
HW_USBClocks::D0
SC2440UsbFn!UfnPdd_IOControl: --
->UfnPdd_Start
SC2440UsbFn!UfnPdd_Start: ++
SC2440UsbFn!UfnPdd_Start: ++
-dwSysIntr=28
USBD enable interrutp
::: SYSINTR_USBD OEMInterruptDone
SC2440UsbFn!UfnPdd_Start: --
<-UfnPdd_Start
UsbFnMdd!UfnMdd_Start: Function controller running
UsbMsFn!BOT_InternalInit: --
<--BOT_InternalInit
<-BOT_InternalInit,,,dwRet==true
usb->enter interrupt sevice routine.
UsbFnMdd!CUfnBus::ActivateChild: Activated client driver "Mass_Storage_Class"
SC2440UsbFn!ISTMain: ++
SC2440UsbFn!EnableEndpointInterrupt: ++
SC2440UsbFn!EnableEndpointInterrupt: --
---
USBD的中断可以相应! 但目前没有任何反应在PC端!
现在不知道该怎么排查和解决了? 请坛友帮忙!非常感谢! 只有65分了
[解决办法]
"DeviceName"="DSK1:"
这个DSK1存在吗?
[解决办法]
Sysintr 在驱动中直接静态指定的! 是
#define SYSINTR_USBD (SYSINTR_FIRMWARE+12)
Q:多问下:SYSINTR_FIRMWARE的值具体是多少 是否指定!
LZ是用的哪个BSP?
1、Sysintr 不一定是静态给定的,一般是动态的,在map.c文件有其数组的定义的
2、SYSINTR_FIRMWARE在不同的BSP里面,可能也是不一样的。。。如果是用的YL2440A的话,应该是如下:
#define SYSINTR_DEVICES 8
#define SYSINTR_FIRMWARE (SYSINTR_DEVICES+8)
#define SYSINTR_OHCI (SYSINTR_FIRMWARE+1) // 17
[解决办法]
恩 好 好
[解决办法]
study
[解决办法]
study
[解决办法]
关注中。。。。。。。。。。。。。
[解决办法]
这么高深啊!实在不懂啊 ,只能来添个人气了 呵呵,混点积分!
[解决办法]
mark
[解决办法]
谢谢分享
[解决办法]
Mark!
[解决办法]
谢谢楼主分享
[解决办法]
学习下!
[解决办法]
嵌入式wince的技术问题可以到海同嵌入式技术网站上在线提问。有技术老师回答的。
[解决办法]
mark
[解决办法]
很不错
------解决方案--------------------
学习了~~~
[解决办法]
up
[解决办法]
跑过看看
[解决办法]
study
[解决办法]
顶!!!!!!!!
[解决办法]
我也来看看,呵呵
[解决办法]
marks
[解决办法]
很好
[解决办法]
mark
[解决办法]
学习,虽然不懂,但觉得很有意思。。。。
[解决办法]
好高级的啊 不懂 帮顶下