The system memory is 512kB, the system memory contains the firmware, DMA buffer, DMA descriptor and cache (page 24 of programmer's manual).
The API user guide specifies 64kB as the recommended buffer size (page 57 of FX3 API user guide)
Thanks for your answer, but when using 64KB buffer, it is impossible to make some transferts. What's the problem ?
(I take 4 buffer of 64 KB)
I think using 16Kb DMA size is the better way, according with the maximum burst size, isnt it ?
Another Questions :
2. Using CY_U3P_DMA_MODE_BUFFER is faster than CY_U3P_DMA_MODE_BYTE ?
3. During my benchmarks, i saw that some packets were transfered up to 325 MB/s, and some others at less than 150 MB/s, with an average of 250 MB/s without failures transferts. Do you know why ? And how I can stabilize the bandwith in the better and the faster way?
When you say transfer is impossible are you not able to use the endpoint at all or few transfers of failing?
Transfer speed is kind of subjective it can't really be commented upon. It is just a method as to whether you want your end application to wait for a particular byte count or buffer count before it transfers the data.
When you say speed varies, do you mean there are INs and the device NAKs sometimes (leading to bandwidth reduction) or there are INs sent at varying rate?
Transfers are impossible because there are an error :
- CyU3PDmaChannelConfig_t uint16_t size;
- The size is stocked on 16 bit, so : 2^16 = 65536
There are 65536 values, 0 to 65535. (unsigned int,16 bit)
It's impossible to set 64Kb.
Speed varying by transfering INs and OUTs at varying rate, without any failure transfert.
The maximum size is 64k - 16. Sorry my bad with 64k.
Windows 8 will support USB3 natively and the host controllers are also maturing. Given that the varying rate is due to host not sending IN requests I don't think there is much that can be done at this point of time.