Hello!every one.i've been bothered by the slow speed transfer for several days.
I configured the CY7C68013 in slave fifo auto in mode,endpoint 2 to be a 1024 depth and quad buffer. I wrote 2KB 16-bit datum into 68013.After this operation, the host use function "BeginDataXfer","WaitForXfer"and "FinishDataXfer" to read 512 bytes 4 times with no interval. then I use "QueryPerformanceCounter" and "QueryPerformanceFrequency" in VC++ to compute the consumed time. The result is 2ms in interrupt transfer and 16 ms in bulk transfer.So the speed is 8Mbps in interrupet transfer and 1Mbps in bulk transfer.It's only the speed of full speed rather than the speed of high-speed.(the polling interval is set to be 1 in dscr.a51)
I thought the SIE may work in full-speed mode, so I try to set the HSM bit of register USBCS,but the speed doesn't change. I thought there may be time interval between four 512 bytes, so I try to read one time of the 512 bytes, but the time consumed in interrupt transfer is 0.5ms, the speed is still 8Mbps. I can't find any other idea for why the speed is so slow now
Furthermore,there are 2 other questions of the interrupt transfer:
1,I configure the endpoint 2 to be 1024 depth ,quad buffer , interrupt endpoint and 16-bit wide, the other endpoint are invalid. I wrote 2KB or more 16 datum into CY7C68013. Then I use the CyConsole.exe to read,I found there are only 2KB bytes in the endpoint2. I don't know why.
2, In the visual C++ if I read more than 512 bytes one time,then the datum after the 512th bytes are 0(the initial value of memory), that 's why I only read only 512 bytes one time.
May the problems are humble, but I can't settle them these days,I need your help. Thank you,everyone.
|