当前位置: 代码迷 >> WinCE >> wince USB HUB 应用注意
  详细解决方案

wince USB HUB 应用注意

热度:288   发布时间:2016-04-28 12:45:57.0
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 bufferstatic const DWORD gcTotalAvailablePhysicalMemory = 64*1024;    // 64Kstatic 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口都用不了的问题。

  相关解决方案