0
votes

We are developing a USB Driver for Ethernet device for WinCE 6.

We are finding performance issues and could narrow down to them USB Stack, using profiling of code. 95% of the time in Tx path is taken in IssueBulkTransfer, which causes the driver to queue packets internally. TX-COMPLETE routine call is not in sync with IssueBulkTransfer.

We have used USB analyzer to check the USB bandwidth usage and found it as 20-30% of total bandwidth. So hardware is fast enough to transfer data across the interface.

With above findings bottleneck seems like in the USB bus Driver and USB HCD Driver.

  1. Is there any known performance limitation with WinCE 6 USB Stack?

  2. What is the maximum speed we can get with High speed device (USB 2.0) using WinCE 6.0 USB stack?

1
Max speed depends on the actual hardware. - Turbo J

1 Answers

0
votes

Are you using sync transfers? If you use async ones you may be able to queue multiple packets for tx or rx and the host driver will not have to wait till your driver receives the completition notification to issue a new tx or rx request. This may allow you to use more bandwidth. You may also allocate buffers using HalAllocateCommonBuffer or by reserving some physical memory range for buffers. In this way you may avoid copies in the driver if the driver can use DMA. You did not provide details about your HW architecture, it's difficult to estimate the level of performances you may expect.