wince USB HUB 使用注意

在ce上使用了hub集线器之后,USB驱动要注意几点:

1、传输buffer要确定足够大才行。

2、如果设置了USB休眠模式,那么在休眠的时候,要确保能够进入到休眠的处理中。

 

修改buffer:

E:\WINCE600\PLATFORM\SMDK6410\src\drivers\USB\hcd\s3c6410_ohci.c

// Amount of memory to use for HCD buffer
static const DWORD gcTotalAvailablePhysicalMemory = 64*1024;    // 64K
static const DWORD gcHighPriorityPhysicalMemory = 16*1024;        // 16K

这个是原代码中定义的buffer,如果使用hub扩展为两个USB,则改大一倍

休眠处理:

看InitializeOHCI()函数中的:

    // PCI OHCI support suspend and resume
    if ( hKey!=NULL)
    {
        DWORD dwCapability;
        DWORD dwType;
        DWORD dwLength = sizeof(DWORD);
        if (RegQueryValueEx(hKey, HCD_CAPABILITY_VALNAME, 0, &dwType, (PUCHAR)&dwCapability, &dwLength) == ERROR_SUCCESS)
        {
            HcdMdd_SetCapability(pobOhcd, dwCapability);
            USBH_INF((_T("[USBH:INF] InitializeOHCI() : USB Host Cap : 0x%08x\n"), dwCapability));
        }

        RegCloseKey(hKey);
    }

修改为:

    // PCI OHCI support suspend and resume
    if ( hKey!=NULL)
    {
        DWORD dwCapability;
        DWORD dwType;
        DWORD dwLength = sizeof(DWORD);
        if (RegQueryValueEx(hKey, HCD_CAPABILITY_VALNAME, 0, &dwType, (PUCHAR)&dwCapability, &dwLength) == ERROR_SUCCESS)
        {
            dwCapability |= 0x01;
            HcdMdd_SetCapability(pobOhcd, dwCapability);
            USBH_INF((_T("[USBH:INF] InitializeOHCI() : USB Host Cap : 0x%08x\n"), dwCapability));
        }

        RegCloseKey(hKey);
    }



 

上述情况在使用HUB接3G模块调试的时候出现的,现在已基本修正,特此记录一下。

 

如果不改大那个buffer,接上3G模块后会出现USB虚拟出来的串口中,有一个串口无法正常进行AT指令交互(正常的情况应该有两个串口可以进行AT指令,一个用于拨号上网,一个用于通话短信等的AT指令交互)。

如果不确保USB在系统休眠的时候进入到对应的休眠处理的话,会出现USB挂掉的问题,导致主U口都用不了的问题。

你可能感兴趣的:(wince USB HUB 使用注意)