Hi all,
I am developing a driver for our TV receiver chip that connects a Windows CE
5.0 based product.
All related information as below:
Our TV receiver chip: USB client(USB 2.0 interface);
Windows CE 5.0 based product: USB host(EHCI host driver for USB 2.0);
Hardware platform: AMD DB1250 evaluation board with integrated USB 2.0 host
controller;
Software platform: Windows CE 5.0 with all QFEs up to date;
Data transfer mode: Isochronous read, 8 frames per transfer, 3 packets per
frame and packet size is 1KByte;
My problems is: after every transfer(24KBytes) there are about 10ms delay
(from Ellisys USB analyser), which caused a poor throughput. In theory, the
isochronous mode should archieve 24MByte/s(that is, 24KBytes/ms).
I read the EHCI driver code released with DB1250's BSP, but I cannot find
where the delay is. So I will be appreciated if someone gives me some hint.
Or if you have developed USB client driver with USB 2.0 interface, how about
your driver throughtput in the isochronous read mode on the Windows CE based
product.
I suspect maybe that delay is caused by Windows CE interrupt latency beause
it occurs after every transfer completes. But I don't how to measure the
latency.
Any advice is welcome. Thanks!
Code as below:
for(dwFrameIndex = 0; dwFrameIndex < 8; dwFrameIndex ++)
{
dwFrameLength[dwFrameIndex] = 3*1024;
}
dwErr = IssueIsochTransfer (pUsbTLG->UsbFuncs, pUsbTLG->IsochIn.
hPipe,
DefaultTransferComplete, pUsbTLG->hEvent
[dwTotal],
USB_NO_WAIT | USB_IN_TRANSFER |
USB_START_ISOCH_ASAP | USB_SHORT_TRANSFER_OK,
0, // Using
USB_START_ISOCH_ASAP precludes the need for a start frame
8, // Number of frames to read
dwFrameLength, // Array that
receives the length of each frame
pCurBufOut, // Pointer to
transfer buffer
0, // Specifies the
physical address, which may be NULL, of the data buffer
&(pUsbTLG->dwBytesTransferred[dwTotal]),
// Number of bytes transferred by USB
0, // Timeout in msec
(LPDWORD)&(pUsbTLG->hTransfer[dwTotal]))
; // Returns USB_ERROR or USB_TRANSFER
Silver - 23 Jul 2008 17:11 GMT
Try running the kernel tracker to see where time is spent during those 10mS.
I would also wager that the ISOCH is the least tested part of the USB stack
as it is the least used aspect of USB (versus bulk/interrupt).
Geoff
--
jameschou - 24 Jul 2008 01:15 GMT
>Try running the kernel tracker to see where time is spent during those 10mS.
>
[quoted text clipped - 3 lines]
>Geoff
>--
######################################################
Hi Geoff,
Thanks a lot for your kind reply!
I will try the kernel tracker.
I agree that the ISOCH mode is the least used versus bulk/interrupt because
USB Mass Storage & HID are used by lots of end users.
But I find some many webcam drivers are using ISOCH mode to transfer data
over USB. Could anybody post their testing result in ISOCH mode transfer? I
googled day by day, but I cannot find any information about the ISOCH
throughput on Windows CE platform.
Thanks a lot!