在ce上使用了hub集線器之後,USB驅動要注意幾點:
1、傳輸buffer要確定足夠大才行。
2、如果設置了USB休眠模式,那麼在休眠的時候,要確保能夠進入到休眠的處理中。
修改buffer:
E:\WINCE600\PLATFORM\SMDK6410\src\drivers\USB\hcd\s3c6410_ohci.c
[cpp]
// 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()函數中的:
[cpp]
// 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);
}
修改為:
[cpp]
// 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口都用不了的問題。