none
WinCE 5.0 编译的 CEPC 的 USB 驱动不能工作 RRS feed

  • 问题

  • 用 WinCE 5.0 (已经安装补丁,因为要模仿 WM6.5.3 的环境,本来想更新到 CE 5.2的,但却找不到相关的下载或补丁,如果哪位有相关信息也请告知啊) 编译了一个 CEPC 在 PC上跑,需要使用 USB 设备(鼠标,U盘等),与USB相关的功能已经添加,在PC上进入系统后,发现所有的USB设备都不能工作,系统(Debug编译)每次启动后第一次插入USB设备时,串口打印类似信息,只是"port" 不同而已,如下:

    0x83d80950: CHub(Root tier 0)::HubStatusChangeThread - port 7, change = 0x0001, status = 0x0501
    0x83d80950: CHub(Root tier 0)::HubStatusChangeThread - device attached on port 7
    0x83d80950: +CHub(Root tier 0)::AttachDevice - port = 7, fIsLowSpeed = 0
    0x83d80950: CHub(Root tier 0)::AttachDevice - status = DEVICE_CONFIG_STATUS_OPENING_ENDPOINT0_PIPE, failures = 0
    0x83d80950: CHub(Root tier 0)::AttachDevice - status = DEVICE_CONFIG_STATUS_USING_ADDRESS0, failures = 0
    0x83d80950: CHub(Root tier 0)::AttachDevice - status = DEVICE_CONFIG_STATUS_RESET_AND_ENABLE_PORT, failures = 0
    0x83d80950: CHub(Root tier 0)::AttachDevice - status = DEVICE_CONFIG_STATUS_SCHEDULING_GET_DEVICE_DESCRIPTOR_TEST, failures = 0
    0x83d82bec: Unknown: DEBUGCHK failed in file D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\USB\HCD\USB20\EHCI\.\chw.cpp at line 1246
    0x83d82bec: DEBUG_BREAK @00bf143b Ignored.

    在“chw.cpp”的 1246 行找到的代码如下:(1246行的是: ASSERT(FALSE);)

            USBSTS usbsts = Read_USBSTS();
        #ifdef DEBUG
            DWORD dwFrame;
            GetFrameNumber(&dwFrame); // calls UpdateFrameCounter
            DEBUGMSG( ZONE_REGISTERS, (TEXT("!!!interrupt!!!! on frame index + 1 = 0x%08x, USBSTS = 0x%04x\n"), dwFrame, usbsts.ul ) );
            if (usbsts.bit.HSError) { // Error Happens.
                DumpAllRegisters( );
                ASSERT(FALSE);
            }
        #else
            UpdateFrameCounter();
        #endif // DEBUG

    哪位知道该如何处理,还请指教。

    谢谢!

    2011年6月3日 8:35

答案

  • wMaxPacketSize: 0x507
    这个哪来的啊?

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

    HID、Control  8、16、32、64

    数据传输:

    USB1.0  64

    USB2.0  512

    USB3.0  1024

    这些是一般设置 2的次方值

    一般不会有超过 1024 啊

     

    如果你是 high-speed isochronous and interrupt endpoints的话

    Bits 12..11 specify the number of additional transaction
    opportunities per microframe:
    00 = None (1 transaction per microframe)
    01 = 1 additional (2 per microframe)
    10 = 2 additional (3 per microframe)
    11 = Reserved

    Bits 10..0 取值 对应表如下:

    00    取值 0 ~ 1024

    01    取值 513 ~ 1024

    10    取值 683 ~ 1024 

    11    保留   

    也不会有 0x507 这个值啊

     

    2011年6月8日 1:11

全部回复

  • 您好,

    您尝试过在release下面编译么?

    致礼


    Jesse Jiang [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月7日 7:34
    版主
  • 试过的,Release有问题才Debug的。

    我尝试把CE6.0下与USB相关的一些驱动(主要是 USB20 文件夹和 HID 文件夹下的)替换到 CE5.0 中,发现替换后能弹出窗口让指定驱动程序了,只是指定任何驱动程序都不能工作,从调试信息里面看到设备的两个“端点”信息有一个无效(应该是两个都有效),如下:
    USB_ENDPOINT_DESCRIPTOR:(这个有效)
    bLength: 0x7
    bDescriptorType: 0x5
    bEndpointAddress: 0x81
    bmAttributes: 0x2
    wMaxPacketSize: 0x200
    bInterval: 0xff

    USB_ENDPOINT_DESCRIPTOR:(这个无效)
    bLength: 0x14
    bDescriptorType: 0x0
    bEndpointAddress: 0x0
    bmAttributes: 0x0
    wMaxPacketSize: 0x507
    bInterval: 0x2
    这个可能是替换的 EHCI 里面有问题,希望这些信息能帮大家发现些什么。

    2011年6月7日 9:14
  • wMaxPacketSize: 0x507
    这个哪来的啊?

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

    HID、Control  8、16、32、64

    数据传输:

    USB1.0  64

    USB2.0  512

    USB3.0  1024

    这些是一般设置 2的次方值

    一般不会有超过 1024 啊

     

    如果你是 high-speed isochronous and interrupt endpoints的话

    Bits 12..11 specify the number of additional transaction
    opportunities per microframe:
    00 = None (1 transaction per microframe)
    01 = 1 additional (2 per microframe)
    10 = 2 additional (3 per microframe)
    11 = Reserved

    Bits 10..0 取值 对应表如下:

    00    取值 0 ~ 1024

    01    取值 513 ~ 1024

    10    取值 683 ~ 1024 

    11    保留   

    也不会有 0x507 这个值啊

     

    2011年6月8日 1:11
  • 所以我认为这个描述信息是无效的,根本就是错误的。

    本来是USB2.0的,有两个 endpoints 都是 Bulk,现在发现 HCD 传给 USBD 的已经是这样了,现在正在 HCD 那边找。

    2011年6月8日 7:59