We are using sync. slave fifo (2 bit addr, 32bit width, dma buffer size 16kB, dma buffer count 4, endpoint burst length 1) design with FX3 (ES chip).
Cypress driver's bandwidth is approximately 300MB/s (IN endpoint), 250MB/s (OUT endpoint). But WinUSB driver's bandwidth is only ~120MB/s in either direction.
How can be increased the WinUSB bandwidth?
We've not played with WinUSB that much. Was browsing through WinUSB collaterals, have you looked at http://msdn.microsoft.com/en-us/library/windows/hardware/ff728833(v=vs.85).aspx. Seems RAW_IO policy should help a bit. Have you given that a try?
You have to increase the packages per burst setting in the SuperSpeed endpoint. With only one packet per burst you cannot reach this speed. I dont believe that you could reach 300MB/s with this settings even in CyUSB driver.
I tested our DVK with WinUSB and the board delivered the same speed as CyUSB with the burst settings of 8 or 16.
The RAW_IO policy has some restrictions, for this reason we didn't try that. But thanks for your advice.
I'm sorry, my mistake; we reached 300MB/s with Cypress driver and 16 burst length. We were not sure about burst length effect, it is understood that we need to change burst length's value, different from one to reach high bandwidth. Thanks for your help.
When we increase the burst length, WinUSB driver's bandwidth decrease in Windows 7 64bit, Intel USB3.0 host (Ivy bridge) system. We are working about that problem, I will inform you when we get useful information.
It seems fine here. I'm using WinUSB on Win7 x64 SP1.
Bandwidth seems to vary a bit depending on host controller. I'm running 8x burst.
Fastest bulk xfers I have seen is 347MB/s read (from FX3 to Host), 288MB/s write (from Host to FX3).
That is with a uPD720201 host controller. The 720200 is a bit slower (301 MB/s & 190 MB/s).
I've measured throughput with various controllers and hubs. Haven't tried an IvyBridge yet though.
The firmware that we used with Cypress driver has auto dma channels. But other firmware's (used with WinUSB) dma channels was manual. We changed dma channels to auto and we achieved reasonable bandwidth with 8 or 16 burstlen:
Out endpoint bandwidth ~347MB/s,
In endpoint bandwidth ~357MB/s.