This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

How to improve USB host throughput?

In USB host mode, USB DMA is configured in AutoRequest mode.

However, there are still a lot of NAK behind the DATA phase of a BULKIN and in front of the ACK and the next BULKIN.

How to make USB host to output ACK right after the DATA phase ?

  • Yulin,

    Have you taken a look at our Driver Data Manual (normally under dvsdk_xx_xx_xx_xxx/PSP_xx_xx_xx_xxxx/docs)?  This document list which features were implemented by the software driver (in some cases hardware data-sheet suggests hardware supports more than what is implemented in software); this document also lists some constraints (hardware and software) and finally it has some performance numbers which you should be able to compare against.  Beyond this information, our USB expert also monitors these forums and should be able to give you additional pointers but the driver Data Manual should be a good starting point if you have not looked at it yet.

  • Yulin,

    Can you provide more details on the hardware platform (DM??/OMAP??) and the related OS (BIOS??/Linux2.6.???).

    Can you share the intended application details and the expected performance numbers, USB Mode (Host/Device) etc.

    This would be useful to address your query.

    regards

    swami

  • Juan,

    Thanks for your attention.

    Yes, I did and I also see a big bandwidth gap between the CDC and MSC.

  • Swami,

    Thanks for your attention.

    It is a platform based on 216MHz DM355, 216MHz DDR2, and 108MHz CFGBUS.

    The OS is Flexmedia proprietary RTOS, PicOS.

    The application is USB MSC to sequentially read a USB HDD enclosure.  The throughput is ~25MB/s now and we lookforward to 35MB/s.

    Regards, Yulin.

  • Yulin,

    The throughput achieved in the context of MSC is pretty much dependant on the following factors

    • Device side capabality to sustain say 35MBps.
    • Host side MSC implementation to sustain 35MBps

    Since you mentioned this is a custom environment on a embedded RTOS I hope you would be having optimized/can optimize MSC implementation.

    If we keep the DMA engine busy you should be able to ideally reach higher throughputs.  In the given configuration have you tried by enabling double buffering in the USB controller by configuring the FIFO appropriately during the FIFO setup?  This is a needed if you want to reach beyond 25MBps as the DM355 DDR2 access timings might start impacting the throughput beyond this figure.

    You indicated in your earlier post that you are seeing NAK's on the bus.  If this is the case this means that the USB HDD is not able to sustain the data rate while DM355 USB controller is actively probing it for more data.  From the detail you have provided above I assume that DM355 is acting as USB Host to an externally connected USB HDD.  If you see NAK's on the bus it is definitely an issue with the USB HDD.  On the other hand you you do not see the NAK's and still the throughput is limited to 25MBps then try enabling the double buffering feature (for the reasons that I have mentioned above) and you should be seeing improved throughputs.

    regards

    swami